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.
+
+ 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.
+