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
YoungOnionMC and mikerooni authored Sep 29, 2024
1 parent 4d65ba5 commit c0c03b1
Show file tree
Hide file tree
Showing 22 changed files with 492 additions and 12 deletions.
6 changes: 6 additions & 0 deletions dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,12 @@ dependencies {
modImplementation(forge.javd) { transitive = false }
modRuntimeOnly("curse.maven:trenzalore-870210:4848244")

modCompileOnly(forge.ftbteams)
modCompileOnly(forge.ftblibrary)

modCompileOnly(forge.argonauts)
modCompileOnly(forge.resourceful)

// Runtime only testing mods
//modRuntimeOnly(forge.worldStripper)
}
20 changes: 18 additions & 2 deletions settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ dependencyResolutionManagement {
def auVersion = "1.20.1-0.6.0"

// Forge
def forgeVersion = "47.1.3"
def forgeVersion = "47.1.47"
def registrateForgeVersion = "MC1.20-1.3.3"
def createForgeVersion = "0.5.1.f-33"
def flywheelForgeVersion = "0.6.10-10"
Expand All @@ -44,6 +44,10 @@ dependencyResolutionManagement {
def curiosForgeVersion = "5.9.1"
def worldStripperForgeFile = "4578579"
def javdVersion = "4803995"
def ftbteamsForgeFile = "5267190"
def ftblibraryForgeFile = "5567591"
def argonautsForgeFile = "5263580"
def resourcefulForgeFile = "5659871"

// Libs
def quiltMappingsVersion = "5" // https://lambdaurora.dev/tools/import_quilt.html
Expand All @@ -58,7 +62,7 @@ dependencyResolutionManagement {
def mixinextrasVersion = "0.2.0"
def shimmerVersion = "0.2.4"
def lombokPluginVersion = "8.7.1"

forge {
version("forgeShortVersion", forgeVersion)
def minecraftForge = version("minecraftForge", "${minecraftVersion}-${forgeVersion}")
Expand Down Expand Up @@ -125,6 +129,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 @@ -2287,6 +2291,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 @@ -2287,6 +2291,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 @@ -86,6 +86,14 @@ 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);
}

@Deprecated(forRemoval = true, since = "1.0.21")
public static boolean isHighTier() {
return GTCEuAPI.isHighTier();
Expand Down
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 @@ -125,7 +125,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 @@ -4,11 +4,16 @@
import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity;
import com.gregtechceu.gtceu.api.machine.MachineDefinition;
import com.gregtechceu.gtceu.api.machine.MetaMachine;
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 @@ -19,8 +24,14 @@
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.DirectionProperty;

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 org.jetbrains.annotations.Nullable;

import java.util.Optional;

/**
* @author KilaBash
* @date 2023/3/31
Expand Down Expand Up @@ -77,4 +88,22 @@ default <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, Bloc
}
return null;
}

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.common.data.GTItems;
import com.gregtechceu.gtceu.config.ConfigHolder;
import com.gregtechceu.gtceu.utils.GTUtil;

import com.lowdragmc.lowdraglib.client.renderer.IRenderer;
Expand Down Expand Up @@ -127,6 +128,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) {
CompoundTag tag = pStack.getTag();
if (tag != null) {
Expand Down Expand Up @@ -282,6 +289,11 @@ public InteractionResult use(BlockState state, Level world, BlockPos pos, Player
ItemStack itemStack = player.getItemInHand(hand);
boolean shouldOpenUi = true;

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

Set<GTToolType> types = ToolHelper.getToolTypes(itemStack);
if (machine != null && !types.isEmpty() && ToolHelper.canUse(itemStack)) {
var result = machine.onToolClick(types, itemStack, new UseOnContext(player, hand, hit));
Expand All @@ -307,12 +319,25 @@ public InteractionResult use(BlockState state, Level world, BlockPos pos, Player
var result = interactedMachine.onUse(state, world, pos, player, hand, hit);
if (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 ? InteractionResult.PASS : InteractionResult.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 @@ -15,6 +15,7 @@
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;

Expand All @@ -25,10 +26,12 @@
import com.lowdragmc.lowdraglib.side.fluid.forge.FluidTransferHelperImpl;
import com.lowdragmc.lowdraglib.side.item.IItemTransfer;
import com.lowdragmc.lowdraglib.side.item.forge.ItemTransferHelperImpl;
import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted;
import com.lowdragmc.lowdraglib.syncdata.managed.MultiManagedStorage;

import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.entity.BlockEntity;
Expand All @@ -45,13 +48,11 @@
import appeng.api.networking.IInWorldGridNodeHost;
import appeng.capabilities.Capabilities;
import lombok.Getter;
import lombok.Setter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.*;

/**
* @author KilaBash
Expand All @@ -63,6 +64,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 Expand Up @@ -317,4 +322,20 @@ public AABB getRenderBoundingBox() {
}
return new AABB(worldPosition.offset(-1, 0, -1), worldPosition.offset(2, 2, 2));
}

@Override
protected void saveAdditional(CompoundTag tag) {
super.saveAdditional(tag);
if (owner != null) {
tag.put("owner", owner.write());
}
}

@Override
public void load(CompoundTag tag) {
super.load(tag);
if (tag.contains("owner")) {
this.owner = IMachineOwner.create(tag.getCompound("owner"));
}
}
}
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;
}
}
Loading

0 comments on commit c0c03b1

Please sign in to comment.