From 854e4cb3cec114468262a894765f4efa23e1e4d1 Mon Sep 17 00:00:00 2001 From: Milos <> Date: Wed, 22 Jan 2025 16:29:16 +0100 Subject: [PATCH 1/3] Add Dislocator Inhibitor --- .../draconicevolution/common/CommonProxy.java | 4 + .../draconicevolution/common/ModBlocks.java | 3 + .../blocks/machine/DislocatorInhibitor.java | 84 +++++++++++++ .../common/items/tools/Magnet.java | 4 +- .../draconicevolution/common/lib/Strings.java | 1 + .../tileentities/TileDislocatorInhibitor.java | 116 ++++++++++++++++++ .../assets/draconicevolution/lang/en_US.lang | 1 + .../textures/blocks/inhibitor_block.png | Bin 0 -> 877 bytes 8 files changed, 212 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/brandon3055/draconicevolution/common/blocks/machine/DislocatorInhibitor.java create mode 100644 src/main/java/com/brandon3055/draconicevolution/common/tileentities/TileDislocatorInhibitor.java create mode 100644 src/main/resources/assets/draconicevolution/textures/blocks/inhibitor_block.png diff --git a/src/main/java/com/brandon3055/draconicevolution/common/CommonProxy.java b/src/main/java/com/brandon3055/draconicevolution/common/CommonProxy.java index 4c22ac1ae..3d1ffd2a2 100644 --- a/src/main/java/com/brandon3055/draconicevolution/common/CommonProxy.java +++ b/src/main/java/com/brandon3055/draconicevolution/common/CommonProxy.java @@ -56,6 +56,7 @@ import com.brandon3055.draconicevolution.common.tileentities.TileChaosShard; import com.brandon3055.draconicevolution.common.tileentities.TileContainerTemplate; import com.brandon3055.draconicevolution.common.tileentities.TileCustomSpawner; +import com.brandon3055.draconicevolution.common.tileentities.TileDislocatorInhibitor; import com.brandon3055.draconicevolution.common.tileentities.TileDissEnchanter; import com.brandon3055.draconicevolution.common.tileentities.TileDraconiumChest; import com.brandon3055.draconicevolution.common.tileentities.TileEnergyInfuser; @@ -262,6 +263,9 @@ public void registerTileEntities() { GameRegistry.registerTileEntity(TileChaosShard.class, References.RESOURCESPREFIX + "TileChaosShard"); GameRegistry .registerTileEntity(TileUpgradeModifier.class, References.RESOURCESPREFIX + "TileEnhancementModifier"); + GameRegistry.registerTileEntity( + TileDislocatorInhibitor.class, + References.RESOURCESPREFIX + "TileDislocatorInhibitor"); if (DraconicEvolution.debug) { GameRegistry.registerTileEntity(TileTestBlock.class, References.RESOURCESPREFIX + "TileTestBlock"); GameRegistry.registerTileEntity( diff --git a/src/main/java/com/brandon3055/draconicevolution/common/ModBlocks.java b/src/main/java/com/brandon3055/draconicevolution/common/ModBlocks.java index 71b218c08..10736cdd7 100644 --- a/src/main/java/com/brandon3055/draconicevolution/common/ModBlocks.java +++ b/src/main/java/com/brandon3055/draconicevolution/common/ModBlocks.java @@ -24,6 +24,7 @@ import com.brandon3055.draconicevolution.common.blocks.TeleporterStand; import com.brandon3055.draconicevolution.common.blocks.TestBlock; import com.brandon3055.draconicevolution.common.blocks.XRayBlock; +import com.brandon3055.draconicevolution.common.blocks.machine.DislocatorInhibitor; import com.brandon3055.draconicevolution.common.blocks.machine.DissEnchanter; import com.brandon3055.draconicevolution.common.blocks.machine.EnergyCrystal; import com.brandon3055.draconicevolution.common.blocks.machine.EnergyInfuser; @@ -90,6 +91,7 @@ public class ModBlocks { public static BlockDE reactorEnergyInjector; public static BlockDE chaosCrystal; public static BlockDE upgradeModifier; + public static BlockDE dislocatorInhibitor; public static Block safetyFlame; public static Block chaosShardAtmos = new ChaosShardAtmos() .setBlockName(References.RESOURCESPREFIX + "chaosShardAtmos") @@ -133,6 +135,7 @@ public static void init() { reactorEnergyInjector = new ReactorEnergyInjector(); chaosCrystal = new ChaosCrystal(); upgradeModifier = new UpgradeModifier(); + dislocatorInhibitor = new DislocatorInhibitor(); longRangeDislocator = new LongRangeDislocator(); diff --git a/src/main/java/com/brandon3055/draconicevolution/common/blocks/machine/DislocatorInhibitor.java b/src/main/java/com/brandon3055/draconicevolution/common/blocks/machine/DislocatorInhibitor.java new file mode 100644 index 000000000..726331198 --- /dev/null +++ b/src/main/java/com/brandon3055/draconicevolution/common/blocks/machine/DislocatorInhibitor.java @@ -0,0 +1,84 @@ +package com.brandon3055.draconicevolution.common.blocks.machine; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.brandon3055.draconicevolution.DraconicEvolution; +import com.brandon3055.draconicevolution.common.ModBlocks; +import com.brandon3055.draconicevolution.common.blocks.BlockDE; +import com.brandon3055.draconicevolution.common.lib.References; +import com.brandon3055.draconicevolution.common.lib.Strings; +import com.brandon3055.draconicevolution.common.tileentities.TileDislocatorInhibitor; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class DislocatorInhibitor extends BlockDE implements ITileEntityProvider { + + public DislocatorInhibitor() { + this.setBlockName(Strings.dislocatorInhibitor); + this.setCreativeTab(DraconicEvolution.tabBlocksItems); + this.setStepSound(soundTypeStone); + ModBlocks.register(this); + } + + @Override + public boolean isBlockSolid(IBlockAccess world, int x, int y, int z, int side) { + return true; + } + + @Override + public boolean isSideSolid(IBlockAccess world, int x, int y, int z, ForgeDirection side) { + return true; + } + + @Override + public boolean hasTileEntity(int metadata) { + return true; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) { + return new TileDislocatorInhibitor(); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float prx, + float pry, float prz) { + TileEntity tile = world.getTileEntity(x, y, z); + if (tile != null) { + if (tile instanceof TileDislocatorInhibitor te) { + if (!player.isSneaking()) te.increaseRange(); + else te.decreaseRange(); + + if (world.isRemote) player.addChatMessage(new ChatComponentText("Range: " + te.getRange())); + } + } + return true; + } + + @Override + public void breakBlock(World worldIn, int x, int y, int z, Block blockBroken, int meta) { + TileEntity tile = worldIn.getTileEntity(x, y, z); + if (tile != null) { + if (tile instanceof TileDislocatorInhibitor) { + ((TileDislocatorInhibitor) tile).unregister(); + } + } + + super.breakBlock(worldIn, x, y, z, blockBroken, meta); + } + + @SideOnly(Side.CLIENT) + @Override + public void registerBlockIcons(IIconRegister iconRegister) { + blockIcon = iconRegister.registerIcon(References.RESOURCESPREFIX + "inhibitor_block"); + } +} diff --git a/src/main/java/com/brandon3055/draconicevolution/common/items/tools/Magnet.java b/src/main/java/com/brandon3055/draconicevolution/common/items/tools/Magnet.java index ded71912c..f6bfca869 100644 --- a/src/main/java/com/brandon3055/draconicevolution/common/items/tools/Magnet.java +++ b/src/main/java/com/brandon3055/draconicevolution/common/items/tools/Magnet.java @@ -27,6 +27,7 @@ import com.brandon3055.draconicevolution.common.handler.ConfigHandler; import com.brandon3055.draconicevolution.common.items.ItemDE; import com.brandon3055.draconicevolution.common.lib.References; +import com.brandon3055.draconicevolution.common.tileentities.TileDislocatorInhibitor; import com.brandon3055.draconicevolution.common.utills.IConfigurableItem; import com.brandon3055.draconicevolution.common.utills.ItemConfigField; import com.brandon3055.draconicevolution.integration.ModHelper; @@ -113,7 +114,8 @@ public void onUpdate(ItemStack stack, World world, Entity entity, int slot, bool boolean playSound = false; for (EntityItem item : items) { - if (item.getEntityItem() == null || ModHelper.isAE2EntityFloatingItem(item)) { + if (item.getEntityItem() == null || ModHelper.isAE2EntityFloatingItem(item) + || TileDislocatorInhibitor.isInInhibitorRange(world, item.posX, item.posY, item.posZ)) { continue; } diff --git a/src/main/java/com/brandon3055/draconicevolution/common/lib/Strings.java b/src/main/java/com/brandon3055/draconicevolution/common/lib/Strings.java index fe4ef7cd3..541885080 100644 --- a/src/main/java/com/brandon3055/draconicevolution/common/lib/Strings.java +++ b/src/main/java/com/brandon3055/draconicevolution/common/lib/Strings.java @@ -72,4 +72,5 @@ public class Strings { // public static Block name public static final String draconiumFluxCapacitorName = "draconiumFluxCapacitor"; public static final String energyCrystalName = "energyCrystal"; public static final String wrenchName = "wrench"; + public static final String dislocatorInhibitor = "dislocatorInhibitor"; } diff --git a/src/main/java/com/brandon3055/draconicevolution/common/tileentities/TileDislocatorInhibitor.java b/src/main/java/com/brandon3055/draconicevolution/common/tileentities/TileDislocatorInhibitor.java new file mode 100644 index 000000000..fa32a4a17 --- /dev/null +++ b/src/main/java/com/brandon3055/draconicevolution/common/tileentities/TileDislocatorInhibitor.java @@ -0,0 +1,116 @@ +package com.brandon3055.draconicevolution.common.tileentities; + +import java.util.HashMap; +import java.util.HashSet; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; + +public class TileDislocatorInhibitor extends TileEntity { + + public static final int MAXIMUM_RANGE = 16; + public static final int MINIMUM_RANGE = 1; + public static final HashMap> inhibitors = new HashMap<>(); + + private boolean registered = false; + private int range = 5; + + public static boolean isInInhibitorRange(World world, double x, double y, double z) { + HashSet list = inhibitors.get(world); + if (list == null) { + return false; + } + for (TileDislocatorInhibitor inhibitor : list) { + if (inhibitor.isInRange(x, y, z)) { + return true; + } + } + return false; + } + + @Override + public void updateEntity() { + if (!registered) { + HashSet map = inhibitors.computeIfAbsent(this.worldObj, k -> new HashSet<>()); + map.add(this); + registered = true; + } + } + + public void unregister() { + if (inhibitors.containsKey(this.worldObj)) { + HashSet list = inhibitors.get(this.worldObj); + list.remove(this); + if (list.isEmpty()) { + inhibitors.remove(this.worldObj); + } + } + } + + public int getRange() { + return range; + } + + public void setRange(int value) { + if (value > MAXIMUM_RANGE) { + value = MINIMUM_RANGE; + } + if (value < MINIMUM_RANGE) { + value = MAXIMUM_RANGE; + } + this.range = value; + } + + public void increaseRange() { + if (range < MAXIMUM_RANGE) { + range++; + } + } + + public void decreaseRange() { + if (range > MINIMUM_RANGE) { + range--; + } + } + + public boolean isInRange(double x, double y, double z) { + AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox( + this.xCoord + 0.5, + this.yCoord + 0.5, + this.zCoord + 0.5, + this.xCoord + 0.5, + this.yCoord + 0.5, + this.zCoord + 0.5).expand(range + 0.5, range + 0.5, range + 0.5); + return x >= aabb.minX && x <= aabb.maxX && y >= aabb.minY && y <= aabb.maxY && z >= aabb.minZ && z <= aabb.maxZ; + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound tagCompound = new NBTTagCompound(); + this.writeToNBT(tagCompound); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, tagCompound); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + readFromNBT(pkt.func_148857_g()); + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + @Override + public void writeToNBT(NBTTagCompound compound) { + compound.setInteger("Range", range); + super.writeToNBT(compound); + } + + @Override + public void readFromNBT(NBTTagCompound compound) { + range = compound.getInteger("Range"); + super.readFromNBT(compound); + } +} diff --git a/src/main/resources/assets/draconicevolution/lang/en_US.lang b/src/main/resources/assets/draconicevolution/lang/en_US.lang index aed10e4e8..8e1d1b40e 100644 --- a/src/main/resources/assets/draconicevolution/lang/en_US.lang +++ b/src/main/resources/assets/draconicevolution/lang/en_US.lang @@ -50,6 +50,7 @@ tile.draconicevolution:energyCrystal2.name=Energy Transceiver tile.draconicevolution:energyCrystal3.name=Advanced Energy Transceiver tile.draconicevolution:energyCrystal4.name=Wireless Energy Transceiver tile.draconicevolution:energyCrystal5.name=Advanced Wireless Transceiver +tile.draconicevolution:dislocatorInhibitor.name=Dislocator Inhibitor //Item Information ---------------------------------------------------------------------------------------------------------------------------------------- diff --git a/src/main/resources/assets/draconicevolution/textures/blocks/inhibitor_block.png b/src/main/resources/assets/draconicevolution/textures/blocks/inhibitor_block.png new file mode 100644 index 0000000000000000000000000000000000000000..8f210f1c14bde0dc8adfb634c5d85d484c2c3023 GIT binary patch literal 877 zcmV-z1CsoSP)#2T$<7*O^Xl( zM4?gzNKmN^q6=0<;%^{+06&5vb}Syg@2Xv##nsh&zVn{<9L3_$c+KNyL~~=YJ26>R zEDjeVPMuS(act&SIX-5^Y;%ZzHcaCxX4TG#F;&2dGAafgK0lFskzlMqv{Yqgu|PbV z;c3CaA4vu8=y8JKFoCzDL~?oFN)(M5`H*5(9mY_i)-aGf*QSt9^LtU{pOOOA6Z~{C zgw13llt_~AY>{lPayn5qR4NvmliAoZ@k)(ktxl%B#=Wz%Jj*CND<0$NOoFf7`y6N+ zI7jT9U9J$Xw}_S-F9;k&vU$?2RRfuob=F!fewnuOL!iVR_lMlpKj5KHl57ekR!&Fb z#-j#-G~`qyOQ&Ao=gJg=^%AjagH*9i)pvn`>xg~*hy#6Jklf%+E67tgRV%-SUgpnG zjL)?Jcl9AdzaXhxCLyj8%~WVlZgEq;$^-9!C;p2p=(9#H6d9nvnFPA-W6zf3@x&EA z_4GN^ue0yFLu#=mJUNHgHqA}g00*;beAogH)@7-JvtE7kKQyDo6%= z5%lN#B;|NB`GNOczV+_%WuQyD*&|XYW0nL`#!{^*(zQZy>%1UZ!!A_q*>gOZd`}p5fkzX& zJo0UGFW9BA+@Z2_iD0~B^g|HXjSm^&;yXP`-5tu?7tuw*I^zpm(~9)%DGsLFtT(nv zi=@i5ChAS3dc`EVAd4YMvTIu`*1Hro&NE+FAu#(U-l;iG&dn2?ixSP1czq$wnMCS& znFN8Xq`bta=3&(3HRAaKvS-b+f?##N@o)g$Y&J00000NkvXXu0mjf DfxV;s literal 0 HcmV?d00001 From 10e6ebbe51e94ee686125737395e7103ae7e81ae Mon Sep 17 00:00:00 2001 From: Milos <> Date: Wed, 22 Jan 2025 19:20:44 +0100 Subject: [PATCH 2/3] Add recipe --- .../common/handler/CraftingHandler.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/com/brandon3055/draconicevolution/common/handler/CraftingHandler.java b/src/main/java/com/brandon3055/draconicevolution/common/handler/CraftingHandler.java index 238e945d4..c1163cf8b 100644 --- a/src/main/java/com/brandon3055/draconicevolution/common/handler/CraftingHandler.java +++ b/src/main/java/com/brandon3055/draconicevolution/common/handler/CraftingHandler.java @@ -609,6 +609,17 @@ public static void init() { "ingotDraconium", 'C', ModItems.draconicCore); + addOre( + ModBlocks.dislocatorInhibitor, + "IBI", + "BDB", + "IBI", + 'I', + "ingotIron", + 'B', + Blocks.iron_bars, + 'D', + new ItemStack(ModItems.magnet, 1, 0)); // machines adv ItemStack mobSoul = new ItemStack(ModItems.mobSoul); From d7d67ceb047b9d9d3c647182404e79ea676efe5b Mon Sep 17 00:00:00 2001 From: Milos <> Date: Wed, 22 Jan 2025 22:28:35 +0100 Subject: [PATCH 3/3] Change aabb to math --- .../tileentities/TileDislocatorInhibitor.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/brandon3055/draconicevolution/common/tileentities/TileDislocatorInhibitor.java b/src/main/java/com/brandon3055/draconicevolution/common/tileentities/TileDislocatorInhibitor.java index fa32a4a17..ebf965baa 100644 --- a/src/main/java/com/brandon3055/draconicevolution/common/tileentities/TileDislocatorInhibitor.java +++ b/src/main/java/com/brandon3055/draconicevolution/common/tileentities/TileDislocatorInhibitor.java @@ -8,7 +8,6 @@ import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; public class TileDislocatorInhibitor extends TileEntity { @@ -79,14 +78,11 @@ public void decreaseRange() { } public boolean isInRange(double x, double y, double z) { - AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox( - this.xCoord + 0.5, - this.yCoord + 0.5, - this.zCoord + 0.5, - this.xCoord + 0.5, - this.yCoord + 0.5, - this.zCoord + 0.5).expand(range + 0.5, range + 0.5, range + 0.5); - return x >= aabb.minX && x <= aabb.maxX && y >= aabb.minY && y <= aabb.maxY && z >= aabb.minZ && z <= aabb.maxZ; + return x >= this.xCoord - range && x <= this.xCoord + range + 1 + && y >= this.yCoord - range + && y <= this.yCoord + range + 1 + && z >= this.zCoord - range + && z <= this.zCoord + range + 1; } @Override