From b3664385c54a70de40ff788357773f452c37077a Mon Sep 17 00:00:00 2001 From: Jerome226 <55724525+Jerome226@users.noreply.github.com> Date: Sun, 29 May 2022 21:25:56 -0400 Subject: [PATCH 1/3] Fixed crash when TFC is not present --- .../letiu/modbase/util/ItemReference.java | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/Pistronics-Repo/src/main/java/letiu/modbase/util/ItemReference.java b/Pistronics-Repo/src/main/java/letiu/modbase/util/ItemReference.java index 708535d..5852c92 100644 --- a/Pistronics-Repo/src/main/java/letiu/modbase/util/ItemReference.java +++ b/Pistronics-Repo/src/main/java/letiu/modbase/util/ItemReference.java @@ -4,6 +4,7 @@ import letiu.pistronics.config.ConfigData; import letiu.pistronics.items.ItemSpade; import letiu.pistronics.util.BlockProxy; +import cpw.mods.fml.common.Loader; import net.minecraft.block.*; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -16,7 +17,10 @@ public class ItemReference { + public static boolean isTFCLoaded = Loader.isModLoaded("terrafirmacraftplus"); + public static final Item SLIME = Items.slime_ball; + public static final Block REDSTONE_TORCH = Blocks.redstone_torch; public static final Block REDSTONE_BLOCK = Blocks.redstone_block; @@ -41,10 +45,15 @@ public class ItemReference { public static final Item WHEAT_SEEDS = Items.wheat_seeds; public static final Item COMPARATOR = Items.comparator; public static final Item DIAMOND = Items.diamond; - - public static final Item BOW = Items.bow; - public static final Item ARROW = Items.arrow; - + + if(isTFCLoaded) { + public static final Item BOW = TFCItems.bow; + public static final Item ARROW = TFCItems.arrow; + } else { + public static final Item BOW = Items.bow; + public static final Item ARROW = Items.arrow; + } + public static final Item ROTTEN_FLESH = Items.rotten_flesh; public static final Item POISONOUS_POTATO = Items.poisonous_potato; public static final Item SPIDER_EYE = Items.spider_eye; @@ -55,7 +64,7 @@ public class ItemReference { public static final Item MILK = Items.milk_bucket; public static final Item BOOK = Items.book; - + public static boolean isDye(ItemStack stack, int color) { if (stack == null) return false; switch (color) { @@ -86,11 +95,15 @@ public static int getStackDyeColor(ItemStack stack) { } return -1; } - + public static ItemStack getDye(int dmg) { - return new ItemStack(TFCItems.dye, 1, dmg); + if(isTFCLoaded) { + return new ItemStack(TFCItems.dye, 1, dmg); + } else { + return new ItemStack(Items.dye, 1, dmg); + } } - + public static boolean isHarvestTool(ItemStack stack) { if (stack == null) return false; Item item = stack.getItem(); From 3964de3c88b7d30e19f6abd87dc7f6eda9f6536e Mon Sep 17 00:00:00 2001 From: Jerome226 Date: Thu, 23 Jun 2022 03:21:46 -0400 Subject: [PATCH 2/3] Made mod able to compile, more port from the CF version will come later --- .gitignore | 1 + .../java/letiu/modbase/tiles/BaseTile.java | 48 +- .../letiu/modbase/util/ItemReference.java | 9 +- .../main/java/letiu/modbase/util/NBTUtil.java | 28 +- .../java/letiu/pistronics/data/PTile.java | 15 +- .../pistronics/piston/ControllerData.java | 14 + .../pistronics/piston/ControllerRegistry.java | 43 ++ .../letiu/pistronics/piston/MoveData.java | 95 +++ .../pistronics/piston/SystemController.java | 50 +- .../letiu/pistronics/tiles/TileMotion.java | 713 +++++++++--------- 10 files changed, 564 insertions(+), 452 deletions(-) create mode 100644 Pistronics-Repo/src/main/java/letiu/pistronics/piston/ControllerData.java create mode 100644 Pistronics-Repo/src/main/java/letiu/pistronics/piston/ControllerRegistry.java create mode 100644 Pistronics-Repo/src/main/java/letiu/pistronics/piston/MoveData.java diff --git a/.gitignore b/.gitignore index 85a8428..d1ba226 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +/.idea/ /Pistronics-Repo/.gradle /Pistronics-Repo/.settings /Pistronics-Repo/.idea diff --git a/Pistronics-Repo/src/main/java/letiu/modbase/tiles/BaseTile.java b/Pistronics-Repo/src/main/java/letiu/modbase/tiles/BaseTile.java index 2198b47..e3b9ec8 100644 --- a/Pistronics-Repo/src/main/java/letiu/modbase/tiles/BaseTile.java +++ b/Pistronics-Repo/src/main/java/letiu/modbase/tiles/BaseTile.java @@ -9,54 +9,46 @@ import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; public class BaseTile extends TileEntity { - public PTile data; - - @Override + public void updateEntity() { - data.update(); + this.data.update(); } - - @Override + public AxisAlignedBB getRenderBoundingBox() { - AxisAlignedBB box = data.getRenderBoundingBox(); - return box == null ? super.getRenderBoundingBox() : box; + AxisAlignedBB box = this.data.getRenderBoundingBox(); + return (box == null) ? super.getRenderBoundingBox() : box; } - - @Override + public Packet getDescriptionPacket() { super.getDescriptionPacket(); NBTTagCompound tag = NBTUtil.getNewCompound(); - this.writeToNBT(tag); - return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, tag); + writeToNBT(tag); + return (Packet)new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, tag); } - - @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) { readFromNBT(packet.func_148857_g()); } - - @Override + public void validate() { super.validate(); - data.postLoad(); + this.data.postLoad(); } - - @Override + public void writeToNBT(NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); - tagCompound.setString("key", data.getKey()); - data.writeToNBT(tagCompound); + tagCompound.setString("key", this.data.getKey()); + this.data.writeToNBT(tagCompound); } - - @Override + public void readFromNBT(NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); - data = TileData.getTile(tagCompound.getString("key")); - data.tileEntity = this; - data.readFromNBT(tagCompound); + this.data = TileData.getTile(tagCompound.getString("key")); + this.data.tileEntity = this; + this.data.readFromNBT(tagCompound); } - -} +} \ No newline at end of file diff --git a/Pistronics-Repo/src/main/java/letiu/modbase/util/ItemReference.java b/Pistronics-Repo/src/main/java/letiu/modbase/util/ItemReference.java index 5852c92..c1a3e42 100644 --- a/Pistronics-Repo/src/main/java/letiu/modbase/util/ItemReference.java +++ b/Pistronics-Repo/src/main/java/letiu/modbase/util/ItemReference.java @@ -46,13 +46,8 @@ public class ItemReference { public static final Item COMPARATOR = Items.comparator; public static final Item DIAMOND = Items.diamond; - if(isTFCLoaded) { - public static final Item BOW = TFCItems.bow; - public static final Item ARROW = TFCItems.arrow; - } else { - public static final Item BOW = Items.bow; - public static final Item ARROW = Items.arrow; - } + public static final Item BOW = TFCItems.bow; + public static final Item ARROW = TFCItems.arrow; public static final Item ROTTEN_FLESH = Items.rotten_flesh; public static final Item POISONOUS_POTATO = Items.poisonous_potato; diff --git a/Pistronics-Repo/src/main/java/letiu/modbase/util/NBTUtil.java b/Pistronics-Repo/src/main/java/letiu/modbase/util/NBTUtil.java index 8d62e05..50c963c 100644 --- a/Pistronics-Repo/src/main/java/letiu/modbase/util/NBTUtil.java +++ b/Pistronics-Repo/src/main/java/letiu/modbase/util/NBTUtil.java @@ -1,39 +1,37 @@ package letiu.modbase.util; import java.util.Set; - import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; public class NBTUtil { - public static final int TAG_COMPOUND_ID = NBTBase.NBTTypes.length - 2; - + public static NBTTagCompound getCompoundAt(NBTTagList list, int i) { return list.getCompoundTagAt(i); } - + public static NBTTagList getCompoundList(NBTTagCompound compound, String key) { return compound.getTagList(key, TAG_COMPOUND_ID); } - + public static boolean compare(NBTTagCompound nbt1, NBTTagCompound nbt2) { - - if (nbt1 == null && nbt2 == null) return true; - if (nbt1 == null && nbt2 != null) return false; - if (nbt1 != null && nbt2 == null) return false; - + if (nbt1 == null && nbt2 == null) + return true; + if (nbt1 == null && nbt2 != null) + return false; + if (nbt1 != null && nbt2 == null) + return false; Set keySet = nbt1.func_150296_c(); - for (Object obj : keySet) { - String key = (String) obj; - if (!nbt2.hasKey(key) || !(nbt1.getTag(key).equals(nbt2.getTag(key)))) return false; + String key = (String)obj; + if (!nbt2.hasKey(key) || !nbt1.getTag(key).equals(nbt2.getTag(key))) + return false; } - return true; } - + public static NBTTagCompound getNewCompound() { return new NBTTagCompound(); } diff --git a/Pistronics-Repo/src/main/java/letiu/pistronics/data/PTile.java b/Pistronics-Repo/src/main/java/letiu/pistronics/data/PTile.java index 76088f6..bfd8cbd 100644 --- a/Pistronics-Repo/src/main/java/letiu/pistronics/data/PTile.java +++ b/Pistronics-Repo/src/main/java/letiu/pistronics/data/PTile.java @@ -6,23 +6,22 @@ import net.minecraft.util.AxisAlignedBB; public abstract class PTile { - public BaseTile tileEntity; - + public abstract String getKey(); - - public void readFromNBT(NBTTagCompound tagCompound) {} - public void writeToNBT(NBTTagCompound tagCompound) {} + public void readFromNBT(NBTTagCompound tagCompound) {} + + public void writeToNBT(NBTTagCompound tagCompound) {} public void update() {} public void postLoad() {} - + public boolean hasInventory() { return false; } - + public NBTTagCompound getNBTForItem() { NBTTagCompound nbt = NBTUtil.getNewCompound(); writeToNBT(nbt); @@ -32,4 +31,4 @@ public NBTTagCompound getNBTForItem() { public AxisAlignedBB getRenderBoundingBox() { return null; } -} +} \ No newline at end of file diff --git a/Pistronics-Repo/src/main/java/letiu/pistronics/piston/ControllerData.java b/Pistronics-Repo/src/main/java/letiu/pistronics/piston/ControllerData.java new file mode 100644 index 0000000..695a4a8 --- /dev/null +++ b/Pistronics-Repo/src/main/java/letiu/pistronics/piston/ControllerData.java @@ -0,0 +1,14 @@ +package letiu.pistronics.piston; + +public class ControllerData { + public SystemController controller; + + public float lastValue; + + public String key; + + public void updateController() { + if (this.controller != null) + this.controller.update(this); + } +} \ No newline at end of file diff --git a/Pistronics-Repo/src/main/java/letiu/pistronics/piston/ControllerRegistry.java b/Pistronics-Repo/src/main/java/letiu/pistronics/piston/ControllerRegistry.java new file mode 100644 index 0000000..d7ab5e5 --- /dev/null +++ b/Pistronics-Repo/src/main/java/letiu/pistronics/piston/ControllerRegistry.java @@ -0,0 +1,43 @@ +package letiu.pistronics.piston; + +import java.util.HashMap; +import letiu.pistronics.util.BlockProxy; +import letiu.pistronics.util.Vector3; + +public class ControllerRegistry { + private static HashMap mapClient = new HashMap(); + + private static HashMap mapServer = new HashMap(); + + public static void register(SystemController ctr, BlockProxy root) { + HashMap map = (root.getWorld()).isRemote ? mapClient : mapServer; + Vector3 coords = root.getCoords(); + String key = coords.x + "x" + coords.y + "x" + coords.y; + for (; map.get(key) != null; key = key + "I"); + map.put(key, ctr); + ctr.setKey(key); + } + + public static void remove(String key) { + mapClient.remove(key); + mapServer.remove(key); + } + + public static SystemController find(String key) { + SystemController controller = mapServer.get(key); + if (controller == null) + controller = mapClient.get(key); + return controller; + } + + public static SystemController create(String key, MoveData moveData, boolean isRemote) { + HashMap map = isRemote ? mapClient : mapServer; + SystemController ctr = map.get(key); + if (ctr == null) { + ctr = new SystemController(moveData); + map.put(key, ctr); + ctr.setKey(key); + } + return ctr; + } +} \ No newline at end of file diff --git a/Pistronics-Repo/src/main/java/letiu/pistronics/piston/MoveData.java b/Pistronics-Repo/src/main/java/letiu/pistronics/piston/MoveData.java new file mode 100644 index 0000000..d669634 --- /dev/null +++ b/Pistronics-Repo/src/main/java/letiu/pistronics/piston/MoveData.java @@ -0,0 +1,95 @@ +package letiu.pistronics.piston; + +import letiu.pistronics.util.Vector3; +import letiu.pistronics.util.VectorUtil; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; + +public class MoveData { + public int rotateDir; + + public int moveDir; + + public float angle; + + public float progress; + + public float rotateSpeed; + + public float moveSpeed; + + public Vector3 rotatePoint; + + public MoveData(int moveDir, float moveSpeed) { + this.rotateDir = -1; + this.moveDir = -1; + this.moveDir = moveDir; + this.moveSpeed = moveSpeed; + } + + public MoveData(int rotateDir, float rotateSpeed, Vector3 rotatePoint) { + this.rotateDir = -1; + this.moveDir = -1; + this.rotateDir = rotateDir; + this.rotateSpeed = rotateSpeed; + this.rotatePoint = rotatePoint; + } + + public MoveData(NBTTagCompound nbt) { + this.rotateDir = -1; + this.moveDir = -1; + readFromNBT(nbt); + } + + public MoveData() { + this.rotateDir = -1; + this.moveDir = -1; + } + + public void update() { + if (!isDone()) + if (isRotating()) { + this.angle += this.rotateSpeed; + } else if (isMoving()) { + this.progress += this.moveSpeed; + } + } + + public boolean isDone() { + return (this.angle >= 90.0F || this.progress >= 1.0F); + } + + public boolean isMoving() { + return (this.moveDir != -1 && this.moveSpeed != 0.0F); + } + + public boolean isRotating() { + return (this.rotateDir != -1 && this.rotateSpeed != 0.0F); + } + + public float getValue() { + return isMoving() ? this.progress : this.angle; + } + + public void writeToNBT(NBTTagCompound nbt) { + nbt.setInteger("rotateDir", this.rotateDir); + nbt.setInteger("moveDir", this.moveDir); + nbt.setFloat("angle", this.angle); + nbt.setFloat("progress", this.progress); + nbt.setFloat("rotateSpeed", this.rotateSpeed); + nbt.setFloat("moveSpeed", this.moveSpeed); + if (this.rotatePoint != null) + nbt.setTag("rotatePoint", (NBTBase)VectorUtil.writeToNBT(this.rotatePoint)); + } + + public void readFromNBT(NBTTagCompound nbt) { + this.rotateDir = nbt.getInteger("rotateDir"); + this.moveDir = nbt.getInteger("moveDir"); + this.angle = nbt.getFloat("angle"); + this.rotateSpeed = nbt.getFloat("rotateSpeed"); + this.moveSpeed = nbt.getFloat("moveSpeed"); + this.progress = nbt.getFloat("progress"); + if (nbt.hasKey("rotatePoint")) + this.rotatePoint = VectorUtil.readFromNBT(nbt.getCompoundTag("rotatePoint")); + } +} \ No newline at end of file diff --git a/Pistronics-Repo/src/main/java/letiu/pistronics/piston/SystemController.java b/Pistronics-Repo/src/main/java/letiu/pistronics/piston/SystemController.java index 3100257..c413e31 100644 --- a/Pistronics-Repo/src/main/java/letiu/pistronics/piston/SystemController.java +++ b/Pistronics-Repo/src/main/java/letiu/pistronics/piston/SystemController.java @@ -1,29 +1,35 @@ package letiu.pistronics.piston; public class SystemController { + private MoveData moveData; - public SystemController() { - + private String key; + + public SystemController(MoveData moveData) { + this.moveData = moveData; + } + + public boolean update(ControllerData data) { + boolean result = false; + if (data.lastValue == this.moveData.getValue()) { + this.moveData.update(); + result = true; + } + data.lastValue = this.moveData.getValue(); + if (this.moveData.isDone()) + ControllerRegistry.remove(this.key); + return result; + } + + public void setKey(String key) { + this.key = key; + } + + public String getKey() { + return this.key; } - -// private ArrayList movers; -// -// public SystemController() { -// movers = new ArrayList(); -// } -// -// public void addMover(IMover mover) { -// movers.add(mover); -// } -// -// public void updateAll(float progress) { -// -// System.out.println("updating " + movers.size() + " Blocks."); -// -// for (IMover mover : movers) { -// mover.setProgress(progress); -// } -// } - + public MoveData getMoveData() { + return this.moveData; + } } diff --git a/Pistronics-Repo/src/main/java/letiu/pistronics/tiles/TileMotion.java b/Pistronics-Repo/src/main/java/letiu/pistronics/tiles/TileMotion.java index a363d53..aeb7d83 100644 --- a/Pistronics-Repo/src/main/java/letiu/pistronics/tiles/TileMotion.java +++ b/Pistronics-Repo/src/main/java/letiu/pistronics/tiles/TileMotion.java @@ -2,428 +2,397 @@ import java.util.Iterator; import java.util.List; - import letiu.modbase.util.BlockItemUtil; import letiu.modbase.util.NBTUtil; import letiu.modbase.util.WorldUtil; -import letiu.pistronics.blocks.BMotionblock; -import letiu.pistronics.blocks.BPartblock; import letiu.pistronics.data.PBlock; import letiu.pistronics.data.PTile; -import letiu.pistronics.data.TileData; +import letiu.pistronics.piston.ControllerData; +import letiu.pistronics.piston.ControllerRegistry; import letiu.pistronics.piston.ISpecialRotator; +import letiu.pistronics.piston.MoveData; +import letiu.pistronics.piston.SystemController; import letiu.pistronics.render.PRenderManager; import letiu.pistronics.render.PTileRenderer; +import letiu.pistronics.util.BlockProxy; import letiu.pistronics.util.RotateUtil; import letiu.pistronics.util.Vector3; -import letiu.pistronics.util.VectorUtil; import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Facing; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import org.lwjgl.Sys; public class TileMotion extends TileElementHolder implements ISpecialRenderTile, IMover { - private int rotateDir = -1, moveDir = -1; - private float angle, progress; - private float rotateSpeed, moveSpeed; - - private Vector3 rotatePoint; - - public boolean remoteControl = true; - - public TileMotion() { - rotatePoint = new Vector3(0, 0, 0); -// data = new TempData(); -// data.p = 0.5F; -// System.out.println("TileMotion.TileMotion()"); - } - - @Override + public ControllerData ctrData = new ControllerData(); + + private NBTTagCompound tempNBTCompound = null; + public void update() { -// super.update(); // TODOe - - //if (!remoteControl) { -// System.out.println("TileMotion: local progress"); - if (rotateDir != -1 && rotateSpeed != 0) { - angle += rotateSpeed; - if (angle >= 90) { - loadBlock(); - postRotate(); - } - } - if (moveDir != -1 && moveSpeed != 0) { - progress += moveSpeed; - - pushEntities(); - - if (progress >= 1F) { - pushEntitiesFinal(); - loadBlock(); - postMove(); - //ktryToMoveOn(); - } + if (this.ctrData.controller == null) + this.ctrData.controller = new SystemController(new MoveData()); + + this.ctrData.updateController(); + MoveData moveData = this.ctrData.controller.getMoveData(); + + if (moveData.isMoving()) + pushEntities(); + + if (moveData.isDone()) + if (moveData.isMoving()) { + pushEntitiesFinal(); + loadBlock(); + postMove(); + } else if (moveData.isRotating()) { + loadBlock(); + postRotate(); } - //} -// System.out.println(data.p); -// if (progress2 >= 1) loadBlock(); - - - //this.remoteControl = false; } @Override - public void setProgress(float progress) { -// System.out.println("TileMotion.setProgress() " + tileEntity.getWorldObj().isRemote + " " + progress + " " + tileEntity.xCoord + "/" + tileEntity.yCoord + "/" + tileEntity.zCoord); -// this.progress2 = progress; -// this.remoteControl = true; -// this.data.p = progress2; - //System.out.println(tileEntity.getWorldObj().isRemote + " Setting progress to: " + progress); - } - + public void setProgress(float progress) {} + public AxisAlignedBB getBoxForPush(float pushSpace) { - - World world = tileEntity.getWorldObj(); - int x = tileEntity.xCoord; - int y = tileEntity.yCoord; - int z = tileEntity.zCoord; - - // get Box from Element // AxisAlignedBB box; - if (this.getPElement() instanceof BPartblock) { - box = AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1); - } - else { - box = BlockItemUtil.getBoundingBox(world, x, y, z, element); - if (box == null) { - box = AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1); - } + MoveData moveData = this.ctrData.controller.getMoveData(); + World world = this.tileEntity.getWorldObj(); + int x = this.tileEntity.xCoord; + int y = this.tileEntity.yCoord; + int z = this.tileEntity.zCoord; + if (getPElement() instanceof letiu.pistronics.blocks.BPartblock) { + box = AxisAlignedBB.getBoundingBox(x, y, z, (x + 1), (y + 1), (z + 1)); + } else { + box = BlockItemUtil.getBoundingBox(world, x, y, z, this.element); + if (box == null) + box = AxisAlignedBB.getBoundingBox(x, y, z, (x + 1), (y + 1), (z + 1)); } - - // expand Box // - switch (moveDir) { - case 0: box.maxY = y + 1; break; - case 1: box.minY = y; break; - case 2: box.maxZ = z + 1; break; - case 3: box.minZ = z; break; - case 4: box.maxX = x + 1; break; - case 5: box.minX = x; break; + switch (moveData.moveDir) { + case 0: + box.maxY = (y + 1); + break; + case 1: + box.minY = y; + break; + case 2: + box.maxZ = (z + 1); + break; + case 3: + box.minZ = z; + break; + case 4: + box.maxX = (x + 1); + break; + case 5: + box.minX = x; + break; } - - // offset depending on progress // - float antiProgress = 1F - (progress + pushSpace); - - return box.getOffsetBoundingBox((double)(antiProgress * (float)Facing.offsetsXForSide[moveDir]), (double)(antiProgress * (float)Facing.offsetsYForSide[moveDir]), (double)(antiProgress * (float)Facing.offsetsZForSide[moveDir])); + float antiProgress = 1.0F - moveData.progress + pushSpace; + return box.getOffsetBoundingBox((antiProgress * Facing.offsetsXForSide[moveData.moveDir]), (antiProgress * Facing.offsetsYForSide[moveData.moveDir]), (antiProgress * Facing.offsetsZForSide[moveData.moveDir])); } - - private void pushEntities() { - - World world = tileEntity.getWorldObj(); - int x = tileEntity.xCoord; - int y = tileEntity.yCoord; - int z = tileEntity.zCoord; - - float moveAmt = 1F * moveSpeed; - - - PBlock block = WorldUtil.getPBlock(world, x + Facing.offsetsXForSide[moveDir], y + Facing.offsetsYForSide[moveDir], z + Facing.offsetsZForSide[moveDir]); - - /** push Entities out of the Block */ - if (block != null && block instanceof BMotionblock) { - - List list = tileEntity.getWorldObj().getEntitiesWithinAABBExcludingEntity((Entity) null, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1)); - Iterator itr = list.iterator(); - - while (itr.hasNext()) { - - Entity entity = (Entity) itr.next(); - - double vX = 0.1D * (entity.posX - (x + 0.5D)); - double vY = 0.1D * (entity.posY - (y + 0.5D)); - double vZ = 0.1D * (entity.posZ - (z + 0.5D)); - - entity.motionX = vX; - entity.motionY = vY; - entity.motionZ = vZ; + + private void pushEntities() { + MoveData moveData = this.ctrData.controller.getMoveData(); + World world = this.tileEntity.getWorldObj(); + int x = this.tileEntity.xCoord; + int y = this.tileEntity.yCoord; + int z = this.tileEntity.zCoord; + float moveAmt = 1.0F * moveData.moveSpeed; + PBlock block = WorldUtil.getPBlock((IBlockAccess)world, x + Facing.offsetsXForSide[moveData.moveDir], y + Facing.offsetsYForSide[moveData.moveDir], z + Facing.offsetsZForSide[moveData.moveDir]); + if (block != null && block instanceof letiu.pistronics.blocks.BMotionblock) { + List list = this.tileEntity.getWorldObj().getEntitiesWithinAABBExcludingEntity((Entity)null, AxisAlignedBB.getBoundingBox(x, y, z, (x + 1), (y + 1), (z + 1))); + Iterator itr = list.iterator(); + while (itr.hasNext()) { + Entity entity = itr.next(); + double vX = 0.1D * (entity.posX - x + 0.5D); + double vY = 0.1D * (entity.posY - y + 0.5D); + double vZ = 0.1D * (entity.posZ - z + 0.5D); + entity.motionX = vX; + entity.motionY = vY; + entity.motionZ = vZ; + } + } else { + List list = this.tileEntity.getWorldObj().getEntitiesWithinAABBExcludingEntity((Entity)null, getBoxForPush(0.25F)); + Iterator itr = list.iterator(); + while (itr.hasNext()) { + Entity entity = itr.next(); + entity.moveEntity((moveAmt * Facing.offsetsXForSide[moveData.moveDir]), (moveAmt * Facing.offsetsYForSide[moveData.moveDir]), (moveAmt * Facing.offsetsZForSide[moveData.moveDir])); + switch (moveData.moveDir) { + case 0: + if (entity.motionY > 0.0D) + entity.motionY = 0.0D; + case 1: + if (entity.motionY < 0.0D) + entity.motionY = 0.0D; + case 2: + if (entity.motionZ > 0.0D) + entity.motionZ = 0.0D; + case 3: + if (entity.motionZ < 0.0D) + entity.motionZ = 0.0D; + case 4: + if (entity.motionX > 0.0D) + entity.motionX = 0.0D; + case 5: + if (entity.motionX < 0.0D) + entity.motionX = 0.0D; + } + } } } - /** push Entities in moveDir */ - else { - - List list = tileEntity.getWorldObj().getEntitiesWithinAABBExcludingEntity((Entity) null, getBoxForPush(0.25F)); - Iterator itr = list.iterator(); - + + private void pushEntitiesFinal() { + MoveData moveData = this.ctrData.controller.getMoveData(); + List list = this.tileEntity.getWorldObj().getEntitiesWithinAABBExcludingEntity((Entity)null, getBoxForPush(0.0F)); + Iterator itr = list.iterator(); while (itr.hasNext()) { - - Entity entity = (Entity) itr.next(); - entity.moveEntity((double)(moveAmt * (float)Facing.offsetsXForSide[moveDir]), (double)(moveAmt * (float)Facing.offsetsYForSide[moveDir]), (double)(moveAmt * (float)Facing.offsetsZForSide[moveDir])); - - // stop velocity against moveDir (e.g. gravity) // - switch(moveDir) { - case 0: if (entity.motionY > 0) entity.motionY = 0; break; - case 1: if (entity.motionY < 0) entity.motionY = 0; break; - case 2: if (entity.motionZ > 0) entity.motionZ = 0; break; - case 3: if (entity.motionZ < 0) entity.motionZ = 0; break; - case 4: if (entity.motionX > 0) entity.motionX = 0; break; - case 5: if (entity.motionX < 0) entity.motionX = 0; break; + Entity entity = itr.next(); + switch (moveData.moveDir) { + case 1: + entity.posY = Math.ceil(entity.posY); + entity.motionY = 0.25D; + case 2: + entity.motionZ = -0.25D; + case 3: + entity.motionZ = 0.25D; + case 4: + entity.motionX = -0.25D; + case 5: + entity.motionX = 0.25D; } } } - } - - private void pushEntitiesFinal() { - - List list = tileEntity.getWorldObj().getEntitiesWithinAABBExcludingEntity((Entity) null, getBoxForPush(0F)); - - Iterator itr = list.iterator(); - - while (itr.hasNext()) { - - Entity entity = (Entity) itr.next(); - - // Ensures no entities are left in the bounding box at the end // - switch(moveDir) { - //case 0: entity.posY = entity.posY - 1.0D; break; - case 1: entity.posY = Math.ceil(entity.posY); - entity.motionY = 0.25D; break; - case 2: entity.motionZ = -0.25D; break; - case 3: entity.motionZ = 0.25D; break; - case 4: entity.motionX = -0.25D; break; - case 5: entity.motionX = 0.25D; break; + + public boolean tryToMoveOn() { + MoveData moveData = this.ctrData.controller.getMoveData(); + int x = this.tileEntity.xCoord + Facing.offsetsXForSide[moveData.moveDir]; + int y = this.tileEntity.yCoord + Facing.offsetsYForSide[moveData.moveDir]; + int z = this.tileEntity.zCoord + Facing.offsetsZForSide[moveData.moveDir]; + PTile tile = WorldUtil.getPTile((IBlockAccess)this.tileEntity.getWorldObj(), x, y, z); + if (tile != null && tile instanceof TileMotion) { + moveData.progress = 0.0F; + NBTTagCompound nbt = new NBTTagCompound(); + writeToNBT(nbt); + tile.readFromNBT(nbt); + moveData.moveDir = -1; + this.element = null; + return true; } + return false; } - } - - public boolean tryToMoveOn() { - - int x = tileEntity.xCoord + Facing.offsetsXForSide[moveDir]; - int y = tileEntity.yCoord + Facing.offsetsYForSide[moveDir]; - int z = tileEntity.zCoord + Facing.offsetsZForSide[moveDir]; - - PTile tile = WorldUtil.getPTile(tileEntity.getWorldObj(), x, y, z); - - if (tile != null && tile instanceof TileMotion) { - this.progress = 0F; - NBTTagCompound nbt = new NBTTagCompound(); - this.writeToNBT(nbt); - tile.readFromNBT(nbt); - this.moveDir = -1; - this.element = null; - return true; + + public String getKey() { + return "tlMotion"; } - - return false; - } - - @Override - public String getKey() { - return TileData.key_motion; - } - @Override - public PTileRenderer getRenderer() { - return PRenderManager.motionRenderer; - } - - public int getRotateDir() { - return rotateDir; - } - - public int getMoveDir() { - return moveDir; - } - - public float getAngle() { - return angle; - } - - public float getProgress() { - return progress; - } - - public float getAngleForRender(float ticktime) { - if (ticktime > 1F) ticktime = 1F; - - return ((float) angle) + rotateSpeed * ticktime - 90F; - } - - public float getProgressForRender(float ticktime) { - if (ticktime > 1F) ticktime = 1F; - //return progress; - return ((float) progress) + moveSpeed * ticktime; - } + public PTileRenderer getRenderer() { + return PRenderManager.motionRenderer; + } - public float getRotateSpeed() { - return rotateSpeed; - } - - public float getMoveSpeed() { - return moveSpeed; - } - - public Vector3 getRotatePoint() { - return rotatePoint; - } - - public boolean isRotating() { - return rotateDir != -1 && rotateSpeed != 0F; - } - - public boolean isMoving() { - return moveDir != -1 && moveSpeed != 0F; - } - - public boolean isInMotion() { - return isMoving() || isRotating(); - } - - public void rotate(int rotateDir, float speed) { - this.rotateDir = rotateDir; - this.rotateSpeed = speed; - this.rotatePoint = new Vector3(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); - } - - public void rotate(int rotateDir, float speed, Vector3 rotatePoint) { - this.rotateDir = rotateDir; - this.rotateSpeed = speed; - this.rotatePoint = rotatePoint; - } - - public void move(int moveDir, float speed) { - this.moveDir = moveDir; - this.moveSpeed = speed; - } - - public void loadBlock() { - - int x = tileEntity.xCoord, y = tileEntity.yCoord, z = tileEntity.zCoord; - World world = tileEntity.getWorldObj(); - - if (element != null) { - -// if (!world.isRemote && ItemReference.isFallingBlock(element)) { -// world.isRemote = true; -// WorldUtil.setBlock(world, x, y, z, element, elementMeta, 4); -// world.isRemote = false; -// } -// else { - WorldUtil.setBlock(world, x, y, z, element, elementMeta, 5); -// } - - if (elementTile != null) { - - - TileEntity tile = WorldUtil.getTileEntity(world, x, y, z); - -// elementTile.setWorldObj(world); -// elementTile.xCoord = x; -// elementTile.yCoord = y; -// elementTile.zCoord = z; -// - NBTTagCompound nbt = NBTUtil.getNewCompound(); - elementTile.writeToNBT(nbt); -// -// TileEntity.createAndLoadEntity(nbt); - - // TODO: FMP crash here! (no tile? �O�) - if (tile == null) { - elementTile.setWorldObj(world); - elementTile.xCoord = x; - elementTile.yCoord = y; - elementTile.zCoord = z; - WorldUtil.setTileEntity(world, x, y, z, elementTile); - WorldUtil.setBlock(world, x, y, z, element, elementMeta, 5); + public int getRotateDir() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return moveData.rotateDir; + } + + public int getMoveDir() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return moveData.moveDir; + } + + public float getAngle() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return moveData.angle; + } + + public float getProgress() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return moveData.progress; + } + + public float getAngleForRender(float ticktime) { + MoveData moveData = this.ctrData.controller.getMoveData(); + if (ticktime > 1.0F) + ticktime = 1.0F; + return moveData.angle + moveData.rotateSpeed * ticktime - 90.0F; + } + + public float getProgressForRender(float ticktime) { + MoveData moveData = this.ctrData.controller.getMoveData(); + if (ticktime > 1.0F) + ticktime = 1.0F; + return moveData.progress + moveData.moveSpeed * ticktime; + } + + public float getRotateSpeed() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return moveData.rotateSpeed; + } + + public float getMoveSpeed() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return moveData.moveSpeed; + } + + public Vector3 getRotatePoint() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return moveData.rotatePoint; + } + + public boolean isRotating() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return (moveData.rotateDir != -1 && moveData.rotateSpeed != 0.0F); + } + + public boolean isMoving() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return (moveData.moveDir != -1 && moveData.moveSpeed != 0.0F); + } + + public boolean isInMotion() { + return (isMoving() || isRotating()); + } + + public void rotate(int rotateDir, float speed) { + rotate(rotateDir, speed, new Vector3(this.tileEntity.xCoord, this.tileEntity.yCoord, this.tileEntity.zCoord)); + } + + public void rotate(int rotateDir, float speed, Vector3 rotatePoint) { + if (this.ctrData.controller == null) { + MoveData moveData = new MoveData(rotateDir, speed, rotatePoint); + if (this.ctrData.key != null && !this.ctrData.key.equals("default")) { + this.ctrData.controller = ControllerRegistry.create(this.ctrData.key, moveData, (this.tileEntity.getWorldObj()).isRemote); + this.ctrData.key = this.ctrData.controller.getKey(); + } else { + SystemController ctr = new SystemController(moveData); + ControllerRegistry.register(ctr, new BlockProxy((TileEntity)this.tileEntity)); + this.ctrData.controller = ctr; + this.ctrData.key = ctr.getKey(); + } + } + } + + public void move(int moveDir, float speed) { + if (this.ctrData.controller == null) { + MoveData moveData = new MoveData(moveDir, speed); + if (this.ctrData.key != null && !this.ctrData.key.equals("default")) { + this.ctrData.controller = ControllerRegistry.create(this.ctrData.key, moveData, (this.tileEntity.getWorldObj()).isRemote); + this.ctrData.key = this.ctrData.controller.getKey(); + } else { + SystemController ctr = new SystemController(moveData); + ControllerRegistry.register(ctr, new BlockProxy((TileEntity)this.tileEntity)); + this.ctrData.controller = ctr; + this.ctrData.key = ctr.getKey(); } - - tile = WorldUtil.getTileEntity(world, x, y, z); - - if (tile != null) { - tile.readFromNBT(nbt); - tile.setWorldObj(world); - tile.xCoord = x; - tile.yCoord = y; - tile.zCoord = z; + } + } + + public void loadBlock() { + int x = this.tileEntity.xCoord, y = this.tileEntity.yCoord, z = this.tileEntity.zCoord; + World world = this.tileEntity.getWorldObj(); + if (this.element != null) { + WorldUtil.setBlock(world, x, y, z, this.element, this.elementMeta, 5); + if (this.elementTile != null) { + TileEntity tile = WorldUtil.getTileEntity((IBlockAccess)world, x, y, z); + NBTTagCompound nbt = NBTUtil.getNewCompound(); + this.elementTile.writeToNBT(nbt); + if (tile == null) { + this.elementTile.setWorldObj(world); + this.elementTile.xCoord = x; + this.elementTile.yCoord = y; + this.elementTile.zCoord = z; + WorldUtil.setTileEntity(world, x, y, z, this.elementTile); + WorldUtil.setBlock(world, x, y, z, this.element, this.elementMeta, 5); + } + tile = WorldUtil.getTileEntity((IBlockAccess)world, x, y, z); + if (tile != null) { + tile.readFromNBT(nbt); + tile.setWorldObj(world); + tile.xCoord = x; + tile.yCoord = y; + tile.zCoord = z; + } } + } else { + WorldUtil.setBlockToAir(world, x, y, z); } + WorldUtil.updateBlock(world, x, y, z); } - else { - WorldUtil.setBlockToAir(world, x, y, z); + + private void postRotate() { + MoveData moveData = this.ctrData.controller.getMoveData(); + int x = this.tileEntity.xCoord, y = this.tileEntity.yCoord, z = this.tileEntity.zCoord; + World world = this.tileEntity.getWorldObj(); + PBlock block = WorldUtil.getPBlock((IBlockAccess)world, x, y, z); + if (block instanceof ISpecialRotator) { + ((ISpecialRotator)block).postRotate(world, x, y, z, moveData.rotateDir, moveData.rotateSpeed, moveData.rotatePoint); + } else { + RotateUtil.rotateVanillaBlocks(world, x, y, z, this.elementMeta, moveData.rotateDir); + } } - - WorldUtil.updateBlock(world, x, y, z); - } - - private void postRotate() { - int x = tileEntity.xCoord, y = tileEntity.yCoord, z = tileEntity.zCoord; - World world = tileEntity.getWorldObj(); - - PBlock block = WorldUtil.getPBlock(world, x, y, z); - if (block instanceof ISpecialRotator) { - ((ISpecialRotator) block).postRotate(world, x, y, z, rotateDir, rotateSpeed, rotatePoint); + + private void postMove() { + WorldUtil.setBlockMeta(this.tileEntity.getWorldObj(), this.tileEntity.xCoord, this.tileEntity.yCoord, this.tileEntity.zCoord, this.elementMeta, 3); } - else { - RotateUtil.rotateVanillaBlocks(world, x, y, z, elementMeta, rotateDir); - } - } - private void postMove() { - WorldUtil.setBlockMeta(tileEntity.getWorldObj(), tileEntity.xCoord, - tileEntity.yCoord, tileEntity.zCoord, elementMeta, 3); - } - - @Override - public float getOffsetX(float ticktime) { - if (!isMoving()) return 0F; - return (float) Facing.offsetsXForSide[moveDir ^ 1] * (1 - getProgressForRender(ticktime)); - } + public float getOffsetX(float ticktime) { + MoveData moveData = this.ctrData.controller.getMoveData(); + if (!isMoving()) + return 0.0F; + return Facing.offsetsXForSide[moveData.moveDir ^ 0x1] * (1.0F - getProgressForRender(ticktime)); + } - @Override - public float getOffsetY(float ticktime) { - if (!isMoving()) return 0F; - return (float) Facing.offsetsYForSide[moveDir ^ 1] * (1 - getProgressForRender(ticktime)); - } + public float getOffsetY(float ticktime) { + MoveData moveData = this.ctrData.controller.getMoveData(); + if (!isMoving()) + return 0.0F; + return Facing.offsetsYForSide[moveData.moveDir ^ 0x1] * (1.0F - getProgressForRender(ticktime)); + } - @Override - public float getOffsetZ(float ticktime) { - if (!isMoving()) return 0F; - return (float) Facing.offsetsZForSide[moveDir ^ 1] * (1 - getProgressForRender(ticktime)); - } - - @Override - public void writeToNBT(NBTTagCompound tagCompound) { - super.writeToNBT(tagCompound); - - tagCompound.setInteger("rotateDir", rotateDir); - tagCompound.setInteger("moveDir", moveDir); - tagCompound.setFloat("angle", angle); - tagCompound.setFloat("progress", progress); - tagCompound.setFloat("rotateSpeed", rotateSpeed); - tagCompound.setFloat("moveSpeed", moveSpeed); - tagCompound.setBoolean("remote", remoteControl); - - tagCompound.setTag("rotatePoint", VectorUtil.writeToNBT(rotatePoint)); - } - - @Override - public void readFromNBT(NBTTagCompound tagCompound) { - super.readFromNBT(tagCompound); - - this.rotateDir = tagCompound.getInteger("rotateDir"); - this.moveDir = tagCompound.getInteger("moveDir"); - this.angle = tagCompound.getFloat("angle"); - this.rotateSpeed = tagCompound.getFloat("rotateSpeed"); - this.moveSpeed = tagCompound.getFloat("moveSpeed"); - this.remoteControl = tagCompound.getBoolean("remote"); - - this.rotatePoint = VectorUtil.readFromNBT(tagCompound.getCompoundTag("rotatePoint")); - - if (!isInMotion()) { - this.progress = tagCompound.getFloat("progress"); + public float getOffsetZ(float ticktime) { + MoveData moveData = this.ctrData.controller.getMoveData(); + if (!isMoving()) + return 0.0F; + return Facing.offsetsZForSide[moveData.moveDir ^ 0x1] * (1.0F - getProgressForRender(ticktime)); + } + + public void writeToNBT(NBTTagCompound tagCompound) { + super.writeToNBT(tagCompound); + if (this.ctrData.key == null && this.ctrData.controller != null) + this.ctrData.key = this.ctrData.controller.getKey(); + if (this.ctrData.key == null) + this.ctrData.key = "default"; + tagCompound.setString("ctrKey", this.ctrData.key); + if (this.ctrData.controller != null) { + MoveData moveData = this.ctrData.controller.getMoveData(); + moveData.writeToNBT(tagCompound); + } + } + + public void readFromNBT(NBTTagCompound tagCompound) { + super.readFromNBT(tagCompound); + this.ctrData.key = tagCompound.getString("ctrKey"); + if (this.ctrData.controller == null && !this.ctrData.key.equals("default")) { + MoveData moveData = new MoveData(tagCompound); + if (this.tileEntity != null && this.tileEntity.getWorldObj() != null) { + boolean isRemote = (this.tileEntity.getWorldObj()).isRemote; + this.ctrData.controller = ControllerRegistry.create(this.ctrData.key, moveData, isRemote); + } + } + this.tempNBTCompound = tagCompound; + } + + public void postLoad() { + super.postLoad(); + if (this.ctrData.controller == null && this.tempNBTCompound != null) { + MoveData moveData = new MoveData(this.tempNBTCompound); + if (this.tileEntity != null && this.tileEntity.getWorldObj() != null) { + boolean isRemote = (this.tileEntity.getWorldObj()).isRemote; + this.ctrData.controller = ControllerRegistry.create(this.ctrData.key, moveData, isRemote); + } + } } } -} From ae0086e4cfbf3fc022de1f1f8e19ae15bc18d583 Mon Sep 17 00:00:00 2001 From: Jerome226 Date: Thu, 23 Jun 2022 03:37:04 -0400 Subject: [PATCH 3/3] Added patch with new stuff --- .../letiu/modbase/util/ItemReference.java | 24 +- .../pistronics/recipes/PShapelessRecipe.java | 1 + .../letiu/pistronics/tiles/TileMotion.java | 398 ++++++++++++++++++ .../letiu/modbase/util/ItemReference.class | Bin 6378 -> 6544 bytes .../pistronics/recipes/PShapelessRecipe.class | Bin 3129 -> 3136 bytes .../letiu/pistronics/tiles/TileMotion.class | Bin 0 -> 12841 bytes 6 files changed, 415 insertions(+), 8 deletions(-) create mode 100644 Pistronics2-1.7.10-0.6.4-java/letiu/pistronics/tiles/TileMotion.java create mode 100644 Pistronics2-1.7.10-0.6.4/letiu/pistronics/tiles/TileMotion.class diff --git a/Pistronics2-1.7.10-0.6.4-java/letiu/modbase/util/ItemReference.java b/Pistronics2-1.7.10-0.6.4-java/letiu/modbase/util/ItemReference.java index 708535d..c1a3e42 100644 --- a/Pistronics2-1.7.10-0.6.4-java/letiu/modbase/util/ItemReference.java +++ b/Pistronics2-1.7.10-0.6.4-java/letiu/modbase/util/ItemReference.java @@ -4,6 +4,7 @@ import letiu.pistronics.config.ConfigData; import letiu.pistronics.items.ItemSpade; import letiu.pistronics.util.BlockProxy; +import cpw.mods.fml.common.Loader; import net.minecraft.block.*; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -16,7 +17,10 @@ public class ItemReference { + public static boolean isTFCLoaded = Loader.isModLoaded("terrafirmacraftplus"); + public static final Item SLIME = Items.slime_ball; + public static final Block REDSTONE_TORCH = Blocks.redstone_torch; public static final Block REDSTONE_BLOCK = Blocks.redstone_block; @@ -41,10 +45,10 @@ public class ItemReference { public static final Item WHEAT_SEEDS = Items.wheat_seeds; public static final Item COMPARATOR = Items.comparator; public static final Item DIAMOND = Items.diamond; - - public static final Item BOW = Items.bow; - public static final Item ARROW = Items.arrow; - + + public static final Item BOW = TFCItems.bow; + public static final Item ARROW = TFCItems.arrow; + public static final Item ROTTEN_FLESH = Items.rotten_flesh; public static final Item POISONOUS_POTATO = Items.poisonous_potato; public static final Item SPIDER_EYE = Items.spider_eye; @@ -55,7 +59,7 @@ public class ItemReference { public static final Item MILK = Items.milk_bucket; public static final Item BOOK = Items.book; - + public static boolean isDye(ItemStack stack, int color) { if (stack == null) return false; switch (color) { @@ -86,11 +90,15 @@ public static int getStackDyeColor(ItemStack stack) { } return -1; } - + public static ItemStack getDye(int dmg) { - return new ItemStack(TFCItems.dye, 1, dmg); + if(isTFCLoaded) { + return new ItemStack(TFCItems.dye, 1, dmg); + } else { + return new ItemStack(Items.dye, 1, dmg); + } } - + public static boolean isHarvestTool(ItemStack stack) { if (stack == null) return false; Item item = stack.getItem(); diff --git a/Pistronics2-1.7.10-0.6.4-java/letiu/pistronics/recipes/PShapelessRecipe.java b/Pistronics2-1.7.10-0.6.4-java/letiu/pistronics/recipes/PShapelessRecipe.java index 82c4667..7e26448 100644 --- a/Pistronics2-1.7.10-0.6.4-java/letiu/pistronics/recipes/PShapelessRecipe.java +++ b/Pistronics2-1.7.10-0.6.4-java/letiu/pistronics/recipes/PShapelessRecipe.java @@ -63,6 +63,7 @@ public boolean matches(InventoryCrafting inv) { for (int k = 0; k < ingredients.size(); k++) { if (!foundIngredients[k] && CompareUtil.compare(ingredients.get(k), inv.getStackInSlot(i))) { foundIngredients[k] = foundMatch = true; + break; } } if (!foundMatch && (inv.getStackInSlot(i) != null)) return false; diff --git a/Pistronics2-1.7.10-0.6.4-java/letiu/pistronics/tiles/TileMotion.java b/Pistronics2-1.7.10-0.6.4-java/letiu/pistronics/tiles/TileMotion.java new file mode 100644 index 0000000..aeb7d83 --- /dev/null +++ b/Pistronics2-1.7.10-0.6.4-java/letiu/pistronics/tiles/TileMotion.java @@ -0,0 +1,398 @@ +package letiu.pistronics.tiles; + +import java.util.Iterator; +import java.util.List; +import letiu.modbase.util.BlockItemUtil; +import letiu.modbase.util.NBTUtil; +import letiu.modbase.util.WorldUtil; +import letiu.pistronics.data.PBlock; +import letiu.pistronics.data.PTile; +import letiu.pistronics.piston.ControllerData; +import letiu.pistronics.piston.ControllerRegistry; +import letiu.pistronics.piston.ISpecialRotator; +import letiu.pistronics.piston.MoveData; +import letiu.pistronics.piston.SystemController; +import letiu.pistronics.render.PRenderManager; +import letiu.pistronics.render.PTileRenderer; +import letiu.pistronics.util.BlockProxy; +import letiu.pistronics.util.RotateUtil; +import letiu.pistronics.util.Vector3; +import net.minecraft.entity.Entity; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.Facing; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class TileMotion extends TileElementHolder implements ISpecialRenderTile, IMover { + + public ControllerData ctrData = new ControllerData(); + + private NBTTagCompound tempNBTCompound = null; + + public void update() { + if (this.ctrData.controller == null) + this.ctrData.controller = new SystemController(new MoveData()); + + this.ctrData.updateController(); + MoveData moveData = this.ctrData.controller.getMoveData(); + + if (moveData.isMoving()) + pushEntities(); + + if (moveData.isDone()) + if (moveData.isMoving()) { + pushEntitiesFinal(); + loadBlock(); + postMove(); + } else if (moveData.isRotating()) { + loadBlock(); + postRotate(); + } + } + + @Override + public void setProgress(float progress) {} + + public AxisAlignedBB getBoxForPush(float pushSpace) { + AxisAlignedBB box; + MoveData moveData = this.ctrData.controller.getMoveData(); + World world = this.tileEntity.getWorldObj(); + int x = this.tileEntity.xCoord; + int y = this.tileEntity.yCoord; + int z = this.tileEntity.zCoord; + if (getPElement() instanceof letiu.pistronics.blocks.BPartblock) { + box = AxisAlignedBB.getBoundingBox(x, y, z, (x + 1), (y + 1), (z + 1)); + } else { + box = BlockItemUtil.getBoundingBox(world, x, y, z, this.element); + if (box == null) + box = AxisAlignedBB.getBoundingBox(x, y, z, (x + 1), (y + 1), (z + 1)); + } + switch (moveData.moveDir) { + case 0: + box.maxY = (y + 1); + break; + case 1: + box.minY = y; + break; + case 2: + box.maxZ = (z + 1); + break; + case 3: + box.minZ = z; + break; + case 4: + box.maxX = (x + 1); + break; + case 5: + box.minX = x; + break; + } + float antiProgress = 1.0F - moveData.progress + pushSpace; + return box.getOffsetBoundingBox((antiProgress * Facing.offsetsXForSide[moveData.moveDir]), (antiProgress * Facing.offsetsYForSide[moveData.moveDir]), (antiProgress * Facing.offsetsZForSide[moveData.moveDir])); + } + + private void pushEntities() { + MoveData moveData = this.ctrData.controller.getMoveData(); + World world = this.tileEntity.getWorldObj(); + int x = this.tileEntity.xCoord; + int y = this.tileEntity.yCoord; + int z = this.tileEntity.zCoord; + float moveAmt = 1.0F * moveData.moveSpeed; + PBlock block = WorldUtil.getPBlock((IBlockAccess)world, x + Facing.offsetsXForSide[moveData.moveDir], y + Facing.offsetsYForSide[moveData.moveDir], z + Facing.offsetsZForSide[moveData.moveDir]); + if (block != null && block instanceof letiu.pistronics.blocks.BMotionblock) { + List list = this.tileEntity.getWorldObj().getEntitiesWithinAABBExcludingEntity((Entity)null, AxisAlignedBB.getBoundingBox(x, y, z, (x + 1), (y + 1), (z + 1))); + Iterator itr = list.iterator(); + while (itr.hasNext()) { + Entity entity = itr.next(); + double vX = 0.1D * (entity.posX - x + 0.5D); + double vY = 0.1D * (entity.posY - y + 0.5D); + double vZ = 0.1D * (entity.posZ - z + 0.5D); + entity.motionX = vX; + entity.motionY = vY; + entity.motionZ = vZ; + } + } else { + List list = this.tileEntity.getWorldObj().getEntitiesWithinAABBExcludingEntity((Entity)null, getBoxForPush(0.25F)); + Iterator itr = list.iterator(); + while (itr.hasNext()) { + Entity entity = itr.next(); + entity.moveEntity((moveAmt * Facing.offsetsXForSide[moveData.moveDir]), (moveAmt * Facing.offsetsYForSide[moveData.moveDir]), (moveAmt * Facing.offsetsZForSide[moveData.moveDir])); + switch (moveData.moveDir) { + case 0: + if (entity.motionY > 0.0D) + entity.motionY = 0.0D; + case 1: + if (entity.motionY < 0.0D) + entity.motionY = 0.0D; + case 2: + if (entity.motionZ > 0.0D) + entity.motionZ = 0.0D; + case 3: + if (entity.motionZ < 0.0D) + entity.motionZ = 0.0D; + case 4: + if (entity.motionX > 0.0D) + entity.motionX = 0.0D; + case 5: + if (entity.motionX < 0.0D) + entity.motionX = 0.0D; + } + } + } + } + + private void pushEntitiesFinal() { + MoveData moveData = this.ctrData.controller.getMoveData(); + List list = this.tileEntity.getWorldObj().getEntitiesWithinAABBExcludingEntity((Entity)null, getBoxForPush(0.0F)); + Iterator itr = list.iterator(); + while (itr.hasNext()) { + Entity entity = itr.next(); + switch (moveData.moveDir) { + case 1: + entity.posY = Math.ceil(entity.posY); + entity.motionY = 0.25D; + case 2: + entity.motionZ = -0.25D; + case 3: + entity.motionZ = 0.25D; + case 4: + entity.motionX = -0.25D; + case 5: + entity.motionX = 0.25D; + } + } + } + + public boolean tryToMoveOn() { + MoveData moveData = this.ctrData.controller.getMoveData(); + int x = this.tileEntity.xCoord + Facing.offsetsXForSide[moveData.moveDir]; + int y = this.tileEntity.yCoord + Facing.offsetsYForSide[moveData.moveDir]; + int z = this.tileEntity.zCoord + Facing.offsetsZForSide[moveData.moveDir]; + PTile tile = WorldUtil.getPTile((IBlockAccess)this.tileEntity.getWorldObj(), x, y, z); + if (tile != null && tile instanceof TileMotion) { + moveData.progress = 0.0F; + NBTTagCompound nbt = new NBTTagCompound(); + writeToNBT(nbt); + tile.readFromNBT(nbt); + moveData.moveDir = -1; + this.element = null; + return true; + } + return false; + } + + public String getKey() { + return "tlMotion"; + } + + public PTileRenderer getRenderer() { + return PRenderManager.motionRenderer; + } + + public int getRotateDir() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return moveData.rotateDir; + } + + public int getMoveDir() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return moveData.moveDir; + } + + public float getAngle() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return moveData.angle; + } + + public float getProgress() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return moveData.progress; + } + + public float getAngleForRender(float ticktime) { + MoveData moveData = this.ctrData.controller.getMoveData(); + if (ticktime > 1.0F) + ticktime = 1.0F; + return moveData.angle + moveData.rotateSpeed * ticktime - 90.0F; + } + + public float getProgressForRender(float ticktime) { + MoveData moveData = this.ctrData.controller.getMoveData(); + if (ticktime > 1.0F) + ticktime = 1.0F; + return moveData.progress + moveData.moveSpeed * ticktime; + } + + public float getRotateSpeed() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return moveData.rotateSpeed; + } + + public float getMoveSpeed() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return moveData.moveSpeed; + } + + public Vector3 getRotatePoint() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return moveData.rotatePoint; + } + + public boolean isRotating() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return (moveData.rotateDir != -1 && moveData.rotateSpeed != 0.0F); + } + + public boolean isMoving() { + MoveData moveData = this.ctrData.controller.getMoveData(); + return (moveData.moveDir != -1 && moveData.moveSpeed != 0.0F); + } + + public boolean isInMotion() { + return (isMoving() || isRotating()); + } + + public void rotate(int rotateDir, float speed) { + rotate(rotateDir, speed, new Vector3(this.tileEntity.xCoord, this.tileEntity.yCoord, this.tileEntity.zCoord)); + } + + public void rotate(int rotateDir, float speed, Vector3 rotatePoint) { + if (this.ctrData.controller == null) { + MoveData moveData = new MoveData(rotateDir, speed, rotatePoint); + if (this.ctrData.key != null && !this.ctrData.key.equals("default")) { + this.ctrData.controller = ControllerRegistry.create(this.ctrData.key, moveData, (this.tileEntity.getWorldObj()).isRemote); + this.ctrData.key = this.ctrData.controller.getKey(); + } else { + SystemController ctr = new SystemController(moveData); + ControllerRegistry.register(ctr, new BlockProxy((TileEntity)this.tileEntity)); + this.ctrData.controller = ctr; + this.ctrData.key = ctr.getKey(); + } + } + } + + public void move(int moveDir, float speed) { + if (this.ctrData.controller == null) { + MoveData moveData = new MoveData(moveDir, speed); + if (this.ctrData.key != null && !this.ctrData.key.equals("default")) { + this.ctrData.controller = ControllerRegistry.create(this.ctrData.key, moveData, (this.tileEntity.getWorldObj()).isRemote); + this.ctrData.key = this.ctrData.controller.getKey(); + } else { + SystemController ctr = new SystemController(moveData); + ControllerRegistry.register(ctr, new BlockProxy((TileEntity)this.tileEntity)); + this.ctrData.controller = ctr; + this.ctrData.key = ctr.getKey(); + } + } + } + + public void loadBlock() { + int x = this.tileEntity.xCoord, y = this.tileEntity.yCoord, z = this.tileEntity.zCoord; + World world = this.tileEntity.getWorldObj(); + if (this.element != null) { + WorldUtil.setBlock(world, x, y, z, this.element, this.elementMeta, 5); + if (this.elementTile != null) { + TileEntity tile = WorldUtil.getTileEntity((IBlockAccess)world, x, y, z); + NBTTagCompound nbt = NBTUtil.getNewCompound(); + this.elementTile.writeToNBT(nbt); + if (tile == null) { + this.elementTile.setWorldObj(world); + this.elementTile.xCoord = x; + this.elementTile.yCoord = y; + this.elementTile.zCoord = z; + WorldUtil.setTileEntity(world, x, y, z, this.elementTile); + WorldUtil.setBlock(world, x, y, z, this.element, this.elementMeta, 5); + } + tile = WorldUtil.getTileEntity((IBlockAccess)world, x, y, z); + if (tile != null) { + tile.readFromNBT(nbt); + tile.setWorldObj(world); + tile.xCoord = x; + tile.yCoord = y; + tile.zCoord = z; + } + } + } else { + WorldUtil.setBlockToAir(world, x, y, z); + } + WorldUtil.updateBlock(world, x, y, z); + } + + private void postRotate() { + MoveData moveData = this.ctrData.controller.getMoveData(); + int x = this.tileEntity.xCoord, y = this.tileEntity.yCoord, z = this.tileEntity.zCoord; + World world = this.tileEntity.getWorldObj(); + PBlock block = WorldUtil.getPBlock((IBlockAccess)world, x, y, z); + if (block instanceof ISpecialRotator) { + ((ISpecialRotator)block).postRotate(world, x, y, z, moveData.rotateDir, moveData.rotateSpeed, moveData.rotatePoint); + } else { + RotateUtil.rotateVanillaBlocks(world, x, y, z, this.elementMeta, moveData.rotateDir); + } + } + + private void postMove() { + WorldUtil.setBlockMeta(this.tileEntity.getWorldObj(), this.tileEntity.xCoord, this.tileEntity.yCoord, this.tileEntity.zCoord, this.elementMeta, 3); + } + + public float getOffsetX(float ticktime) { + MoveData moveData = this.ctrData.controller.getMoveData(); + if (!isMoving()) + return 0.0F; + return Facing.offsetsXForSide[moveData.moveDir ^ 0x1] * (1.0F - getProgressForRender(ticktime)); + } + + public float getOffsetY(float ticktime) { + MoveData moveData = this.ctrData.controller.getMoveData(); + if (!isMoving()) + return 0.0F; + return Facing.offsetsYForSide[moveData.moveDir ^ 0x1] * (1.0F - getProgressForRender(ticktime)); + } + + public float getOffsetZ(float ticktime) { + MoveData moveData = this.ctrData.controller.getMoveData(); + if (!isMoving()) + return 0.0F; + return Facing.offsetsZForSide[moveData.moveDir ^ 0x1] * (1.0F - getProgressForRender(ticktime)); + } + + public void writeToNBT(NBTTagCompound tagCompound) { + super.writeToNBT(tagCompound); + if (this.ctrData.key == null && this.ctrData.controller != null) + this.ctrData.key = this.ctrData.controller.getKey(); + if (this.ctrData.key == null) + this.ctrData.key = "default"; + tagCompound.setString("ctrKey", this.ctrData.key); + if (this.ctrData.controller != null) { + MoveData moveData = this.ctrData.controller.getMoveData(); + moveData.writeToNBT(tagCompound); + } + } + + public void readFromNBT(NBTTagCompound tagCompound) { + super.readFromNBT(tagCompound); + this.ctrData.key = tagCompound.getString("ctrKey"); + if (this.ctrData.controller == null && !this.ctrData.key.equals("default")) { + MoveData moveData = new MoveData(tagCompound); + if (this.tileEntity != null && this.tileEntity.getWorldObj() != null) { + boolean isRemote = (this.tileEntity.getWorldObj()).isRemote; + this.ctrData.controller = ControllerRegistry.create(this.ctrData.key, moveData, isRemote); + } + } + this.tempNBTCompound = tagCompound; + } + + public void postLoad() { + super.postLoad(); + if (this.ctrData.controller == null && this.tempNBTCompound != null) { + MoveData moveData = new MoveData(this.tempNBTCompound); + if (this.tileEntity != null && this.tileEntity.getWorldObj() != null) { + boolean isRemote = (this.tileEntity.getWorldObj()).isRemote; + this.ctrData.controller = ControllerRegistry.create(this.ctrData.key, moveData, isRemote); + } + } + } + } + + diff --git a/Pistronics2-1.7.10-0.6.4/letiu/modbase/util/ItemReference.class b/Pistronics2-1.7.10-0.6.4/letiu/modbase/util/ItemReference.class index ea85defa4e51fd78702ab8f02354d60a08404021..c36899858ae358a5f5d59cc0ed41e0ad4ba12bc8 100644 GIT binary patch literal 6544 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 literal 6378 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 Hh^+qyF{hU| diff --git a/Pistronics2-1.7.10-0.6.4/letiu/pistronics/recipes/PShapelessRecipe.class b/Pistronics2-1.7.10-0.6.4/letiu/pistronics/recipes/PShapelessRecipe.class index 8745e0e51c227c1ec243f6bd1d03ea63e600b053..1d107d2ae19180583c7fa66bc04512b8f82acc5d 100644 GIT binary patch delta 252 zcmXYrJxc>o5Jk`W-V@x70U;X~!rIA#(ZFl3!;UU_^)&#Hgjjr9k}-``ix#u-&WC#0}per6f@Ef-BfFFIioe8qpViegy!EH zus9!@N}pMG?-!H29J*t5d&or3c*CFXQ1_WE#~FKH81>v!0-xNwpQJ17bAVx*CWjnJ zXiny_FvSIhKUa-v$VVhP+D_==;d8?&4aT?>x=h|J1f{sjChP1{L0^SP`jlWVziQjciEfmWs^$t5K(ke26 z`PVvBCIVA!Gn(AHg)vVCy&LK6ma!gxzXRRIFBenxzA);!r35}DA8sk0WuF5KgRFAM zktF7X91ByNlkcgj`-3<_som~`1{N+ioU(?^h0q8;nev7v7pb!(`aEYWbHxg`Qk%qF xiffqujGRNw%J3~~I%#?jm34{Spu{FsS&rE1SqHE)@(#Ac%nu_Hcr6EP%pbI>GvfdN diff --git a/Pistronics2-1.7.10-0.6.4/letiu/pistronics/tiles/TileMotion.class b/Pistronics2-1.7.10-0.6.4/letiu/pistronics/tiles/TileMotion.class new file mode 100644 index 0000000000000000000000000000000000000000..1ec3ee916509f7818625a66820349bb958b0a6a0 GIT binary patch literal 12841 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 G?7soGwj^Qz literal 0 HcmV?d00001