From 1a9fc72a93a1da889f314898803b5430d34bb102 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Mon, 30 Jun 2025 15:32:25 -0400 Subject: [PATCH] copy tool support and working directional offsets --- .../hbm/blocks/generic/BlockWandSpawner.java | 11 +++++- .../hbm/blocks/generic/DungeonSpawner.java | 4 +++ .../world/gen/util/DungeonSpawnerActions.java | 33 +++++++++++++++++- .../hbm/textures/blocks/wand_spawner_top.png | Bin 740 -> 743 bytes 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java index fdfca7689..0508002d7 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java @@ -33,6 +33,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.List; @@ -78,9 +79,16 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT if (i == 2) world.setBlockMetadataWithNotify(x, y, z, 0, 2); if (i == 3) world.setBlockMetadataWithNotify(x, y, z, 1, 2); + ForgeDirection dir = ForgeDirection.UNKNOWN; + switch(i){ + case 0: dir = ForgeDirection.SOUTH;break; + case 1: dir = ForgeDirection.WEST; break; + case 2: dir = ForgeDirection.NORTH;break; + case 3: dir = ForgeDirection.EAST; break; + } TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityWandSpawner) - ((TileEntityWandSpawner)te).placedRotation = i; + ((TileEntityWandSpawner)te).placedRotation = dir.ordinal(); } @Override @@ -193,6 +201,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT DungeonSpawner.TileEntityDungeonSpawner spawner = (DungeonSpawner.TileEntityDungeonSpawner) te; spawner.actionID = actionID; spawner.conditionID = conditionID; + spawner.direction = ForgeDirection.getOrientation(placedRotation); } } diff --git a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java index ffbb14239..41fa907b5 100644 --- a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java @@ -20,6 +20,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class DungeonSpawner extends BlockContainer { @@ -44,6 +45,7 @@ public class DungeonSpawner extends BlockContainer { public Function condition; public Consumer action; + public ForgeDirection direction = ForgeDirection.UNKNOWN; @Override public void updateEntity() { @@ -74,6 +76,7 @@ public class DungeonSpawner extends BlockContainer { nbt.setInteger("phase", phase); nbt.setString("conditionID", conditionID); nbt.setString("actionID", actionID); + nbt.setInteger("direction", direction.ordinal()); } @Override @@ -81,6 +84,7 @@ public class DungeonSpawner extends BlockContainer { super.readFromNBT(nbt); this.phase = nbt.getInteger("phase"); this.conditionID = nbt.getString("conditionID"); + this.direction = ForgeDirection.getOrientation(nbt.getInteger("direction")); } } diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java index 120ea00e8..1e32d9dc7 100644 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java @@ -5,6 +5,7 @@ import com.hbm.blocks.generic.BlockPedestal; import com.hbm.blocks.generic.BlockSkeletonHolder; import com.hbm.blocks.generic.DungeonSpawner; import com.hbm.entity.item.EntityFallingBlockNT; +import com.hbm.entity.missile.EntityMissileTier2; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ItemEnums; import com.hbm.items.ModItems; @@ -12,6 +13,7 @@ import com.hbm.main.ModEventHandler; import com.hbm.tileentity.machine.storage.TileEntityCrateBase; import com.hbm.util.MobUtil; import com.hbm.util.Vec3NT; +import com.hbm.world.WorldUtil; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.monster.EntityZombie; import net.minecraft.entity.player.EntityPlayer; @@ -21,7 +23,10 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.HashMap; @@ -140,7 +145,7 @@ public class DungeonSpawnerActions { if(tile.phase == 2){ world.setBlock(x,y,z, ModBlocks.crate_steel); - EntityLightningBolt blitz = new EntityLightningBolt(world, x, world.getHeightValue(x, z) + 1, z); + EntityLightningBolt blitz = new EntityLightningBolt(world, x, world.getHeightValue(x, z) + 2, z); world.spawnEntityInWorld(blitz); TileEntityCrateBase crate = (TileEntityCrateBase) world.getTileEntity(x,y,z); @@ -148,6 +153,31 @@ public class DungeonSpawnerActions { } }; + public static Consumer MISSILE_STRIKE = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase != 1) return; + + world.getClosestPlayer(x,y,z, 25).addChatMessage(new ChatComponentText(EnumChatFormatting.LIGHT_PURPLE + "[COMMAND UNIT]"+ EnumChatFormatting.RESET + " Missile Fired")); + + ForgeDirection parallel = tile.direction.getRotation(ForgeDirection.UP); + + EntityMissileTier2.EntityMissileStrong missile = + new EntityMissileTier2.EntityMissileStrong( + world, + x + tile.direction.offsetX * 300, + 200, + z + tile.direction.offsetZ * 300, + x + parallel.offsetX * 30 + tile.direction.offsetX * 30, + z + parallel.offsetZ * 30 + tile.direction.offsetZ * 30); + WorldUtil.loadAndSpawnEntityInWorld(missile); + + world.setBlock(x,y,z, ModBlocks.block_electrical_scrap); + }; + public static List getActionNames(){ return new ArrayList<>(actions.keySet()); } @@ -158,6 +188,7 @@ public class DungeonSpawnerActions { actions.put("COLLAPSE_ROOF_RAD_5", COLLAPSE_ROOF_RAD_5); actions.put("FODDER_WAVE", FODDER_WAVE); actions.put("PUZZLE_TEST", PUZZLE_TEST); + actions.put("MISSILE_STRIKE", MISSILE_STRIKE); } diff --git a/src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png b/src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png index 4788b84883581058c6fdf5525b3239d0e888f352..65e3106a96f970891be895a960ccfb53a60b3915 100644 GIT binary patch delta 87 zcmaFD`kZyc3?_doPZ!4!iOb0e2?8uk3P&|K*q9Fw delta 84 zcmaFP`h<1E3??6QPZ!4!iOb0e2?8uk3P&|K*q9bP0l+XkK_SqL`