From 658c4231c46e611016770c838210caead7b15fe7 Mon Sep 17 00:00:00 2001
From: ReignOfFROZE
Date: Tue, 3 Jun 2025 15:36:13 -0400
Subject: [PATCH 1/2] Comments
---
.../structure/StructureUtility.java | 46 ++++++++++++-------
1 file changed, 30 insertions(+), 16 deletions(-)
diff --git a/src/main/java/com/gtnewhorizon/structurelib/structure/StructureUtility.java b/src/main/java/com/gtnewhorizon/structurelib/structure/StructureUtility.java
index 1700d0f8..1150740c 100644
--- a/src/main/java/com/gtnewhorizon/structurelib/structure/StructureUtility.java
+++ b/src/main/java/com/gtnewhorizon/structurelib/structure/StructureUtility.java
@@ -409,23 +409,31 @@ public class StructureUtility {
}
}
}
- if (mode == REMOVING || !s.takeOne(stack, false)) {
- // If we're in removing mode, or if the user didn't have the block in their inventory, and we're in some
+ if (mode == REMOVING) {
+ // We're in removing mode, so let's check some stuff
+ if (world.isAirBlock(x, y, z)) {
+ return PlaceResult.SKIP;
+ }
+ ItemStack toGive = new ItemStack(world.getBlock(x, y, z));
+ toGive.setItemDamage(world.getBlock(x, y, z).getDamageValue(world, x, y, z));
+ if (!checkPermission(world, actor, x, y, z)) {
+ return PlaceResult.REJECT;
+ }
+ world.setBlockToAir(x, y, z);
+ if (!tryGiveOrDropItem(world, actor, toGive)) {
+ // We're in removing mode and something went wrong while trying to give the player the block we removed,
+ // let's just fail for now
+ return PlaceResult.REJECT;
+ }
+ } else if (!s.takeOne(stack, false)) {
+ // If the user didn't have the block in their inventory, and we're in some
// other mode, let's check some stuff
if (world.isAirBlock(x, y, z)) {
return PlaceResult.SKIP;
}
ItemStack toGive = new ItemStack(world.getBlock(x, y, z));
toGive.setItemDamage(world.getBlock(x, y, z).getDamageValue(world, x, y, z));
- if (mode == REMOVING && !checkPermission(world, actor, x, y, z)) {
- return PlaceResult.REJECT;
- }
world.setBlockToAir(x, y, z);
- if (mode == REMOVING && !tryGiveOrDropItem(world, actor, toGive)) {
- // We're in removing mode and something went wrong while trying to give the player the block we removed,
- // let's just fail for now
- return PlaceResult.REJECT;
- }
}
return PlaceResult.ACCEPT;
}
@@ -569,22 +577,30 @@ public class StructureUtility {
return PlaceResult.REJECT;
}
}
- if (mode == REMOVING || !s.takeOne(stack, false)) {
+ if (mode == REMOVING) {
if (world.isAirBlock(x, y, z)) {
return PlaceResult.SKIP;
}
- // If the user didn't have the item in their inventory, or we're in removing mode, we set it to air
+ // If we're in removing mode, we set it to air
ItemStack toGive = new ItemStack(world.getBlock(x, y, z));
toGive.setItemDamage(world.getBlock(x, y, z).getDamageValue(world, x, y, z));
- if (mode == REMOVING && !checkPermission(world, actor, x, y, z)) {
+ if (!checkPermission(world, actor, x, y, z)) {
return PlaceResult.REJECT;
}
world.setBlockToAir(x, y, z);
- if (mode == REMOVING && !tryGiveOrDropItem(world, actor, toGive)) {
+ if (!tryGiveOrDropItem(world, actor, toGive)) {
// We were in removing mode and something went wrong while trying to give the player the block we
// ...removed, let's just fail for now
return PlaceResult.REJECT;
}
+ } else if (!s.takeOne(stack, false)) {
+ if (world.isAirBlock(x, y, z)) {
+ return PlaceResult.SKIP;
+ }
+ // If the user didn't have the item in their inventory, we set it to air
+ ItemStack toGive = new ItemStack(world.getBlock(x, y, z));
+ toGive.setItemDamage(world.getBlock(x, y, z).getDamageValue(world, x, y, z));
+ world.setBlockToAir(x, y, z);
}
return PlaceResult.ACCEPT;
}
@@ -2050,7 +2066,6 @@ public class StructureUtility {
@Deprecated
public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger,
IItemSource s, EntityPlayerMP actor, Consumer chatter) {
- ItemConstructableTrigger.TriggerMode mode = ItemConstructableTrigger.getMode(trigger);
if (predicate.test(t))
return downstream.survivalPlaceBlock(t, world, x, y, z, trigger, s, actor, chatter);
return placeResultWhenDisabled;
@@ -2059,7 +2074,6 @@ public class StructureUtility {
@Override
public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger,
AutoPlaceEnvironment env) {
- ItemConstructableTrigger.TriggerMode mode = ItemConstructableTrigger.getMode(trigger);
if (predicate.test(t)) return downstream.survivalPlaceBlock(t, world, x, y, z, trigger, env);
return placeResultWhenDisabled;
}
From 963975864c1cd033cbe052b898fd2e65b84b280d Mon Sep 17 00:00:00 2001
From: ReignOfFROZE
Date: Thu, 19 Jun 2025 14:53:34 -0400
Subject: [PATCH 2/2] Comments 2
---
dependencies.gradle | 2 -
repositories.gradle | 1 +
.../structurelib/ClientProxy.java | 5 --
.../structurelib/CommonProxy.java | 2 -
.../structurelib/IStructureCompat.java | 3 +
.../structurelib/StructureLib.java | 7 +-
.../item/ItemConstructableTrigger.java | 25 +-----
.../structurelib/item/ModeToggleableItem.java | 32 +++++++
.../structure/IStructureElement.java | 2 +-
.../structure/StructureUtility.java | 87 ++++++++-----------
.../xmod/ServerUtilitiesCompat.java | 29 -------
src/main/javadoc/overview.html | 10 +++
12 files changed, 83 insertions(+), 122 deletions(-)
create mode 100644 src/main/java/com/gtnewhorizon/structurelib/item/ModeToggleableItem.java
delete mode 100644 src/main/java/com/gtnewhorizon/structurelib/xmod/ServerUtilitiesCompat.java
diff --git a/dependencies.gradle b/dependencies.gradle
index 46f3adc8..46cfe494 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -4,8 +4,6 @@ dependencies {
api("com.github.GTNewHorizons:GTNHLib:0.6.21:dev")
implementation("com.github.GTNewHorizons:NotEnoughItems:2.7.40-GTNH:dev")
- compileOnly("com.github.GTNewHorizons:ServerUtilities:2.1.46")
-
testImplementation(platform('org.junit:junit-bom:5.9.2'))
testImplementation('org.junit.jupiter:junit-jupiter')
diff --git a/repositories.gradle b/repositories.gradle
index 45729e10..51d4deaa 100644
--- a/repositories.gradle
+++ b/repositories.gradle
@@ -1,4 +1,5 @@
// Add any additional repositiroes for your dependencies here
repositories {
+ mavenLocal()
}
diff --git a/src/main/java/com/gtnewhorizon/structurelib/ClientProxy.java b/src/main/java/com/gtnewhorizon/structurelib/ClientProxy.java
index 3fceb0fa..46ed593e 100644
--- a/src/main/java/com/gtnewhorizon/structurelib/ClientProxy.java
+++ b/src/main/java/com/gtnewhorizon/structurelib/ClientProxy.java
@@ -260,11 +260,6 @@ public class ClientProxy extends CommonProxy {
MinecraftForge.EVENT_BUS.register(new ForgeEventHandler());
}
- @Override
- public void init(FMLInitializationEvent e) {
- super.init(e);
- }
-
static void markTextureUsed(IIcon icon) {
if (StructureLib.COMPAT instanceof IStructureCompat)
((IStructureCompat) StructureLib.COMPAT).markTextureUsed(icon);
diff --git a/src/main/java/com/gtnewhorizon/structurelib/CommonProxy.java b/src/main/java/com/gtnewhorizon/structurelib/CommonProxy.java
index f8d3bbea..5c00df7a 100644
--- a/src/main/java/com/gtnewhorizon/structurelib/CommonProxy.java
+++ b/src/main/java/com/gtnewhorizon/structurelib/CommonProxy.java
@@ -67,8 +67,6 @@ public class CommonProxy {
public void preInit(FMLPreInitializationEvent e) {}
- public void init(FMLInitializationEvent e) {}
-
public long getOverworldTime() {
return MinecraftServer.getServer().getEntityWorld().getTotalWorldTime();
}
diff --git a/src/main/java/com/gtnewhorizon/structurelib/IStructureCompat.java b/src/main/java/com/gtnewhorizon/structurelib/IStructureCompat.java
index c1cb744d..f9828930 100644
--- a/src/main/java/com/gtnewhorizon/structurelib/IStructureCompat.java
+++ b/src/main/java/com/gtnewhorizon/structurelib/IStructureCompat.java
@@ -1,8 +1,11 @@
package com.gtnewhorizon.structurelib;
+import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
public interface IStructureCompat {
void markTextureUsed(IIcon o);
+ boolean checkServerUtilitiesPermission(World world, EntityPlayer actor, int x, int z);
}
diff --git a/src/main/java/com/gtnewhorizon/structurelib/StructureLib.java b/src/main/java/com/gtnewhorizon/structurelib/StructureLib.java
index 4a491d86..7be5180d 100644
--- a/src/main/java/com/gtnewhorizon/structurelib/StructureLib.java
+++ b/src/main/java/com/gtnewhorizon/structurelib/StructureLib.java
@@ -93,7 +93,7 @@ public class StructureLib {
@Mod.Instance
static StructureLib INSTANCE;
@Mod.Instance(STRUCTURECOMPAT_MODID)
- static Object COMPAT;
+ public static Object COMPAT;
static Block blockHint;
static Item itemBlockHint;
@@ -129,11 +129,6 @@ public class StructureLib {
DevelopHelper.onPreInit();
}
- @Mod.EventHandler
- public void init(FMLInitializationEvent e) {
- proxy.init(e);
- }
-
@Mod.EventHandler
public void loadComplete(FMLLoadCompleteEvent e) {
proxy.loadComplete(e);
diff --git a/src/main/java/com/gtnewhorizon/structurelib/item/ItemConstructableTrigger.java b/src/main/java/com/gtnewhorizon/structurelib/item/ItemConstructableTrigger.java
index 801cfbb5..a088576e 100644
--- a/src/main/java/com/gtnewhorizon/structurelib/item/ItemConstructableTrigger.java
+++ b/src/main/java/com/gtnewhorizon/structurelib/item/ItemConstructableTrigger.java
@@ -23,29 +23,15 @@ import com.gtnewhorizon.structurelib.StructureLib;
import com.gtnewhorizon.structurelib.alignment.constructable.ChannelDataAccessor;
import com.gtnewhorizon.structurelib.alignment.constructable.ConstructableUtility;
-public class ItemConstructableTrigger extends Item {
-
- private static final String TAG_MODE = "mode";
+public class ItemConstructableTrigger extends ModeToggleableItem {
private static final IIcon[] textures = new IIcon[3];
- public enum TriggerMode {
- BUILDING,
- UPDATING,
- REMOVING
- }
-
public ItemConstructableTrigger() {
setUnlocalizedName("structurelib.constructableTrigger");
setCreativeTab(StructureLib.creativeTab);
}
- public static void cycleMode(ItemStack held) {
- if (held.getTagCompound() == null) held.setTagCompound(new NBTTagCompound());
- if (!held.getTagCompound().hasKey(TAG_MODE)) held.getTagCompound().setTag(TAG_MODE, new NBTTagInt(0));
- held.getTagCompound().setInteger(TAG_MODE, (held.getTagCompound().getInteger(TAG_MODE) + 1) % 3);
- }
-
@Override
public void registerIcons(IIconRegister register) {
textures[0] = register.registerIcon(MOD_ID + ":constructableTrigger/BUILDING");
@@ -89,15 +75,6 @@ public class ItemConstructableTrigger extends Item {
+ StatCollector.translateToLocal("item.structurelib.constructableTrigger.modes." + mode);
}
- public static TriggerMode getMode(ItemStack held) {
- if (held == null || !held.hasTagCompound() || !held.getTagCompound().hasKey(TAG_MODE)) {
- // default behavior
- return TriggerMode.BUILDING;
- }
- // get user-defined mode
- return TriggerMode.values()[held.getTagCompound().getInteger(TAG_MODE)];
- }
-
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if (!world.isRemote && getMovingObjectPositionFromPlayer(world, player, true) == null) {
diff --git a/src/main/java/com/gtnewhorizon/structurelib/item/ModeToggleableItem.java b/src/main/java/com/gtnewhorizon/structurelib/item/ModeToggleableItem.java
new file mode 100644
index 00000000..b62fcc58
--- /dev/null
+++ b/src/main/java/com/gtnewhorizon/structurelib/item/ModeToggleableItem.java
@@ -0,0 +1,32 @@
+package com.gtnewhorizon.structurelib.item;
+
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagInt;
+
+public class ModeToggleableItem extends Item {
+
+ public enum TriggerMode {
+ BUILDING,
+ UPDATING,
+ REMOVING
+ }
+
+ public static TriggerMode getMode(ItemStack held) {
+ if (held == null || !held.hasTagCompound() || !held.getTagCompound().hasKey(TAG_MODE)) {
+ // default behavior
+ return TriggerMode.BUILDING;
+ }
+ // get user-defined mode
+ return TriggerMode.values()[held.getTagCompound().getInteger(TAG_MODE)];
+ }
+
+ public static void cycleMode(ItemStack held) {
+ if (held.getTagCompound() == null) held.setTagCompound(new NBTTagCompound());
+ if (!held.getTagCompound().hasKey(TAG_MODE)) held.getTagCompound().setTag(TAG_MODE, new NBTTagInt(0));
+ held.getTagCompound().setInteger(TAG_MODE, (held.getTagCompound().getInteger(TAG_MODE) + 1) % 3);
+ }
+
+ protected static final String TAG_MODE = "mode";
+}
diff --git a/src/main/java/com/gtnewhorizon/structurelib/structure/IStructureElement.java b/src/main/java/com/gtnewhorizon/structurelib/structure/IStructureElement.java
index c307eaa0..2fc547a7 100644
--- a/src/main/java/com/gtnewhorizon/structurelib/structure/IStructureElement.java
+++ b/src/main/java/com/gtnewhorizon/structurelib/structure/IStructureElement.java
@@ -2,7 +2,7 @@ package com.gtnewhorizon.structurelib.structure;
import static com.gtnewhorizon.structurelib.StructureLib.LOGGER;
import static com.gtnewhorizon.structurelib.StructureLib.PANIC_MODE;
-import static com.gtnewhorizon.structurelib.item.ItemConstructableTrigger.TriggerMode.REMOVING;
+import static com.gtnewhorizon.structurelib.item.ModeToggleableItem.TriggerMode.REMOVING;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.checkForRemoving;
import java.util.Arrays;
diff --git a/src/main/java/com/gtnewhorizon/structurelib/structure/StructureUtility.java b/src/main/java/com/gtnewhorizon/structurelib/structure/StructureUtility.java
index 1150740c..b27726e1 100644
--- a/src/main/java/com/gtnewhorizon/structurelib/structure/StructureUtility.java
+++ b/src/main/java/com/gtnewhorizon/structurelib/structure/StructureUtility.java
@@ -1,35 +1,21 @@
package com.gtnewhorizon.structurelib.structure;
-import static com.gtnewhorizon.structurelib.StructureLib.LOGGER;
-import static com.gtnewhorizon.structurelib.StructureLib.PANIC_MODE;
-import static com.gtnewhorizon.structurelib.item.ItemConstructableTrigger.TriggerMode.BUILDING;
-import static com.gtnewhorizon.structurelib.item.ItemConstructableTrigger.TriggerMode.REMOVING;
-import static com.gtnewhorizon.structurelib.item.ItemConstructableTrigger.TriggerMode.UPDATING;
-import static java.lang.Integer.MIN_VALUE;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.function.BiConsumer;
-import java.util.function.BiFunction;
-import java.util.function.BiPredicate;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.function.Predicate;
-import java.util.function.Supplier;
-
-import javax.annotation.Nullable;
-
+import com.google.common.collect.ImmutableList;
+import com.gtnewhorizon.structurelib.IStructureCompat;
+import com.gtnewhorizon.structurelib.StructureEvent.StructureElementVisitedEvent;
+import com.gtnewhorizon.structurelib.StructureLib;
+import com.gtnewhorizon.structurelib.StructureLibAPI;
+import com.gtnewhorizon.structurelib.alignment.constructable.ChannelDataAccessor;
+import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing;
+import com.gtnewhorizon.structurelib.item.ItemConstructableTrigger;
+import com.gtnewhorizon.structurelib.structure.IStructureElement.PlaceResult;
+import com.gtnewhorizon.structurelib.structure.adders.IBlockAdder;
+import com.gtnewhorizon.structurelib.structure.adders.ITileAdder;
+import com.gtnewhorizon.structurelib.util.ItemStackPredicate;
+import com.gtnewhorizon.structurelib.util.ItemStackPredicate.NBTMode;
+import com.gtnewhorizon.structurelib.util.Vec3Impl;
+import cpw.mods.fml.common.Loader;
+import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
@@ -45,27 +31,18 @@ import net.minecraft.util.IChatComponent;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
-
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
-import com.google.common.collect.ImmutableList;
-import com.gtnewhorizon.structurelib.StructureEvent.StructureElementVisitedEvent;
-import com.gtnewhorizon.structurelib.StructureLib;
-import com.gtnewhorizon.structurelib.StructureLibAPI;
-import com.gtnewhorizon.structurelib.alignment.constructable.ChannelDataAccessor;
-import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing;
-import com.gtnewhorizon.structurelib.item.ItemConstructableTrigger;
-import com.gtnewhorizon.structurelib.structure.IStructureElement.PlaceResult;
-import com.gtnewhorizon.structurelib.structure.adders.IBlockAdder;
-import com.gtnewhorizon.structurelib.structure.adders.ITileAdder;
-import com.gtnewhorizon.structurelib.util.ItemStackPredicate;
-import com.gtnewhorizon.structurelib.util.ItemStackPredicate.NBTMode;
-import com.gtnewhorizon.structurelib.util.Vec3Impl;
-import com.gtnewhorizon.structurelib.xmod.ServerUtilitiesCompat;
+import javax.annotation.Nullable;
+import java.util.*;
+import java.util.Map.Entry;
+import java.util.function.*;
-import cpw.mods.fml.common.Loader;
-import cpw.mods.fml.common.registry.GameRegistry;
+import static com.gtnewhorizon.structurelib.StructureLib.LOGGER;
+import static com.gtnewhorizon.structurelib.StructureLib.PANIC_MODE;
+import static com.gtnewhorizon.structurelib.item.ModeToggleableItem.TriggerMode.*;
+import static java.lang.Integer.MIN_VALUE;
/**
* A brief index of everything contained
@@ -924,10 +901,14 @@ public class StructureUtility {
Block block = world.getBlock(x, y, z);
int meta = world.getBlockMetadata(x, y, z);
TIER tier = tierExtractor.convert(block, meta);
- if (mode != REMOVING && (Objects.equals(tier, tierExtractor.convert(hint.getKey(), hint.getValue()))))
- return PlaceResult.SKIP;
- if (mode == REMOVING && (!isInAllKnownTiers(block) && !world.isAirBlock(x, y, z))) {
- return PlaceResult.REJECT;
+ if (mode == REMOVING) {
+ if (!isInAllKnownTiers(block) && !world.isAirBlock(x, y, z)) {
+ return PlaceResult.REJECT;
+ }
+ } else {
+ if ((Objects.equals(tier, tierExtractor.convert(hint.getKey(), hint.getValue())))) {
+ return PlaceResult.SKIP;
+ }
}
return StructureUtility.survivalPlaceBlock(
hint.getKey(),
@@ -3480,8 +3461,8 @@ public class StructureUtility {
public static boolean checkPermission(World world, EntityPlayer actor, int x, int y, int z) {
boolean res = true;
- if (isSULoaded) {
- res = ServerUtilitiesCompat.checkPermission(world, actor, x, z);
+ if (isSULoaded && StructureLib.COMPAT instanceof IStructureCompat isc) {
+ res = isc.checkServerUtilitiesPermission(world, actor, x, z);
}
res = res && !world.getBlock(x, y, z).isAssociatedBlock(Blocks.bedrock);
// maybe check mining level who knows :shrug:
diff --git a/src/main/java/com/gtnewhorizon/structurelib/xmod/ServerUtilitiesCompat.java b/src/main/java/com/gtnewhorizon/structurelib/xmod/ServerUtilitiesCompat.java
deleted file mode 100644
index 4dace253..00000000
--- a/src/main/java/com/gtnewhorizon/structurelib/xmod/ServerUtilitiesCompat.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.gtnewhorizon.structurelib.xmod;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.world.World;
-
-import cpw.mods.fml.common.Optional;
-import serverutils.data.ClaimedChunks;
-import serverutils.lib.data.ForgePlayer;
-import serverutils.lib.data.ForgeTeam;
-import serverutils.lib.data.Universe;
-import serverutils.lib.math.ChunkDimPos;
-
-public class ServerUtilitiesCompat {
-
- @Optional.Method(modid = "serverutilities")
- public static boolean checkPermission(World world, EntityPlayer actor, int x, int z) {
- final ForgeTeam owningTeam = ClaimedChunks.instance
- .getChunkTeam(new ChunkDimPos(x >> 4, z >> 4, world.provider.dimensionId));
- if (owningTeam == null) {
- return true;
- }
- final ForgePlayer currentPlayer = new ForgePlayer(
- Universe.get(),
- actor.getUniqueID(),
- actor.getCommandSenderName());
- return owningTeam.isAlly(currentPlayer) || owningTeam.isMember(currentPlayer);
- }
-
-}
diff --git a/src/main/javadoc/overview.html b/src/main/javadoc/overview.html
index deb993f2..7bc6baf7 100644
--- a/src/main/javadoc/overview.html
+++ b/src/main/javadoc/overview.html
@@ -133,6 +133,16 @@ StructureLib API documentation.
Usually there is no reason to reimplement this on your own.
+{@link com.gtnewhorizon.structurelib.item.ModeToggleableItem}
+
+ This class is the base class for {@link com.gtnewhorizon.structurelib.item.ItemConstructableTrigger} that defines
+ the TriggerModes for the {@link com.gtnewhorizon.structurelib.item.ItemConstructableTrigger}. There are
+ 3 modes, BUILDING, UPDATING, and REMOVING. Each of these modes does as they
+ say, where building will build a new multi from scratch, updating will remove existing an existing structure and
+ replace it with new components (think upgrading glass on a multi, changing from a tier 1 to tier 2 of a multi, etc),
+ and removing will just straight up remove the multi.
+
+