copy tool support and working directional offsets

This commit is contained in:
70000hp 2025-06-30 15:32:25 -04:00
parent 3db1dbd277
commit 1a9fc72a93
4 changed files with 46 additions and 2 deletions

View File

@ -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);
}
}

View File

@ -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<TileEntityDungeonSpawner, Boolean> condition;
public Consumer<TileEntityDungeonSpawner> 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"));
}
}

View File

@ -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<DungeonSpawner.TileEntityDungeonSpawner> 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<String> 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);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 740 B

After

Width:  |  Height:  |  Size: 743 B