Skip to content

Commit

Permalink
Machine Ownership (#1970)
Browse files Browse the repository at this point in the history
Co-authored-by: mikerooni <139889766+mikerooni@users.noreply.github.com>
  • Loading branch information
2 people authored and krossgg committed Oct 13, 2024
1 parent dc2f153 commit b830d38
Show file tree
Hide file tree
Showing 22 changed files with 494 additions and 7 deletions.
8 changes: 7 additions & 1 deletion dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,11 @@ dependencies {

// JAVD
compileOnly(forge.javd) { transitive = false }
//modRuntimeOnly("curse.maven:trenzalore-870210:4848244")
runtimeOnly("curse.maven:trenzalore-870210:4848244")

compileOnly(forge.ftbteams)
compileOnly(forge.ftblibrary)

compileOnly(forge.argonauts)
compileOnly(forge.resourceful)
}
16 changes: 16 additions & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ dependencyResolutionManagement {
def jadeForgeVersion = "5366595"
def worldStripperForgeFile = "4578579"
def javdVersion = "4803995"
def ftbteamsForgeFile = "5631446"
def ftblibraryForgeFile = "5754910"
def argonautsForgeFile = "5263580"
def resourcefulForgeFile = "5659871"

// Libs
def parchmentVersion = "2024.07.28" // https://parchmentmc.org/docs/getting-started
Expand Down Expand Up @@ -107,6 +111,18 @@ dependencyResolutionManagement {

def javd = version("javd", javdVersion)
library("javd", "curse.maven", "javd-370890").versionRef(javd)

def ftbteams = version("ftbteams", ftbteamsForgeFile)
library("ftbteams", "curse.maven", "ftb-teams-forge-404468").versionRef(ftbteams)

def ftblibrary = version("ftblibrary", ftblibraryForgeFile)
library("ftblibrary", "curse.maven", "ftb-library-forge-404465").versionRef(ftblibrary)

def argonautslib = version("argonauts", argonautsForgeFile)
library("argonauts", "curse.maven", "argonauts-845833").versionRef(argonautslib)

def resourceful = version("resourceful", resourcefulForgeFile)
library("resourceful", "curse.maven", "resourceful-lib-570073").versionRef(resourceful)
}

libs {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
"res": "gtceu:aluminium_frame"
},
"items": [
"#forge:frames",
"#minecraft:climbable"
"#minecraft:climbable",
"#forge:frames"
],
"page": "gtceu:materials/frame",
"position": [
Expand Down
6 changes: 6 additions & 0 deletions src/generated/resources/assets/gtceu/lang/en_ud.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,12 @@
"behavior.portable_scanner.environmental_hazard": "ɯdd %s - ɹ§%s :ʞunɥƆ uI pɹɐzɐH ןɐʇuǝɯuoɹıʌuƎ",
"behavior.portable_scanner.environmental_hazard.nothing": "ɹ§buıɥʇoN9§ :ʞunɥƆ uI pɹɐzɐH ןɐʇuǝɯuoɹıʌuƎ",
"behavior.portable_scanner.eu_per_sec": "ʇ/∩Ǝ %s :)puoɔǝs ʇsɐן( ǝbɐɹǝʌⱯ",
"behavior.portable_scanner.guild_name": "ɹ§%s :ǝɯɐN pןın⅁ᄅ§",
"behavior.portable_scanner.local_hazard": "ɯdd %s - ɹ§%s :ɐǝɹⱯ uI pɹɐzɐH ןɐɔoꞀ",
"behavior.portable_scanner.local_hazard.nothing": "ɹ§buıɥʇoN9§ :ɐǝɹⱯ uI pɹɐzɐH ןɐɔoꞀ",
"behavior.portable_scanner.machine_disabled": "˙pǝןqɐsıᗡ",
"behavior.portable_scanner.machine_front_facing": "%s :buıɔɐℲ ʇuoɹℲ",
"behavior.portable_scanner.machine_ownership": "ɹ§%s :ǝdʎ⟘ ɹǝuʍO ǝuıɥɔɐWᄅ§",
"behavior.portable_scanner.machine_power_loss": "˙ssoן ɹǝʍod oʇ ǝnp uʍop ʇnɥS",
"behavior.portable_scanner.machine_progress": "%s / %s :pɐoꞀ/ssǝɹboɹԀ",
"behavior.portable_scanner.machine_upwards_facing": "%s :buıɔɐℲ spɹɐʍd∩",
Expand All @@ -42,10 +44,12 @@
"behavior.portable_scanner.multiblock_energy_output": "%s :ɹǝı⟘ ʇ/∩Ǝ %s :ʇndʇnO ʎbɹǝuƎ xɐW",
"behavior.portable_scanner.multiblock_maintenance": "%s :sɯǝןqoɹԀ",
"behavior.portable_scanner.multiblock_parallel": "%s :buıssǝɔoɹԀ ıʇןnW",
"behavior.portable_scanner.player_name": "ɹ§%s :ǝuıןuO ɹǝʎɐןԀㄥ§ 'ɹ§%s :ǝɯɐN ɹǝʎɐןԀᄅ§",
"behavior.portable_scanner.position": "----- %s :ᗡ %s :Z %s :ʎ %s :X -----",
"behavior.portable_scanner.state": "%s :%s",
"behavior.portable_scanner.tank": "%s ᗺɯ %s / ᗺɯ %s :%s ʞuɐ⟘",
"behavior.portable_scanner.tanks_empty": "ʎʇdɯƎ sʞuɐ⟘ ןןⱯ",
"behavior.portable_scanner.team_name": "ɹ§%s :ǝɯɐN ɯɐǝ⟘ᄅ§",
"behavior.portable_scanner.workable_consumption": "Ɐ %s ʇɐ ʇ/∩Ǝ %s :sǝs∩ ʎןqɐqoɹԀ",
"behavior.portable_scanner.workable_production": "Ɐ %s ʇɐ ʇ/∩Ǝ %s :sǝɔnpoɹԀ ʎןqɐqoɹԀ",
"behavior.portable_scanner.workable_progress": "s %s / s %s :ssǝɹboɹԀ",
Expand Down Expand Up @@ -2286,6 +2290,8 @@
"config.gtceu.option.ldFluidPipeMinDistance": "ǝɔuɐʇsıᗡuıWǝdıԀpınןℲpן",
"config.gtceu.option.ldItemPipeMinDistance": "ǝɔuɐʇsıᗡuıWǝdıԀɯǝʇIpן",
"config.gtceu.option.liquidBoilerBaseOutput": "ʇndʇnOǝsɐᗺɹǝןıoᗺpınbıן",
"config.gtceu.option.machineOwnerBreak": "ʞɐǝɹᗺɹǝuʍOǝuıɥɔɐɯ",
"config.gtceu.option.machineOwnerGUI": "I∩⅁ɹǝuʍOǝuıɥɔɐɯ",
"config.gtceu.option.machineSounds": "spunoSǝuıɥɔɐɯ",
"config.gtceu.option.machines": "sǝuıɥɔɐɯ",
"config.gtceu.option.machinesEmissiveTextures": "sǝɹnʇxǝ⟘ǝʌıssıɯƎsǝuıɥɔɐɯ",
Expand Down
6 changes: 6 additions & 0 deletions src/generated/resources/assets/gtceu/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,12 @@
"behavior.portable_scanner.environmental_hazard": "Environmental Hazard In Chunk: %s§r - %s ppm",
"behavior.portable_scanner.environmental_hazard.nothing": "Environmental Hazard In Chunk: §6Nothing§r",
"behavior.portable_scanner.eu_per_sec": "Average (last second): %s EU/t",
"behavior.portable_scanner.guild_name": "§2Guild Name: %s§r",
"behavior.portable_scanner.local_hazard": "Local Hazard In Area: %s§r - %s ppm",
"behavior.portable_scanner.local_hazard.nothing": "Local Hazard In Area: §6Nothing§r",
"behavior.portable_scanner.machine_disabled": "Disabled.",
"behavior.portable_scanner.machine_front_facing": "Front Facing: %s",
"behavior.portable_scanner.machine_ownership": "§2Machine Owner Type: %s§r",
"behavior.portable_scanner.machine_power_loss": "Shut down due to power loss.",
"behavior.portable_scanner.machine_progress": "Progress/Load: %s / %s",
"behavior.portable_scanner.machine_upwards_facing": "Upwards Facing: %s",
Expand All @@ -42,10 +44,12 @@
"behavior.portable_scanner.multiblock_energy_output": "Max Energy Output: %s EU/t Tier: %s",
"behavior.portable_scanner.multiblock_maintenance": "Problems: %s",
"behavior.portable_scanner.multiblock_parallel": "Multi Processing: %s",
"behavior.portable_scanner.player_name": "§2Player Name: %s§r, §7Player Online: %s§r",
"behavior.portable_scanner.position": "----- X: %s Y: %s Z: %s D: %s -----",
"behavior.portable_scanner.state": "%s: %s",
"behavior.portable_scanner.tank": "Tank %s: %s mB / %s mB %s",
"behavior.portable_scanner.tanks_empty": "All Tanks Empty",
"behavior.portable_scanner.team_name": "§2Team Name: %s§r",
"behavior.portable_scanner.workable_consumption": "Probably Uses: %s EU/t at %s A",
"behavior.portable_scanner.workable_production": "Probably Produces: %s EU/t at %s A",
"behavior.portable_scanner.workable_progress": "Progress: %s s / %s s",
Expand Down Expand Up @@ -2286,6 +2290,8 @@
"config.gtceu.option.ldFluidPipeMinDistance": "ldFluidPipeMinDistance",
"config.gtceu.option.ldItemPipeMinDistance": "ldItemPipeMinDistance",
"config.gtceu.option.liquidBoilerBaseOutput": "liquidBoilerBaseOutput",
"config.gtceu.option.machineOwnerBreak": "machineOwnerBreak",
"config.gtceu.option.machineOwnerGUI": "machineOwnerGUI",
"config.gtceu.option.machineSounds": "machineSounds",
"config.gtceu.option.machines": "machines",
"config.gtceu.option.machinesEmissiveTextures": "machinesEmissiveTextures",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
"gtceu:rubber_wood",
"gtceu:stripped_rubber_wood"
]
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
{
"values": [
"gtceu:rubber_log"
"gtceu:rubber_log",
"gtceu:stripped_rubber_log",
"gtceu:rubber_wood",
"gtceu:stripped_rubber_wood"
]
}
8 changes: 8 additions & 0 deletions src/main/java/com/gregtechceu/gtceu/GTCEu.java
Original file line number Diff line number Diff line change
Expand Up @@ -90,4 +90,12 @@ public static boolean isShimmerLoaded() {
public static boolean isJAVDLoaded() {
return LDLib.isModLoaded(GTValues.MODID_JAVD);
}

public static boolean isFTBTeamsLoaded() {
return LDLib.isModLoaded(GTValues.MODID_FTBTEAMS);
}

public static boolean isArgonautsLoaded() {
return LDLib.isModLoaded(GTValues.MODID_ARGONAUTS);
}
}
4 changes: 3 additions & 1 deletion src/main/java/com/gregtechceu/gtceu/api/GTValues.java
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,9 @@ public static int[] tiersBetween(int minInclusive, int maxInclusive) {
MODID_CURIOS = "curios",
MODID_AE2WTLIB = "ae2wtlib",
MODID_SHIMMER = "shimmer",
MODID_JAVD = "javd";
MODID_JAVD = "javd",
MODID_FTBTEAMS = "ftbteams",
MODID_ARGONAUTS = "argonauts";

/**
* Spray painting compat modids
Expand Down
29 changes: 29 additions & 0 deletions src/main/java/com/gregtechceu/gtceu/api/block/IMachineBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,16 @@
import com.gregtechceu.gtceu.api.pipenet.longdistance.ILDEndpoint;
import com.gregtechceu.gtceu.common.pipelike.fluidpipe.longdistance.LDFluidEndpointMachine;
import com.gregtechceu.gtceu.common.pipelike.item.longdistance.LDItemEndpointMachine;
import com.gregtechceu.gtceu.common.machine.owner.ArgonautsOwner;
import com.gregtechceu.gtceu.common.machine.owner.FTBOwner;
import com.gregtechceu.gtceu.common.machine.owner.IMachineOwner;
import com.gregtechceu.gtceu.common.machine.owner.PlayerOwner;

import com.lowdragmc.lowdraglib.client.renderer.IBlockRendererProvider;

import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
Expand All @@ -36,10 +41,16 @@
import net.neoforged.neoforge.fluids.capability.IFluidHandler;
import net.neoforged.neoforge.items.IItemHandler;

import dev.ftb.mods.ftbteams.FTBTeamsAPIImpl;
import dev.ftb.mods.ftbteams.api.Team;
import earth.terrarium.argonauts.api.guild.Guild;
import earth.terrarium.argonauts.common.handlers.guild.GuildHandler;
import appeng.api.AECapabilities;
import appeng.api.networking.IInWorldGridNodeHost;
import org.jetbrains.annotations.Nullable;

import java.util.Optional;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
Expand Down Expand Up @@ -329,4 +340,22 @@ static <T> List<T> getCapabilitiesFromTraits(List<MachineTrait> traits, Directio
}
return list;
}

default void setMachineOwner(MetaMachine machine, ServerPlayer player) {
if (IMachineOwner.MachineOwnerType.FTB.isAvailable()) {
Optional<Team> team = FTBTeamsAPIImpl.INSTANCE.getManager().getTeamForPlayerID(player.getUUID());
if (team.isPresent()) {
machine.holder.setOwner(new FTBOwner(team.get(), player.getUUID()));
return;
}
}
if (IMachineOwner.MachineOwnerType.ARGONAUTS.isAvailable()) {
Guild guild = GuildHandler.read(player.server).get(player);
if (guild != null) {
machine.holder.setOwner(new ArgonautsOwner(guild, player.getUUID()));
return;
}
}
machine.holder.setOwner(new PlayerOwner(player.getUUID()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition;
import com.gregtechceu.gtceu.api.machine.feature.*;
import com.gregtechceu.gtceu.data.item.GTItems;
import com.gregtechceu.gtceu.config.ConfigHolder;
import com.gregtechceu.gtceu.utils.GTUtil;

import com.lowdragmc.lowdraglib.client.renderer.IRenderer;
Expand Down Expand Up @@ -132,6 +133,12 @@ public void setPlacedBy(Level pLevel, BlockPos pPos, BlockState pState, @Nullabl
ItemStack pStack) {
if (!pLevel.isClientSide) {
var machine = getMachine(pLevel, pPos);
if (machine != null) {
if (player instanceof ServerPlayer sPlayer) {
setMachineOwner(machine, sPlayer);
machine.markDirty();
}
}
if (machine instanceof IDropSaveMachine dropSaveMachine) {
CustomData tag = pStack.get(DataComponents.BLOCK_ENTITY_DATA);
if (tag != null) {
Expand Down Expand Up @@ -294,6 +301,11 @@ protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Lev
var machine = getMachine(world, pos);
boolean shouldOpenUi = true;

if (machine != null && machine.holder.getOwner() == null && player instanceof ServerPlayer) {
setMachineOwner(machine, (ServerPlayer) player);
machine.markDirty();
}

Set<GTToolType> types = ToolHelper.getToolTypes(stack);
if (machine != null && !types.isEmpty() && ToolHelper.canUse(stack)) {
var result = machine.onToolClick(types, stack,
Expand Down Expand Up @@ -321,12 +333,25 @@ protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Lev
var result = interactedMachine.onUse(state, world, pos, player, hand, hit);
if (result.result() != InteractionResult.PASS) return result;
}
if (shouldOpenUi && machine instanceof IUIMachine uiMachine) {
if (shouldOpenUi && machine instanceof IUIMachine uiMachine &&
canOpenOwnerMachine(player, machine.getHolder())) {
return uiMachine.tryToOpenUI(player, hand, hit);
}
return shouldOpenUi ? ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION : ItemInteractionResult.CONSUME;
}

public boolean canOpenOwnerMachine(Player player, IMachineBlockEntity machine) {
if (!ConfigHolder.INSTANCE.machines.machineOwnerGUI) return true;
if (machine.getOwner() == null) return true;
return machine.getOwner().isPlayerInTeam(player) || machine.getOwner().isPlayerFriendly(player);
}

public static boolean canBreakOwnerMachine(Player player, IMachineBlockEntity machine) {
if (!ConfigHolder.INSTANCE.machines.machineOwnerBreak) return true;
if (machine.getOwner() == null) return true;
return machine.getOwner().isPlayerInTeam(player);
}

public boolean canConnectRedstone(BlockGetter level, BlockPos pos, Direction side) {
return getMachine(level, pos).canConnectRedstone(side);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,20 @@
import com.gregtechceu.gtceu.api.item.tool.GTToolType;
import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity;
import com.gregtechceu.gtceu.api.machine.MetaMachine;
import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine;
import com.gregtechceu.gtceu.api.machine.trait.MachineTrait;
import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic;
import com.gregtechceu.gtceu.api.misc.EnergyContainerList;
import com.gregtechceu.gtceu.api.misc.EnergyInfoProviderList;
import com.gregtechceu.gtceu.api.misc.LaserContainerList;
import com.gregtechceu.gtceu.api.pipenet.longdistance.ILDEndpoint;
import com.gregtechceu.gtceu.client.renderer.GTRendererProvider;
import com.gregtechceu.gtceu.common.machine.owner.IMachineOwner;
import com.gregtechceu.gtceu.common.pipelike.fluidpipe.longdistance.LDFluidEndpointMachine;
import com.gregtechceu.gtceu.common.pipelike.item.longdistance.LDItemEndpointMachine;

import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture;
import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted;
import com.lowdragmc.lowdraglib.syncdata.managed.MultiManagedStorage;

import net.minecraft.core.BlockPos;
Expand All @@ -17,6 +29,9 @@
import net.minecraft.world.level.block.state.BlockState;

import lombok.Getter;
import lombok.Setter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Set;

Expand All @@ -30,6 +45,10 @@ public class MetaMachineBlockEntity extends BlockEntity implements IMachineBlock
public final MultiManagedStorage managedStorage = new MultiManagedStorage();
@Getter
public final MetaMachine metaMachine;
@Setter
@Getter
@Persisted
private IMachineOwner owner;
private final long offset = GTValues.RNG.nextInt(20);

protected MetaMachineBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState blockState) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.gregtechceu.gtceu.api.block.IMachineBlock;
import com.gregtechceu.gtceu.api.item.tool.IToolGridHighLight;
import com.gregtechceu.gtceu.common.machine.owner.IMachineOwner;

import com.lowdragmc.lowdraglib.syncdata.blockentity.IAsyncAutoSyncBlockEntity;
import com.lowdragmc.lowdraglib.syncdata.blockentity.IAutoPersistBlockEntity;
Expand Down Expand Up @@ -81,4 +82,10 @@ default void loadCustomPersistedData(CompoundTag tag) {
IAutoPersistBlockEntity.super.loadCustomPersistedData(tag);
getMetaMachine().loadCustomPersistedData(tag);
}

default void setOwner(IMachineOwner owner) {}

default IMachineOwner getOwner() {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

import com.lowdragmc.lowdraglib.LDLib;
import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture;
import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced;
import com.lowdragmc.lowdraglib.syncdata.managed.MultiManagedStorage;

import net.minecraft.ChatFormatting;
Expand Down Expand Up @@ -37,6 +38,7 @@

import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.function.BiFunction;

/**
Expand All @@ -52,6 +54,12 @@ public class KineticMachineBlockEntity extends KineticBlockEntity implements IMa
private final long offset = GTValues.RNG.nextInt(20);
public float workingSpeed;
public boolean reActivateSource;
@DescSynced
private UUID owner;
@Getter
@DescSynced
private String ownerName;
private Class<?> ownerType;

protected KineticMachineBlockEntity(BlockEntityType<?> typeIn, BlockPos pos, BlockState state) {
super(typeIn, pos, state);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,9 @@ public int addScannerInfo(Player player, Level level, BlockPos pos, DisplayMode

// General machine information
if (mode == DisplayMode.SHOW_ALL || mode == DisplayMode.SHOW_MACHINE_INFO) {
if (machineBlockEntity.getOwner() != null) {
machineBlockEntity.getOwner().displayInfo(list);
}

if (machine.getDefinition() instanceof MultiblockMachineDefinition multi &&
multi.isAllowExtendedFacing()) {
Expand Down
Loading

0 comments on commit b830d38

Please sign in to comment.