From 543dd059af7937459c4c356e7b66e546258868bd Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sun, 2 Jun 2024 18:28:33 -0400 Subject: [PATCH 01/10] drone improvements part 1 fixed the dumb idiot logic that got it stuck all the time --- .../com/hbm/entity/item/EntityDroneBase.java | 2 +- .../hbm/entity/item/EntityRequestDrone.java | 130 ++++++++++-------- 2 files changed, 76 insertions(+), 56 deletions(-) diff --git a/src/main/java/com/hbm/entity/item/EntityDroneBase.java b/src/main/java/com/hbm/entity/item/EntityDroneBase.java index 5cc0e4e97..dc6af6943 100644 --- a/src/main/java/com/hbm/entity/item/EntityDroneBase.java +++ b/src/main/java/com/hbm/entity/item/EntityDroneBase.java @@ -29,7 +29,7 @@ public abstract class EntityDroneBase extends Entity { public void setTarget(double x, double y, double z) { this.targetX = x; - this.targetY = y; + this.targetY = y + 1; this.targetZ = z; } diff --git a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java index 0b5294516..8674770af 100644 --- a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java @@ -17,6 +17,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -61,78 +62,97 @@ public class EntityRequestDrone extends EntityDroneBase { } else if(next instanceof AStack && heldItem == null) { AStack aStack = (AStack) next; - TileEntity tile = worldObj.getTileEntity((int) Math.floor(posX), (int) Math.floor(posY - 1), (int) Math.floor(posZ)); - - if(tile instanceof TileEntityDroneProvider) { - TileEntityDroneProvider provider = (TileEntityDroneProvider) tile; - - for(int i = 0; i < provider.slots.length; i++) { - ItemStack stack = provider.slots[i]; - - if(stack != null && aStack.matchesRecipe(stack, true)) { - this.heldItem = stack.copy(); - this.setAppearance(1); - worldObj.playSoundEffect(posX, posY, posZ, "hbm:item.unpack", 0.5F, 0.75F); - provider.slots[i] = null; - provider.markDirty(); - break; + //to make DAMN sure this fuckin idiot doesnt miss the dock + Vec3 pos = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); + Vec3 nextPos = Vec3.createVectorHelper(this.posX, this.posY - 4, this.posZ); + MovingObjectPosition mop = this.worldObj.rayTraceBlocks(pos, nextPos); + + if (mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + + TileEntity tile = worldObj.getTileEntity(mop.blockX, mop.blockY, mop.blockZ); + if (tile instanceof TileEntityDroneProvider) { + TileEntityDroneProvider provider = (TileEntityDroneProvider) tile; + + for (int i = 0; i < provider.slots.length; i++) { + ItemStack stack = provider.slots[i]; + + if (stack != null && aStack.matchesRecipe(stack, true)) { + this.heldItem = stack.copy(); + this.setAppearance(1); + worldObj.playSoundEffect(posX, posY, posZ, "hbm:item.unpack", 0.5F, 0.75F); + provider.slots[i] = null; + provider.markDirty(); + break; + } } } } nextActionTimer = 5; } else if(next == DroneProgram.UNLOAD && this.heldItem != null) { - - TileEntity tile = worldObj.getTileEntity((int) Math.floor(posX), (int) Math.floor(posY - 1), (int) Math.floor(posZ)); - if(tile instanceof TileEntityDroneRequester) { - TileEntityDroneRequester requester = (TileEntityDroneRequester) tile; - - for(int i = 9; i < 18; i++) { - ItemStack stack = requester.slots[i]; - if(stack != null && stack.getItem() == heldItem.getItem() && stack.getItemDamage() == heldItem.getItemDamage()) { - int toTransfer = Math.min(stack.getMaxStackSize() - stack.stackSize, heldItem.stackSize); - requester.slots[i].stackSize += toTransfer; - this.heldItem.stackSize -= toTransfer; + Vec3 pos = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); + Vec3 nextPos = Vec3.createVectorHelper(this.posX, this.posY - 4, this.posZ); + MovingObjectPosition mop = this.worldObj.rayTraceBlocks(pos, nextPos); + + if (mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + + TileEntity tile = worldObj.getTileEntity(mop.blockX, mop.blockY, mop.blockZ); + if (tile instanceof TileEntityDroneRequester) { + TileEntityDroneRequester requester = (TileEntityDroneRequester) tile; + + for (int i = 9; i < 18; i++) { + ItemStack stack = requester.slots[i]; + if (stack != null && stack.getItem() == heldItem.getItem() && stack.getItemDamage() == heldItem.getItemDamage()) { + int toTransfer = Math.min(stack.getMaxStackSize() - stack.stackSize, heldItem.stackSize); + requester.slots[i].stackSize += toTransfer; + this.heldItem.stackSize -= toTransfer; + } } - } - - if(this.heldItem.stackSize <= 0) this.heldItem = null; - - if(this.heldItem != null) for(int i = 9; i < 18; i++) { - if(requester.slots[i] == null) { - requester.slots[i] = this.heldItem.copy(); - this.heldItem = null; - break; + + if (this.heldItem.stackSize <= 0) this.heldItem = null; + + if (this.heldItem != null) for (int i = 9; i < 18; i++) { + if (requester.slots[i] == null) { + requester.slots[i] = this.heldItem.copy(); + this.heldItem = null; + break; + } } + + if (this.heldItem == null) { + this.setAppearance(0); + worldObj.playSoundEffect(posX, posY, posZ, "hbm:item.unpack", 0.5F, 0.75F); + } + + requester.markDirty(); } - - if(this.heldItem == null) { - this.setAppearance(0); - worldObj.playSoundEffect(posX, posY, posZ, "hbm:item.unpack", 0.5F, 0.75F); - } - - requester.markDirty(); } nextActionTimer = 5; } else if(next == DroneProgram.DOCK) { - - TileEntity tile = worldObj.getTileEntity((int) Math.floor(posX), (int) Math.floor(posY - 1), (int) Math.floor(posZ)); - if(tile instanceof TileEntityDroneDock) { - TileEntityDroneDock dock = (TileEntityDroneDock) tile; - - for(int i = 0; i < dock.slots.length; i++) { - if(dock.slots[i] == null) { - this.setDead(); - dock.slots[i] = new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()); - this.worldObj.playSoundEffect(dock.xCoord + 0.5, dock.yCoord + 0.5, dock.zCoord + 0.5, "hbm:block.storageClose", 2.0F, 1.0F); - break; + Vec3 pos = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); + Vec3 nextPos = Vec3.createVectorHelper(this.posX, this.posY - 4, this.posZ); + MovingObjectPosition mop = this.worldObj.rayTraceBlocks(pos, nextPos); + + if (mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + + TileEntity tile = worldObj.getTileEntity(mop.blockX, mop.blockY, mop.blockZ); + if (tile instanceof TileEntityDroneDock) { + TileEntityDroneDock dock = (TileEntityDroneDock) tile; + + for (int i = 0; i < dock.slots.length; i++) { + if (dock.slots[i] == null) { + this.setDead(); + dock.slots[i] = new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()); + this.worldObj.playSoundEffect(dock.xCoord + 0.5, dock.yCoord + 0.5, dock.zCoord + 0.5, "hbm:block.storageClose", 2.0F, 1.0F); + break; + } } } } - - if(!this.isDead) { + if (!this.isDead) { this.setDead(); this.entityDropItem(new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()), 1F); } + } } } From dce3bf89374326af42f9f0ee93bf207340cf5a42 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sun, 2 Jun 2024 19:41:06 -0400 Subject: [PATCH 02/10] fixed logistics drones obliterating items from existance --- .../java/com/hbm/entity/item/EntityRequestDrone.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java index 8674770af..06bd44760 100644 --- a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java @@ -137,11 +137,16 @@ public class EntityRequestDrone extends EntityDroneBase { TileEntity tile = worldObj.getTileEntity(mop.blockX, mop.blockY, mop.blockZ); if (tile instanceof TileEntityDroneDock) { TileEntityDroneDock dock = (TileEntityDroneDock) tile; - + ItemStack drone = new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()); for (int i = 0; i < dock.slots.length; i++) { - if (dock.slots[i] == null) { + if (dock.slots[i] == null || (dock.slots[i].isItemEqual(drone) && dock.slots[i].stackSize < 64)) { this.setDead(); - dock.slots[i] = new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()); + if(heldItem != null){ + if(i != 9 && dock.slots[i + 1] != null){ + dock.slots[i + 1] = heldItem.copy(); + } + } + dock.slots[i] = drone.copy(); this.worldObj.playSoundEffect(dock.xCoord + 0.5, dock.yCoord + 0.5, dock.zCoord + 0.5, "hbm:block.storageClose", 2.0F, 1.0F); break; } @@ -150,6 +155,7 @@ public class EntityRequestDrone extends EntityDroneBase { } if (!this.isDead) { this.setDead(); + this.entityDropItem(heldItem, 1F); this.entityDropItem(new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()), 1F); } From d67bbe9c5303d9886ced02200d6bc749ddf32189 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sat, 8 Jun 2024 18:55:05 -0400 Subject: [PATCH 03/10] Transport drone visualization + fixed low angles for drones --- .../java/com/hbm/entity/item/EntityDroneBase.java | 6 ++++-- .../com/hbm/entity/item/EntityRequestDrone.java | 8 ++++++++ src/main/java/com/hbm/main/ClientProxy.java | 4 +++- .../tileentity/network/TileEntityDroneCrate.java | 13 ++++++++++++- .../tileentity/network/TileEntityDroneWaypoint.java | 12 +++++++++--- 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/hbm/entity/item/EntityDroneBase.java b/src/main/java/com/hbm/entity/item/EntityDroneBase.java index dc6af6943..f7d12a9e2 100644 --- a/src/main/java/com/hbm/entity/item/EntityDroneBase.java +++ b/src/main/java/com/hbm/entity/item/EntityDroneBase.java @@ -29,7 +29,7 @@ public abstract class EntityDroneBase extends Entity { public void setTarget(double x, double y, double z) { this.targetX = x; - this.targetY = y + 1; + this.targetY = y; this.targetZ = z; } @@ -112,7 +112,9 @@ public abstract class EntityDroneBase extends Entity { this.motionZ = dist.zCoord * speed; } } - + if(isCollidedHorizontally){ + motionY += 1; + } this.moveEntity(motionX, motionY, motionZ); } } diff --git a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java index 06bd44760..15922bd52 100644 --- a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java @@ -31,6 +31,14 @@ public class EntityRequestDrone extends EntityDroneBase { UNLOAD, DOCK } + @Override + public void setTarget(double x, double y, double z) { + this.targetX = x; + this.targetY = y + 1; + this.targetZ = z; + } + + public EntityRequestDrone(World world) { super(world); } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 4718a6332..db4bed1a1 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -1963,7 +1963,9 @@ public class ClientProxy extends ServerProxy { held == Item.getItemFromBlock(ModBlocks.drone_crate_provider) || held == Item.getItemFromBlock(ModBlocks.drone_crate_requester) || held == Item.getItemFromBlock(ModBlocks.drone_dock) || - held == Item.getItemFromBlock(ModBlocks.drone_waypoint_request)) { + held == Item.getItemFromBlock(ModBlocks.drone_waypoint_request) || + held == Item.getItemFromBlock(ModBlocks.drone_waypoint) || + held == ModItems.drone_linker) { double mX = data.getDouble("mX"); double mY = data.getDouble("mY"); double mZ = data.getDouble("mZ"); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java index 8a304914c..280c16fd0 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java @@ -12,6 +12,7 @@ import com.hbm.inventory.gui.GUIDroneCrate; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.ParticleUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import api.hbm.fluid.IFluidStandardTransceiver; @@ -51,7 +52,7 @@ public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIP public void updateEntity() { if(!worldObj.isRemote) { - + BlockPos pos = getCoord(); this.tank.setType(18, slots); if(sendingMode && !itemType && worldObj.getTotalWorldTime() % 20 == 0) { @@ -75,7 +76,13 @@ public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIP if(!sendingMode && !itemType) unloadFluid(drone); } } + + ParticleUtil.spawnDroneLine(worldObj, + pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, + (nextX - pos.getX()), (nextY - pos.getY()), (nextZ - pos.getZ()), 0x00ffff); } + + NBTTagCompound data = new NBTTagCompound(); data.setIntArray("pos", new int[] {nextX, nextY, nextZ}); @@ -218,6 +225,10 @@ public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIP this.itemType = nbt.getBoolean("type"); tank.readFromNBT(nbt, "t"); } + + public BlockPos getCoord() { + return new BlockPos(xCoord, yCoord + 1, zCoord); + } @Override public void writeToNBT(NBTTagCompound nbt) { diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneWaypoint.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneWaypoint.java index f14fb0f99..15e0881ee 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneWaypoint.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneWaypoint.java @@ -4,6 +4,7 @@ import java.util.List; import com.hbm.entity.item.EntityDeliveryDrone; import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.util.ParticleUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import net.minecraft.nbt.NBTTagCompound; @@ -22,11 +23,9 @@ public class TileEntityDroneWaypoint extends TileEntity implements INBTPacketRec @Override public void updateEntity() { - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); if(!worldObj.isRemote) { - if(nextY != -1) { List drones = worldObj.getEntitiesWithinAABB(EntityDeliveryDrone.class, AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 1, zCoord + 1).offset(dir.offsetX * height, dir.offsetY * height, dir.offsetZ * height)); for(EntityDeliveryDrone drone : drones) { @@ -41,13 +40,17 @@ public class TileEntityDroneWaypoint extends TileEntity implements INBTPacketRec data.setIntArray("pos", new int[] {nextX, nextY, nextZ}); INBTPacketReceiver.networkPack(this, data, 15); } else { - + BlockPos pos = getCoord(dir); if(nextY != -1 && worldObj.getTotalWorldTime() % 2 == 0) { double x = xCoord + height * dir.offsetX + 0.5; double y = yCoord + height * dir.offsetY + 0.5; double z = zCoord + height * dir.offsetZ + 0.5; worldObj.spawnParticle("reddust", x, y, z, 0, 0, 0); + + ParticleUtil.spawnDroneLine(worldObj, + pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, + (nextX - pos.getX()), (nextY - pos.getY()), (nextZ - pos.getZ()), 0x0000ff); } } } @@ -98,4 +101,7 @@ public class TileEntityDroneWaypoint extends TileEntity implements INBTPacketRec nbt.setInteger("height", height); nbt.setIntArray("pos", new int[] {nextX, nextY, nextZ}); } + public BlockPos getCoord(ForgeDirection dir) { + return new BlockPos(xCoord + height * dir.offsetX + 0.5, yCoord + height * dir.offsetY + 0.5, zCoord + height * dir.offsetZ + 0.5); + } } From 3195cf650e12b867fef6c3f6a9dcbf337a14144a Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sun, 9 Jun 2024 18:03:39 -0400 Subject: [PATCH 04/10] anti piracy feature begone --- .../hbm/entity/item/EntityDeliveryDrone.java | 27 +++++++++++++++++++ .../hbm/entity/item/EntityRequestDrone.java | 13 +++++++++ 2 files changed, 40 insertions(+) diff --git a/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java b/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java index 8d1f1a01a..26a906115 100644 --- a/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java @@ -4,8 +4,11 @@ import com.hbm.entity.logic.IChunkLoader; import com.hbm.inventory.FluidStack; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; +import com.hbm.items.ModItems; +import com.hbm.items.tool.ItemDrone; import com.hbm.main.MainRegistry; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -29,6 +32,30 @@ public class EntityDeliveryDrone extends EntityDroneBase implements IInventory, super(world); } + @Override + public boolean hitByEntity(Entity attacker) { + + if(attacker instanceof EntityPlayer && !worldObj.isRemote) { + this.setDead(); + for (ItemStack stack : slots) { + if(stack != null) + this.entityDropItem(stack, 1F); + } + int meta = 0; + + //whether it is an express drone + if(this.dataWatcher.getWatchableObjectByte(11) == 1) + meta = 2; + + if(chunkLoading) + meta += 1; + + this.entityDropItem(new ItemStack(ModItems.drone, 1, meta), 1F); + } + + return false; + } + @Override protected void entityInit() { super.entityInit(); diff --git a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java index 15922bd52..c451f6788 100644 --- a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java @@ -13,6 +13,8 @@ import com.hbm.tileentity.network.TileEntityDroneProvider; import com.hbm.tileentity.network.TileEntityDroneRequester; import com.hbm.util.fauxpointtwelve.BlockPos; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -38,7 +40,18 @@ public class EntityRequestDrone extends EntityDroneBase { this.targetZ = z; } + @Override + public boolean hitByEntity(Entity attacker) { + if(attacker instanceof EntityPlayer && !worldObj.isRemote) { + this.setDead(); + if(heldItem != null) + this.entityDropItem(heldItem, 1F); + this.entityDropItem(new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()), 1F); + } + + return false; + } public EntityRequestDrone(World world) { super(world); } From 9481dd490bc11a6f4dd2a574aa3dd52483c4c576 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sat, 15 Jun 2024 12:56:34 -0400 Subject: [PATCH 05/10] Drone viability improvements increased drone speed, tweaked drone recipes --- .../hbm/entity/item/EntityDeliveryDrone.java | 2 +- .../hbm/entity/item/EntityRequestDrone.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 22 +++++++++++-------- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java b/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java index 26a906115..a62b02d64 100644 --- a/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java @@ -80,7 +80,7 @@ public class EntityDeliveryDrone extends EntityDroneBase implements IInventory, @Override public double getSpeed() { - return this.dataWatcher.getWatchableObjectByte(11) == 1 ? 0.375 : 0.125; + return this.dataWatcher.getWatchableObjectByte(11) == 1 ? 0.375 * 3 : 0.375; } @Override diff --git a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java index c451f6788..fd2ac6e7d 100644 --- a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java @@ -188,7 +188,7 @@ public class EntityRequestDrone extends EntityDroneBase { @Override public double getSpeed() { - return 0.5D; + return 0.6D; } @Override diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 7758ffcb8..b44800e11 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -986,22 +986,26 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.radar_screen), new Object[] { "PCP", "SRS", "PCP", 'P', ANY_PLASTIC.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'S', STEEL.plate(), 'R', ModItems.crt_display }); addRecipeAuto(new ItemStack(ModItems.radar_linker), new Object[] { "S", "C", "P", 'S', ModItems.crt_display, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'P', STEEL.plate() }); - addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL.ordinal()), new Object[] { "PPP", "HCH", " B ", 'P', ANY_PLASTIC.ingot(), 'H', STEEL.shell(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE), 'B', ModBlocks.crate_steel }); + addRecipeAuto(new ItemStack(ModItems.drone, 2, EnumDroneType.PATROL.ordinal()), new Object[] { "PPP", "HCH", " H ", 'P', ANY_PLASTIC.ingot(), 'H', STEEL.shell(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) }); addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_CHUNKLOADING.ordinal()), new Object[] { "E", "D", 'E', Items.ender_pearl, 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL.ordinal()) }); - addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()), new Object[] { " P ", "KDK", " P ", 'P', TI.plateWelded(), 'K', Fluids.KEROSENE.getDict(1_000), 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL.ordinal()) }); + addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()), new Object[] { " P ", "KDK", " P ", 'P', TI.plateCast(), 'K', Fluids.KEROSENE.getDict(1_000), 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL.ordinal()) }); addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS_CHUNKLOADING.ordinal()), new Object[] { "E", "D", 'E', Items.ender_pearl, 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()) }); - addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS_CHUNKLOADING.ordinal()), new Object[] { " P ", "KDK", " P ", 'P', TI.plateWelded(), 'K', Fluids.KEROSENE.getDict(1_000), 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_CHUNKLOADING.ordinal()) }); + addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS_CHUNKLOADING.ordinal()), new Object[] { " P ", "KDK", " P ", 'P', TI.plateCast(), 'K', Fluids.KEROSENE.getDict(1_000), 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_CHUNKLOADING.ordinal()) }); addShapelessAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL.ordinal()), new Object[] { new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_CHUNKLOADING.ordinal()) }); addShapelessAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()), new Object[] { new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS_CHUNKLOADING.ordinal()) }); addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()), new Object[] { "E", "D", 'E', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()) }); addRecipeAuto(new ItemStack(ModItems.drone_linker), new Object[] { "T", "C", 'T', ModBlocks.drone_waypoint, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); - addRecipeAuto(new ItemStack(ModBlocks.drone_waypoint, 4), new Object[] { "G", "T", "C", 'G', KEY_GREEN, 'T', Blocks.redstone_torch, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); - addRecipeAuto(new ItemStack(ModBlocks.drone_crate), new Object[] { "T", "C", 'T', ModBlocks.drone_waypoint, 'C', ModBlocks.crate_steel }); - addRecipeAuto(new ItemStack(ModBlocks.drone_waypoint_request, 4), new Object[] { "G", "T", "C", 'G', KEY_BLUE, 'T', Blocks.redstone_torch, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); - addRecipeAuto(new ItemStack(ModBlocks.drone_crate), new Object[] { "T", "C", "B", 'T', ModBlocks.drone_waypoint_request, 'C', ModBlocks.crate_steel, 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); - addRecipeAuto(new ItemStack(ModBlocks.drone_crate_requester), new Object[] { "T", "C", "B", 'T', ModBlocks.drone_waypoint_request, 'C', ModBlocks.crate_steel, 'B', KEY_YELLOW }); - addRecipeAuto(new ItemStack(ModBlocks.drone_crate_provider), new Object[] { "T", "C", "B", 'T', ModBlocks.drone_waypoint_request, 'C', ModBlocks.crate_steel, 'B', KEY_ORANGE }); + + addRecipeAuto(new ItemStack(ModBlocks.drone_waypoint, 8), new Object[] { "G", "T", "C", 'G', KEY_GREEN, 'T', Blocks.redstone_torch, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); + addShapelessAuto(new ItemStack(ModBlocks.drone_waypoint_request), new Object[] { new ItemStack(ModBlocks.drone_waypoint)}); + addShapelessAuto(new ItemStack(ModBlocks.drone_waypoint), new Object[] { new ItemStack(ModBlocks.drone_waypoint_request)}); + + addRecipeAuto(new ItemStack(ModBlocks.drone_crate, 2), new Object[] { "T", "C", 'T', ModBlocks.drone_waypoint, 'C', ModBlocks.crate_steel }); + addRecipeAuto(new ItemStack(ModBlocks.drone_crate_provider, 4), new Object[] { "T", "C", "B", 'T', ModBlocks.drone_waypoint_request, 'C', ModBlocks.crate_steel, 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG) }); + addShapelessAuto(new ItemStack(ModBlocks.drone_crate_requester), new Object[] { new ItemStack(ModBlocks.drone_crate_provider)}); + addShapelessAuto(new ItemStack(ModBlocks.drone_crate_provider), new Object[] { new ItemStack(ModBlocks.drone_crate_requester)}); + addRecipeAuto(new ItemStack(ModBlocks.drone_dock), new Object[] { "T", "C", "B", 'T', ModBlocks.drone_waypoint_request, 'C', ModBlocks.crate_steel, 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED) }); addRecipeAuto(new ItemStack(ModItems.ball_resin), new Object[] { "DD", "DD", 'D', Blocks.yellow_flower }); From 071d3603212285531eb91b0406c671811bee1810 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sun, 16 Jun 2024 18:37:29 -0400 Subject: [PATCH 06/10] no delay for spawning, woo --- .../com/hbm/entity/item/EntityRequestDrone.java | 2 +- .../tileentity/network/TileEntityDroneDock.java | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java index fd2ac6e7d..9ff44e9bb 100644 --- a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java @@ -188,7 +188,7 @@ public class EntityRequestDrone extends EntityDroneBase { @Override public double getSpeed() { - return 0.6D; + return 0.8D; } @Override diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java index 82b6b93f0..747433a4d 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java @@ -43,15 +43,25 @@ public class TileEntityDroneDock extends TileEntityRequestNetworkContainer imple public void updateEntity() { super.updateEntity(); - if(!worldObj.isRemote && worldObj.getTotalWorldTime() % 100 == 0 && this.hasDrone()) { + if(!worldObj.isRemote && this.hasDrone()) { // grab all nodes in a 5 chunk radius HashedSet localNodes = this.getAllLocalNodes(worldObj, xCoord, zCoord, 5); List requests = new ArrayList(); List offers = new ArrayList(); - + + PathNode prevNode = null; + int delay = 0; for(PathNode local : localNodes) { - if(local instanceof RequestNode) requests.add((RequestNode) local); + if(local instanceof RequestNode) { + if(local != prevNode || delay > 100) { + requests.add((RequestNode) local); + prevNode = local; + delay = 0; + } + delay++; + + } if(local instanceof OfferNode) offers.add((OfferNode) local); } From 3596cfedb0c08865a65346a00bdb508b0de9c923 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sun, 16 Jun 2024 18:43:58 -0400 Subject: [PATCH 07/10] nah nvm no recipe tweaks --- .../java/com/hbm/main/CraftingManager.java | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index b44800e11..7758ffcb8 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -986,26 +986,22 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.radar_screen), new Object[] { "PCP", "SRS", "PCP", 'P', ANY_PLASTIC.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'S', STEEL.plate(), 'R', ModItems.crt_display }); addRecipeAuto(new ItemStack(ModItems.radar_linker), new Object[] { "S", "C", "P", 'S', ModItems.crt_display, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'P', STEEL.plate() }); - addRecipeAuto(new ItemStack(ModItems.drone, 2, EnumDroneType.PATROL.ordinal()), new Object[] { "PPP", "HCH", " H ", 'P', ANY_PLASTIC.ingot(), 'H', STEEL.shell(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) }); + addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL.ordinal()), new Object[] { "PPP", "HCH", " B ", 'P', ANY_PLASTIC.ingot(), 'H', STEEL.shell(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE), 'B', ModBlocks.crate_steel }); addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_CHUNKLOADING.ordinal()), new Object[] { "E", "D", 'E', Items.ender_pearl, 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL.ordinal()) }); - addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()), new Object[] { " P ", "KDK", " P ", 'P', TI.plateCast(), 'K', Fluids.KEROSENE.getDict(1_000), 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL.ordinal()) }); + addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()), new Object[] { " P ", "KDK", " P ", 'P', TI.plateWelded(), 'K', Fluids.KEROSENE.getDict(1_000), 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL.ordinal()) }); addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS_CHUNKLOADING.ordinal()), new Object[] { "E", "D", 'E', Items.ender_pearl, 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()) }); - addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS_CHUNKLOADING.ordinal()), new Object[] { " P ", "KDK", " P ", 'P', TI.plateCast(), 'K', Fluids.KEROSENE.getDict(1_000), 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_CHUNKLOADING.ordinal()) }); + addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS_CHUNKLOADING.ordinal()), new Object[] { " P ", "KDK", " P ", 'P', TI.plateWelded(), 'K', Fluids.KEROSENE.getDict(1_000), 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_CHUNKLOADING.ordinal()) }); addShapelessAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL.ordinal()), new Object[] { new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_CHUNKLOADING.ordinal()) }); addShapelessAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()), new Object[] { new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS_CHUNKLOADING.ordinal()) }); addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()), new Object[] { "E", "D", 'E', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()) }); addRecipeAuto(new ItemStack(ModItems.drone_linker), new Object[] { "T", "C", 'T', ModBlocks.drone_waypoint, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); - - addRecipeAuto(new ItemStack(ModBlocks.drone_waypoint, 8), new Object[] { "G", "T", "C", 'G', KEY_GREEN, 'T', Blocks.redstone_torch, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); - addShapelessAuto(new ItemStack(ModBlocks.drone_waypoint_request), new Object[] { new ItemStack(ModBlocks.drone_waypoint)}); - addShapelessAuto(new ItemStack(ModBlocks.drone_waypoint), new Object[] { new ItemStack(ModBlocks.drone_waypoint_request)}); - - addRecipeAuto(new ItemStack(ModBlocks.drone_crate, 2), new Object[] { "T", "C", 'T', ModBlocks.drone_waypoint, 'C', ModBlocks.crate_steel }); - addRecipeAuto(new ItemStack(ModBlocks.drone_crate_provider, 4), new Object[] { "T", "C", "B", 'T', ModBlocks.drone_waypoint_request, 'C', ModBlocks.crate_steel, 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG) }); - addShapelessAuto(new ItemStack(ModBlocks.drone_crate_requester), new Object[] { new ItemStack(ModBlocks.drone_crate_provider)}); - addShapelessAuto(new ItemStack(ModBlocks.drone_crate_provider), new Object[] { new ItemStack(ModBlocks.drone_crate_requester)}); - + addRecipeAuto(new ItemStack(ModBlocks.drone_waypoint, 4), new Object[] { "G", "T", "C", 'G', KEY_GREEN, 'T', Blocks.redstone_torch, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); + addRecipeAuto(new ItemStack(ModBlocks.drone_crate), new Object[] { "T", "C", 'T', ModBlocks.drone_waypoint, 'C', ModBlocks.crate_steel }); + addRecipeAuto(new ItemStack(ModBlocks.drone_waypoint_request, 4), new Object[] { "G", "T", "C", 'G', KEY_BLUE, 'T', Blocks.redstone_torch, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); + addRecipeAuto(new ItemStack(ModBlocks.drone_crate), new Object[] { "T", "C", "B", 'T', ModBlocks.drone_waypoint_request, 'C', ModBlocks.crate_steel, 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); + addRecipeAuto(new ItemStack(ModBlocks.drone_crate_requester), new Object[] { "T", "C", "B", 'T', ModBlocks.drone_waypoint_request, 'C', ModBlocks.crate_steel, 'B', KEY_YELLOW }); + addRecipeAuto(new ItemStack(ModBlocks.drone_crate_provider), new Object[] { "T", "C", "B", 'T', ModBlocks.drone_waypoint_request, 'C', ModBlocks.crate_steel, 'B', KEY_ORANGE }); addRecipeAuto(new ItemStack(ModBlocks.drone_dock), new Object[] { "T", "C", "B", 'T', ModBlocks.drone_waypoint_request, 'C', ModBlocks.crate_steel, 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED) }); addRecipeAuto(new ItemStack(ModItems.ball_resin), new Object[] { "DD", "DD", 'D', Blocks.yellow_flower }); From f868048b1e0a2abbbd891ce6ae14fef7f23b1223 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Mon, 24 Jun 2024 11:52:19 -0400 Subject: [PATCH 08/10] Revert "no delay for spawning, woo" This reverts commit 071d3603212285531eb91b0406c671811bee1810. --- .../com/hbm/entity/item/EntityRequestDrone.java | 2 +- .../tileentity/network/TileEntityDroneDock.java | 16 +++------------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java index 9ff44e9bb..fd2ac6e7d 100644 --- a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java @@ -188,7 +188,7 @@ public class EntityRequestDrone extends EntityDroneBase { @Override public double getSpeed() { - return 0.8D; + return 0.6D; } @Override diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java index 747433a4d..82b6b93f0 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java @@ -43,25 +43,15 @@ public class TileEntityDroneDock extends TileEntityRequestNetworkContainer imple public void updateEntity() { super.updateEntity(); - if(!worldObj.isRemote && this.hasDrone()) { + if(!worldObj.isRemote && worldObj.getTotalWorldTime() % 100 == 0 && this.hasDrone()) { // grab all nodes in a 5 chunk radius HashedSet localNodes = this.getAllLocalNodes(worldObj, xCoord, zCoord, 5); List requests = new ArrayList(); List offers = new ArrayList(); - - PathNode prevNode = null; - int delay = 0; + for(PathNode local : localNodes) { - if(local instanceof RequestNode) { - if(local != prevNode || delay > 100) { - requests.add((RequestNode) local); - prevNode = local; - delay = 0; - } - delay++; - - } + if(local instanceof RequestNode) requests.add((RequestNode) local); if(local instanceof OfferNode) offers.add((OfferNode) local); } From 205b5373184c0dd1db8aa31da2d1c67b94a5f1dc Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Mon, 24 Jun 2024 17:55:13 -0400 Subject: [PATCH 09/10] fixed drones not placing themselves back properly --- .../com/hbm/entity/item/EntityRequestDrone.java | 17 ++++++++++++++--- .../hbm/tileentity/network/RequestNetwork.java | 1 + .../tileentity/network/TileEntityDroneDock.java | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java index fd2ac6e7d..9a63c5dfd 100644 --- a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java @@ -160,23 +160,34 @@ public class EntityRequestDrone extends EntityDroneBase { TileEntityDroneDock dock = (TileEntityDroneDock) tile; ItemStack drone = new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()); for (int i = 0; i < dock.slots.length; i++) { - if (dock.slots[i] == null || (dock.slots[i].isItemEqual(drone) && dock.slots[i].stackSize < 64)) { + if (dock.slots[i] == null) { this.setDead(); if(heldItem != null){ - if(i != 9 && dock.slots[i + 1] != null){ + if(i != 9 && dock.slots[i + 1] == null){ dock.slots[i + 1] = heldItem.copy(); } } dock.slots[i] = drone.copy(); this.worldObj.playSoundEffect(dock.xCoord + 0.5, dock.yCoord + 0.5, dock.zCoord + 0.5, "hbm:block.storageClose", 2.0F, 1.0F); break; + } else if (dock.slots[i].isItemEqual(drone) && dock.slots[i].stackSize < 64){ + this.setDead(); + if(heldItem != null){ + if(i != 9 && dock.slots[i + 1] == null){ + dock.slots[i + 1] = heldItem.copy(); + } + } + dock.slots[i].stackSize++; + this.worldObj.playSoundEffect(dock.xCoord + 0.5, dock.yCoord + 0.5, dock.zCoord + 0.5, "hbm:block.storageClose", 2.0F, 1.0F); + break; } } } } if (!this.isDead) { this.setDead(); - this.entityDropItem(heldItem, 1F); + if(heldItem != null) + this.entityDropItem(heldItem, 1F); this.entityDropItem(new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()), 1F); } diff --git a/src/main/java/com/hbm/tileentity/network/RequestNetwork.java b/src/main/java/com/hbm/tileentity/network/RequestNetwork.java index 8f98a9eb6..d9b710bfd 100644 --- a/src/main/java/com/hbm/tileentity/network/RequestNetwork.java +++ b/src/main/java/com/hbm/tileentity/network/RequestNetwork.java @@ -108,6 +108,7 @@ public class RequestNetwork { /** Node created by requesters, lists requested AStacks */ public static class RequestNode extends PathNode { public List request; + public int droneCount; public RequestNode(BlockPos pos, HashedSet reachableNodes, List request) { super(pos, reachableNodes); this.request = request; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java index 82b6b93f0..9ae25a045 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java @@ -43,7 +43,7 @@ public class TileEntityDroneDock extends TileEntityRequestNetworkContainer imple public void updateEntity() { super.updateEntity(); - if(!worldObj.isRemote && worldObj.getTotalWorldTime() % 100 == 0 && this.hasDrone()) { + if(!worldObj.isRemote && worldObj.getTotalWorldTime() % 20 == 0 && this.hasDrone()) { // grab all nodes in a 5 chunk radius HashedSet localNodes = this.getAllLocalNodes(worldObj, xCoord, zCoord, 5); From 2dc7792860ff188f11d848f4286c3232518c7b6f Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Thu, 27 Jun 2024 18:01:04 -0400 Subject: [PATCH 10/10] Redstone support for logi drones --- .../java/com/hbm/tileentity/network/RequestNetwork.java | 6 +++--- .../com/hbm/tileentity/network/TileEntityDroneDock.java | 4 ++-- .../hbm/tileentity/network/TileEntityRequestNetwork.java | 6 +++++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/network/RequestNetwork.java b/src/main/java/com/hbm/tileentity/network/RequestNetwork.java index d9b710bfd..94e96b317 100644 --- a/src/main/java/com/hbm/tileentity/network/RequestNetwork.java +++ b/src/main/java/com/hbm/tileentity/network/RequestNetwork.java @@ -70,10 +70,11 @@ public class RequestNetwork { public static class PathNode { public BlockPos pos; public long lease; - public HashedSet reachableNodes = new HashedSet(); + public boolean active = true; + public HashedSet reachableNodes; public PathNode(BlockPos pos, HashedSet reachableNodes) { this.pos = pos; - this.reachableNodes = new HashedSet(reachableNodes); + this.reachableNodes = new HashedSet<>(reachableNodes); this.lease = System.currentTimeMillis(); } @@ -108,7 +109,6 @@ public class RequestNetwork { /** Node created by requesters, lists requested AStacks */ public static class RequestNode extends PathNode { public List request; - public int droneCount; public RequestNode(BlockPos pos, HashedSet reachableNodes, List request) { super(pos, reachableNodes); this.request = request; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java index 9ae25a045..0ab0a73b7 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java @@ -64,7 +64,7 @@ public class TileEntityDroneDock extends TileEntityRequestNetworkContainer imple // simply pick the first request node that has unfulfilled requests for(RequestNode request : requests) { - if(!request.request.isEmpty()) { + if(request.active && !request.request.isEmpty()) { firstRequest = request; break; } @@ -78,7 +78,7 @@ public class TileEntityDroneDock extends TileEntityRequestNetworkContainer imple outer: for(OfferNode offer : offers) { for(ItemStack stack : offer.offer) { - if(stack != null && request.matchesRecipe(stack, true)) { + if(offer.active && stack != null && request.matchesRecipe(stack, true)) { if(tryEmbark(own, firstRequest, offer, request, localNodes)) break attempt; // if the drone can be pathed and spawned, stop doing more attempts break outer; // if not, simply continue iterating over offer nodes } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetwork.java b/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetwork.java index 645374a1e..9da1cfa2a 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetwork.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetwork.java @@ -37,14 +37,18 @@ public abstract class TileEntityRequestNetwork extends TileEntity { if(worldObj.getTotalWorldTime() % 20 == 0) { BlockPos pos = getCoord(); + + PathNode newNode = createNode(pos); + if(this.worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)) newNode.active = false; // push new node - push(worldObj, createNode(pos)); + push(worldObj, newNode); // remove known nodes that no longer exist // since we can assume a sane number of nodes to exist at any given time, we can run this check in full every second Iterator it = knownNodes.iterator(); HashedSet localNodes = this.getAllLocalNodes(worldObj, xCoord, zCoord, 2); // this bit may spiral into multiple nested hashtable lookups but it's limited to only a few chunks so it shouldn't be an issue localNodes.remove(pos); + while(it.hasNext()) { PathNode node = it.next(); if(!localNodes.contains(node)) {