From 9774e1f61f29ea8311dfd7bc77da838cf26c8e18 Mon Sep 17 00:00:00 2001 From: Spicierspace153 <21964509+Spicierspace153@users.noreply.github.com> Date: Tue, 4 Nov 2025 20:43:14 -0700 Subject: [PATCH 01/12] it kinda sorta sucks --- .../utilitiesinexcess/ClientProxy.java | 10 ++ .../utilitiesinexcess/CommonProxy.java | 4 + .../utilitiesinexcess/ModBlocks.java | 24 +--- .../utilitiesinexcess/UtilitiesInExcess.java | 16 +-- .../common/blocks/BlockCollector.java | 40 +++++++ .../common/blocks/BlockConveyor.java | 1 - .../tileentities/TileEntityCollector.java | 79 +++++++++++++ .../config/blocks/BlockConfig.java | 4 + .../render/CollectorLine.java | 109 ++++++++++++++++++ 9 files changed, 252 insertions(+), 35 deletions(-) create mode 100644 src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java create mode 100644 src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java create mode 100644 src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java index 19d9b731..d18f0f3e 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java @@ -1,5 +1,15 @@ package com.fouristhenumber.utilitiesinexcess; +import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityCollector; +import com.fouristhenumber.utilitiesinexcess.render.CollectorLine; +import cpw.mods.fml.client.registry.ClientRegistry; + public class ClientProxy extends CommonProxy { + + + @Override + public void registerRenderers() { + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCollector.class, new CollectorLine()); + } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java index 257fa013..af9f1550 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java @@ -21,6 +21,10 @@ public void preInit(FMLPreInitializationEvent event) { ModItems.init(); } + public void registerRenderers() { + //no op on server + } + public void init(FMLInitializationEvent event) { soundVolumeChecks = new SoundVolumeChecks(); } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java index 7b1b41aa..f26c5769 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java @@ -1,33 +1,12 @@ package com.fouristhenumber.utilitiesinexcess; +import com.fouristhenumber.utilitiesinexcess.common.blocks.*; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockBedrockium; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockBlackoutCurtains; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockCompressed; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockConveyor; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockCursedEarth; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockDrum; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockEnderLotus; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockEtherealGlass; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockFloating; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockInverted; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockLapisAetherius; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockMagicWood; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockMarginallyMaximisedChest; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockPureLove; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockRainMuffler; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockRedstoneClock; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockSignificantlyShrunkChest; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockSoundMuffler; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockTrashCanEnergy; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockTrashCanFluid; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockTrashCanItem; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockUpdateDetector; import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockEnderGenerator; import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockFoodGenerator; import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockFurnaceGenerator; @@ -91,6 +70,7 @@ public enum ModBlocks { ENDER_LOTUS(EnderLotusConfig.enableEnderLotus, new BlockEnderLotus(), null, "ender_lotus"), BLACKOUT_CURTAINS(BlockConfig.enableBlackoutCurtains, new BlockBlackoutCurtains(), "blackout_curtains"), CONVEYOR(BlockConfig.enableConveyor, new BlockConveyor(), "conveyor"), + COLLECTOR(BlockConfig.enableCollector, new BlockCollector(), "collector"), ; // leave trailing semicolon // spotless:on diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java index eeeb23a7..b0a3271e 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java @@ -1,5 +1,6 @@ package com.fouristhenumber.utilitiesinexcess; +import com.fouristhenumber.utilitiesinexcess.common.tileentities.*; import net.minecraft.util.WeightedRandomChestContent; import net.minecraftforge.common.ChestGenHooks; import net.minecraftforge.common.MinecraftForge; @@ -10,18 +11,6 @@ import com.fouristhenumber.utilitiesinexcess.common.recipe.RecipeLoader; import com.fouristhenumber.utilitiesinexcess.common.renderers.BlackoutCurtainsRenderer; import com.fouristhenumber.utilitiesinexcess.common.renderers.LapisAetheriusRenderer; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityBlockUpdateDetector; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityConveyor; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityDrum; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityMarginallyMaximisedChest; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityPureLove; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityRainMuffler; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityRedstoneClock; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntitySignificantlyShrunkChest; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntitySoundMuffler; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityTrashCanEnergy; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityTrashCanFluid; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityTrashCanItem; import com.fouristhenumber.utilitiesinexcess.common.tileentities.generators.TileEntityEnderGenerator; import com.fouristhenumber.utilitiesinexcess.common.tileentities.generators.TileEntityFoodGenerator; import com.fouristhenumber.utilitiesinexcess.common.tileentities.generators.TileEntityFurnaceGenerator; @@ -66,6 +55,7 @@ public class UtilitiesInExcess { serverSide = "com.fouristhenumber.utilitiesinexcess.CommonProxy") public static CommonProxy proxy; + @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { proxy.preInit(event); @@ -74,6 +64,7 @@ public void preInit(FMLPreInitializationEvent event) { @Mod.EventHandler public void init(FMLInitializationEvent event) { proxy.init(event); + proxy.registerRenderers(); RecipeLoader.run(); @@ -91,6 +82,7 @@ public void init(FMLInitializationEvent event) { GameRegistry.registerTileEntity(TileEntityRainMuffler.class, "TileEntityRainMufflerUIE"); GameRegistry.registerTileEntity(TileEntityBlockUpdateDetector.class, "TileEntityBlockUpdateDetector"); GameRegistry.registerTileEntity(TileEntityConveyor.class, "TileEntityConveyor"); + GameRegistry.registerTileEntity(TileEntityCollector.class, "TileEntityCollector"); GameRegistry.registerTileEntity( TileEntityLowTemperatureFurnaceGenerator.class, diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java new file mode 100644 index 00000000..b9bd72e7 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java @@ -0,0 +1,40 @@ +package com.fouristhenumber.utilitiesinexcess.common.blocks; + +import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityCollector; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; + +import java.util.List; + +public class BlockCollector extends BlockContainer { + + double x0, y0, z0, x1, y1, z1; + + + public BlockCollector() { + super(Material.rock); + setBlockName("Collector"); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) { + return new TileEntityCollector(); + } + + @Override + public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { + if (!worldIn.isRemote) { + TileEntity tile = worldIn.getTileEntity(x, y, z); + if (tile instanceof TileEntityCollector collector) { + collector.showBorderFor(100); + } + } + return true; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockConveyor.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockConveyor.java index 1a9e55f5..b68dca06 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockConveyor.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockConveyor.java @@ -22,7 +22,6 @@ public class BlockConveyor extends BlockContainer { public BlockConveyor() { super(Material.piston); - setBlockName("conveyor"); } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java new file mode 100644 index 00000000..8d7f5f10 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java @@ -0,0 +1,79 @@ +package com.fouristhenumber.utilitiesinexcess.common.tileentities; + +import net.minecraft.entity.item.EntityItem; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.Vec3; + +import java.util.ArrayList; +import java.util.List; + +public class TileEntityCollector extends TileEntity { + + public boolean showBorder = true; + public int borderTimer = 0; + int tickCount = 0; + IInventory inventory; + public List itemPositions = new ArrayList<>(); + private static final int RADIUS = 4; + + @Override + public void validate() { + super.validate(); + } + + public void showBorderFor(int ticks) { + this.showBorder = true; + this.borderTimer = ticks; + } + + @Override + public void updateEntity() { + if (worldObj.isRemote) { + // client: just visual + itemPositions.clear(); + List nearbyItems = worldObj.getEntitiesWithinAABB(EntityItem.class, getRadiusAABB()); + for (EntityItem item : nearbyItems) { + if (!item.isDead) + itemPositions.add(Vec3.createVectorHelper(item.posX, item.posY + 0.25, item.posZ)); + } + return; + } + + tickCount++; + + // Refresh inventory every second + if (tickCount % 20 == 0) { + TileEntity below = worldObj.getTileEntity(xCoord, yCoord - 1, zCoord); + if (below instanceof IInventory inv) inventory = inv; + } + + if (inventory == null) return; + + // Collect nearby items + List items = worldObj.getEntitiesWithinAABB(EntityItem.class, getRadiusAABB()); + for (EntityItem item : items) { + if (item.isDead) continue; + // make it move + double dx = xCoord + 0.5 - item.posX; + double dy = yCoord + 0.5 - item.posY; + double dz = zCoord + 0.5 - item.posZ; + double speed = 0.05; + item.motionX += dx * speed; + item.motionY += dy * speed; + item.motionZ += dz * speed; + // optionally absorb when close + } + } + + private AxisAlignedBB getRadiusAABB() { + return AxisAlignedBB.getBoundingBox( + xCoord - RADIUS, yCoord - RADIUS, zCoord - RADIUS, + xCoord + RADIUS + 1, yCoord + RADIUS + 1, zCoord + RADIUS + 1 + ); + } + + +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/config/blocks/BlockConfig.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/config/blocks/BlockConfig.java index 601afd9a..19f33e5e 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/config/blocks/BlockConfig.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/config/blocks/BlockConfig.java @@ -73,6 +73,10 @@ public static void registerConfig() throws ConfigException { @Config.DefaultBoolean(true) public static boolean enableConveyor; + + @Config.DefaultBoolean(true) + public static boolean enableCollector; + @Config.Comment("Cursed Earth Configuration") public static final CursedEarth cursedEarth = new CursedEarth(); diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java new file mode 100644 index 00000000..50cd32ba --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java @@ -0,0 +1,109 @@ +package com.fouristhenumber.utilitiesinexcess.render; + +import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityCollector; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Vec3; +import org.lwjgl.opengl.GL11; + +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; + +public class CollectorLine extends TileEntitySpecialRenderer { + + private final Map fadingLines = new LinkedHashMap<>(); + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float partialTicks) { + if (!(te instanceof TileEntityCollector collector)) return; + + if (collector.itemPositions != null) { + for (Vec3 pos : collector.itemPositions) { + fadingLines.put(pos, 20); + } + } + + //WHATEVER GO MY OPENGL STATE FLAGS + //how to write open gl a fundamental guide \/ + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glEnable(GL11.GL_LINE_SMOOTH); + GL11.glHint(GL11.GL_LINE_SMOOTH_HINT, GL11.GL_NICEST); + GL11.glLineWidth(6.0f); + GL11.glTranslated(x, y, z); + + //force fullbright (fun fact this is what night vision does so i didn't realize that this needed to be set UNTIL AFTER IT WORE OFF) + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f); + + GL11.glBegin(GL11.GL_LINES); + Iterator> it = fadingLines.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry entry = it.next(); + Vec3 target = entry.getKey(); + int life = entry.getValue(); + + float alpha = Math.max(0f, life / 20.0f); + GL11.glColor4f(1.0f, 0f, 0f, alpha); + + double dx = target.xCoord - (te.xCoord + 0.5); + double dy = target.yCoord - (te.yCoord + 0.5); + double dz = target.zCoord - (te.zCoord + 0.5); + + GL11.glVertex3d(0, 0, 0); + GL11.glVertex3d(dx, dy, dz); + + entry.setValue(life - 1); + if (life <= 0) it.remove(); + } + GL11.glEnd(); + + if (collector.showBorder) { + int r = 4; + GL11.glLineWidth(3.0f); + GL11.glBegin(GL11.GL_LINES); + + double[][] edges = { + {-r, -r, -r}, {r + 1, -r, -r}, + {-r, -r, -r}, {-r, r + 1, -r}, + {-r, -r, -r}, {-r, -r, r + 1}, + {r + 1, r + 1, r + 1}, {-r, r + 1, r + 1}, + {r + 1, r + 1, r + 1}, {r + 1, -r, r + 1}, + {r + 1, r + 1, r + 1}, {r + 1, r + 1, -r}, + {r + 1, -r, -r}, {r + 1, r + 1, -r}, + {r + 1, -r, -r}, {r + 1, -r, r + 1}, + {-r, r + 1, -r}, {-r, r + 1, r + 1}, + {-r, r + 1, -r}, {r + 1, r + 1, -r}, + {-r, -r, r + 1}, {r + 1, -r, r + 1}, + {-r, -r, r + 1}, {-r, r + 1, r + 1} + }; + + long time = System.currentTimeMillis(); + for (int i = 0; i < edges.length; i += 2) { + //wainbow :3 + float hue = (float) ((time * 0.001 + i * 0.1) % 1.0); + float[] rgb = java.awt.Color.getHSBColor(hue, 1.0f, 1.0f).getRGBColorComponents(null); + GL11.glColor4f(rgb[0], rgb[1], rgb[2], 0.8f); + + GL11.glVertex3d(edges[i][0], edges[i][1], edges[i][2]); + GL11.glVertex3d(edges[i + 1][0], edges[i + 1][1], edges[i + 1][2]); + } + + GL11.glEnd(); + } + + GL11.glDisable(GL11.GL_LINE_SMOOTH); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glPopMatrix(); + + // clear only new item positions + if (collector.itemPositions != null) + collector.itemPositions.clear(); + } +} From 1770c8043dfba79ba991a7651c9466dcc4ce6b6b Mon Sep 17 00:00:00 2001 From: Spicierspace153 <21964509+Spicierspace153@users.noreply.github.com> Date: Tue, 4 Nov 2025 23:51:03 -0700 Subject: [PATCH 02/12] Item Collection --- .../common/blocks/BlockCollector.java | 2 +- .../tileentities/TileEntityCollector.java | 78 +++++++++++++------ 2 files changed, 57 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java index b9bd72e7..867bebc6 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java @@ -32,7 +32,7 @@ public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer if (!worldIn.isRemote) { TileEntity tile = worldIn.getTileEntity(x, y, z); if (tile instanceof TileEntityCollector collector) { - collector.showBorderFor(100); + } } return true; diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java index 8d7f5f10..312e303d 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java @@ -17,7 +17,7 @@ public class TileEntityCollector extends TileEntity { int tickCount = 0; IInventory inventory; public List itemPositions = new ArrayList<>(); - private static final int RADIUS = 4; + private float size = 6f ; @Override public void validate() { @@ -29,49 +29,83 @@ public void showBorderFor(int ticks) { this.borderTimer = ticks; } + + public void incrementSize() { + size++; + if (size > 9) size = 1; + } + + + @Override public void updateEntity() { + List items = worldObj.getEntitiesWithinAABB(EntityItem.class, getRadiusAABB()); + if (worldObj.isRemote) { // client: just visual itemPositions.clear(); - List nearbyItems = worldObj.getEntitiesWithinAABB(EntityItem.class, getRadiusAABB()); - for (EntityItem item : nearbyItems) { + for (EntityItem item : items) { if (!item.isDead) itemPositions.add(Vec3.createVectorHelper(item.posX, item.posY + 0.25, item.posZ)); } - return; } tickCount++; - - // Refresh inventory every second - if (tickCount % 20 == 0) { - TileEntity below = worldObj.getTileEntity(xCoord, yCoord - 1, zCoord); - if (below instanceof IInventory inv) inventory = inv; + if (!(tickCount % 20 == 0)) { + return; } + TileEntity below = worldObj.getTileEntity(xCoord, yCoord - 1, zCoord); + if (below instanceof IInventory) inventory = (IInventory) below; + if (inventory == null) return; - // Collect nearby items - List items = worldObj.getEntitiesWithinAABB(EntityItem.class, getRadiusAABB()); for (EntityItem item : items) { if (item.isDead) continue; - // make it move - double dx = xCoord + 0.5 - item.posX; - double dy = yCoord + 0.5 - item.posY; - double dz = zCoord + 0.5 - item.posZ; - double speed = 0.05; - item.motionX += dx * speed; - item.motionY += dy * speed; - item.motionZ += dz * speed; - // optionally absorb when close + + // Only collect after a short delay (20 ticks = 1 second) + if (item.delayBeforeCanPickup > 0) continue; + + ItemStack stackToInsert = item.getEntityItem(); + if (stackToInsert == null) continue; + + for (int slot = 0; slot < inventory.getSizeInventory(); slot++) { + ItemStack currentStack = inventory.getStackInSlot(slot); + + if (currentStack == null) { + inventory.setInventorySlotContents(slot, stackToInsert); + inventory.markDirty(); + item.setDead(); + break; + } else if (currentStack.isItemEqual(stackToInsert) && ItemStack.areItemStackTagsEqual(currentStack, stackToInsert)) { + int maxStack = Math.min(currentStack.getMaxStackSize(), inventory.getInventoryStackLimit()); + int space = maxStack - currentStack.stackSize; + + if (space > 0) { + if (stackToInsert.stackSize <= space) { + currentStack.stackSize += stackToInsert.stackSize; + inventory.markDirty(); + item.setDead(); + break; + } else { + currentStack.stackSize += space; + stackToInsert.stackSize -= space; + inventory.markDirty(); + } + } + } + } } } + + + + private AxisAlignedBB getRadiusAABB() { return AxisAlignedBB.getBoundingBox( - xCoord - RADIUS, yCoord - RADIUS, zCoord - RADIUS, - xCoord + RADIUS + 1, yCoord + RADIUS + 1, zCoord + RADIUS + 1 + xCoord - size, yCoord -size, zCoord - size, + xCoord + size+ 1, yCoord + size + 1, zCoord + size + 1 ); } From 1f42ab53ba9a4e0eaeb70f2f2bb4bcd0861c8a9a Mon Sep 17 00:00:00 2001 From: Spicierspace153 <21964509+Spicierspace153@users.noreply.github.com> Date: Wed, 5 Nov 2025 00:45:50 -0700 Subject: [PATCH 03/12] fix some edge cases and inital spotless --- .../utilitiesinexcess/ClientProxy.java | 3 +- .../utilitiesinexcess/CommonProxy.java | 2 +- .../utilitiesinexcess/ModBlocks.java | 2 +- .../utilitiesinexcess/UtilitiesInExcess.java | 3 +- .../common/blocks/BlockCollector.java | 12 ++-- .../tileentities/TileEntityCollector.java | 65 +++++++++---------- .../config/blocks/BlockConfig.java | 1 - .../render/CollectorLine.java | 48 +++++++------- 8 files changed, 60 insertions(+), 76 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java index d18f0f3e..75f8453b 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java @@ -2,12 +2,11 @@ import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityCollector; import com.fouristhenumber.utilitiesinexcess.render.CollectorLine; + import cpw.mods.fml.client.registry.ClientRegistry; public class ClientProxy extends CommonProxy { - - @Override public void registerRenderers() { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCollector.class, new CollectorLine()); diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java index af9f1550..57754d0c 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java @@ -22,7 +22,7 @@ public void preInit(FMLPreInitializationEvent event) { } public void registerRenderers() { - //no op on server + // no op on server } public void init(FMLInitializationEvent event) { diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java index f26c5769..8689e2a4 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java @@ -1,12 +1,12 @@ package com.fouristhenumber.utilitiesinexcess; -import com.fouristhenumber.utilitiesinexcess.common.blocks.*; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; +import com.fouristhenumber.utilitiesinexcess.common.blocks.*; import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockEnderGenerator; import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockFoodGenerator; import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockFurnaceGenerator; diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java index b0a3271e..13c3ce22 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java @@ -1,6 +1,5 @@ package com.fouristhenumber.utilitiesinexcess; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.*; import net.minecraft.util.WeightedRandomChestContent; import net.minecraftforge.common.ChestGenHooks; import net.minecraftforge.common.MinecraftForge; @@ -11,6 +10,7 @@ import com.fouristhenumber.utilitiesinexcess.common.recipe.RecipeLoader; import com.fouristhenumber.utilitiesinexcess.common.renderers.BlackoutCurtainsRenderer; import com.fouristhenumber.utilitiesinexcess.common.renderers.LapisAetheriusRenderer; +import com.fouristhenumber.utilitiesinexcess.common.tileentities.*; import com.fouristhenumber.utilitiesinexcess.common.tileentities.generators.TileEntityEnderGenerator; import com.fouristhenumber.utilitiesinexcess.common.tileentities.generators.TileEntityFoodGenerator; import com.fouristhenumber.utilitiesinexcess.common.tileentities.generators.TileEntityFurnaceGenerator; @@ -55,7 +55,6 @@ public class UtilitiesInExcess { serverSide = "com.fouristhenumber.utilitiesinexcess.CommonProxy") public static CommonProxy proxy; - @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { proxy.preInit(event); diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java index 867bebc6..b45314e5 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java @@ -1,22 +1,17 @@ package com.fouristhenumber.utilitiesinexcess.common.blocks; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityCollector; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; -import java.util.List; +import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityCollector; public class BlockCollector extends BlockContainer { double x0, y0, z0, x1, y1, z1; - public BlockCollector() { super(Material.rock); setBlockName("Collector"); @@ -28,11 +23,12 @@ public TileEntity createNewTileEntity(World worldIn, int meta) { } @Override - public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { + public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, + float subY, float subZ) { if (!worldIn.isRemote) { TileEntity tile = worldIn.getTileEntity(x, y, z); if (tile instanceof TileEntityCollector collector) { - + // } } return true; diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java index 312e303d..0031d99f 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java @@ -1,5 +1,8 @@ package com.fouristhenumber.utilitiesinexcess.common.tileentities; +import java.util.ArrayList; +import java.util.List; + import net.minecraft.entity.item.EntityItem; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -7,9 +10,6 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; -import java.util.ArrayList; -import java.util.List; - public class TileEntityCollector extends TileEntity { public boolean showBorder = true; @@ -17,7 +17,7 @@ public class TileEntityCollector extends TileEntity { int tickCount = 0; IInventory inventory; public List itemPositions = new ArrayList<>(); - private float size = 6f ; + private float size = 6f; @Override public void validate() { @@ -29,14 +29,11 @@ public void showBorderFor(int ticks) { this.borderTimer = ticks; } - public void incrementSize() { size++; if (size > 9) size = 1; } - - @Override public void updateEntity() { List items = worldObj.getEntitiesWithinAABB(EntityItem.class, getRadiusAABB()); @@ -45,8 +42,7 @@ public void updateEntity() { // client: just visual itemPositions.clear(); for (EntityItem item : items) { - if (!item.isDead) - itemPositions.add(Vec3.createVectorHelper(item.posX, item.posY + 0.25, item.posZ)); + if (!item.isDead) itemPositions.add(Vec3.createVectorHelper(item.posX, item.posY + 0.25, item.posZ)); } } @@ -56,13 +52,13 @@ public void updateEntity() { } TileEntity below = worldObj.getTileEntity(xCoord, yCoord - 1, zCoord); - if (below instanceof IInventory) inventory = (IInventory) below; + if (!(below instanceof IInventory)) return; - if (inventory == null) return; + inventory = (IInventory) below; for (EntityItem item : items) { if (item.isDead) continue; - + if (!item.onGround) continue; // Only collect after a short delay (20 ticks = 1 second) if (item.delayBeforeCanPickup > 0) continue; @@ -77,37 +73,36 @@ public void updateEntity() { inventory.markDirty(); item.setDead(); break; - } else if (currentStack.isItemEqual(stackToInsert) && ItemStack.areItemStackTagsEqual(currentStack, stackToInsert)) { - int maxStack = Math.min(currentStack.getMaxStackSize(), inventory.getInventoryStackLimit()); - int space = maxStack - currentStack.stackSize; - - if (space > 0) { - if (stackToInsert.stackSize <= space) { - currentStack.stackSize += stackToInsert.stackSize; - inventory.markDirty(); - item.setDead(); - break; - } else { - currentStack.stackSize += space; - stackToInsert.stackSize -= space; - inventory.markDirty(); + } else if (currentStack.isItemEqual(stackToInsert) + && ItemStack.areItemStackTagsEqual(currentStack, stackToInsert)) { + int maxStack = Math.min(currentStack.getMaxStackSize(), inventory.getInventoryStackLimit()); + int space = maxStack - currentStack.stackSize; + + if (space > 0) { + if (stackToInsert.stackSize <= space) { + currentStack.stackSize += stackToInsert.stackSize; + inventory.markDirty(); + item.setDead(); + break; + } else { + currentStack.stackSize += space; + stackToInsert.stackSize -= space; + inventory.markDirty(); + } } } - } } } } - - - - private AxisAlignedBB getRadiusAABB() { return AxisAlignedBB.getBoundingBox( - xCoord - size, yCoord -size, zCoord - size, - xCoord + size+ 1, yCoord + size + 1, zCoord + size + 1 - ); + xCoord - size, + yCoord - size, + zCoord - size, + xCoord + size + 1, + yCoord + size + 1, + zCoord + size + 1); } - } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/config/blocks/BlockConfig.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/config/blocks/BlockConfig.java index 19f33e5e..7f8792f4 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/config/blocks/BlockConfig.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/config/blocks/BlockConfig.java @@ -73,7 +73,6 @@ public static void registerConfig() throws ConfigException { @Config.DefaultBoolean(true) public static boolean enableConveyor; - @Config.DefaultBoolean(true) public static boolean enableCollector; diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java index 50cd32ba..10ad5dca 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java @@ -1,15 +1,17 @@ package com.fouristhenumber.utilitiesinexcess.render; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityCollector; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; + import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; + import org.lwjgl.opengl.GL11; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; +import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityCollector; public class CollectorLine extends TileEntitySpecialRenderer { @@ -25,8 +27,8 @@ public void renderTileEntityAt(TileEntity te, double x, double y, double z, floa } } - //WHATEVER GO MY OPENGL STATE FLAGS - //how to write open gl a fundamental guide \/ + // WHATEVER GO MY OPENGL STATE FLAGS + // how to write open gl a fundamental guide \/ GL11.glPushMatrix(); GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_TEXTURE_2D); @@ -37,11 +39,13 @@ public void renderTileEntityAt(TileEntity te, double x, double y, double z, floa GL11.glLineWidth(6.0f); GL11.glTranslated(x, y, z); - //force fullbright (fun fact this is what night vision does so i didn't realize that this needed to be set UNTIL AFTER IT WORE OFF) + // force fullbright (fun fact this is what night vision does so i didn't realize that this needed to be set + // UNTIL AFTER IT WORE OFF) OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f); GL11.glBegin(GL11.GL_LINES); - Iterator> it = fadingLines.entrySet().iterator(); + Iterator> it = fadingLines.entrySet() + .iterator(); while (it.hasNext()) { Map.Entry entry = it.next(); Vec3 target = entry.getKey(); @@ -67,26 +71,19 @@ public void renderTileEntityAt(TileEntity te, double x, double y, double z, floa GL11.glLineWidth(3.0f); GL11.glBegin(GL11.GL_LINES); - double[][] edges = { - {-r, -r, -r}, {r + 1, -r, -r}, - {-r, -r, -r}, {-r, r + 1, -r}, - {-r, -r, -r}, {-r, -r, r + 1}, - {r + 1, r + 1, r + 1}, {-r, r + 1, r + 1}, - {r + 1, r + 1, r + 1}, {r + 1, -r, r + 1}, - {r + 1, r + 1, r + 1}, {r + 1, r + 1, -r}, - {r + 1, -r, -r}, {r + 1, r + 1, -r}, - {r + 1, -r, -r}, {r + 1, -r, r + 1}, - {-r, r + 1, -r}, {-r, r + 1, r + 1}, - {-r, r + 1, -r}, {r + 1, r + 1, -r}, - {-r, -r, r + 1}, {r + 1, -r, r + 1}, - {-r, -r, r + 1}, {-r, r + 1, r + 1} - }; + double[][] edges = { { -r, -r, -r }, { r + 1, -r, -r }, { -r, -r, -r }, { -r, r + 1, -r }, { -r, -r, -r }, + { -r, -r, r + 1 }, { r + 1, r + 1, r + 1 }, { -r, r + 1, r + 1 }, { r + 1, r + 1, r + 1 }, + { r + 1, -r, r + 1 }, { r + 1, r + 1, r + 1 }, { r + 1, r + 1, -r }, { r + 1, -r, -r }, + { r + 1, r + 1, -r }, { r + 1, -r, -r }, { r + 1, -r, r + 1 }, { -r, r + 1, -r }, { -r, r + 1, r + 1 }, + { -r, r + 1, -r }, { r + 1, r + 1, -r }, { -r, -r, r + 1 }, { r + 1, -r, r + 1 }, { -r, -r, r + 1 }, + { -r, r + 1, r + 1 } }; long time = System.currentTimeMillis(); for (int i = 0; i < edges.length; i += 2) { - //wainbow :3 + // wainbow :3 float hue = (float) ((time * 0.001 + i * 0.1) % 1.0); - float[] rgb = java.awt.Color.getHSBColor(hue, 1.0f, 1.0f).getRGBColorComponents(null); + float[] rgb = java.awt.Color.getHSBColor(hue, 1.0f, 1.0f) + .getRGBColorComponents(null); GL11.glColor4f(rgb[0], rgb[1], rgb[2], 0.8f); GL11.glVertex3d(edges[i][0], edges[i][1], edges[i][2]); @@ -103,7 +100,6 @@ public void renderTileEntityAt(TileEntity te, double x, double y, double z, floa GL11.glPopMatrix(); // clear only new item positions - if (collector.itemPositions != null) - collector.itemPositions.clear(); + if (collector.itemPositions != null) collector.itemPositions.clear(); } } From c294ad7e7249a0aeb22e4b5830b0182d0278caa6 Mon Sep 17 00:00:00 2001 From: Spicierspace153 <21964509+Spicierspace153@users.noreply.github.com> Date: Fri, 7 Nov 2025 14:05:45 -0700 Subject: [PATCH 04/12] done and polished, :yay: --- .../utilitiesinexcess/ClientProxy.java | 13 +-- .../utilitiesinexcess/UtilitiesInExcess.java | 2 +- .../common/blocks/BlockCollector.java | 16 +-- .../tileentities/TileEntityCollector.java | 97 ++++++++----------- .../render/CollectorLine.java | 16 +-- 5 files changed, 59 insertions(+), 85 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java index 5e9fa30f..7b71bf64 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java @@ -1,14 +1,11 @@ package com.fouristhenumber.utilitiesinexcess; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityCollector; -import com.fouristhenumber.utilitiesinexcess.render.CollectorLine; - -import cpw.mods.fml.client.registry.ClientRegistry; - import net.minecraftforge.client.MinecraftForgeClient; import com.fouristhenumber.utilitiesinexcess.common.renderers.InvertedIngotRenderer; +import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityCollector; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityPortalUnderWorld; +import com.fouristhenumber.utilitiesinexcess.render.CollectorLine; import com.fouristhenumber.utilitiesinexcess.render.ISBRHUnderworldPortal; import com.fouristhenumber.utilitiesinexcess.render.TESRUnderworldPortal; @@ -16,10 +13,6 @@ import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.common.event.FMLInitializationEvent; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityCollector; -import com.fouristhenumber.utilitiesinexcess.render.CollectorLine; -import cpw.mods.fml.client.registry.ClientRegistry; - public class ClientProxy extends CommonProxy { @Override @@ -32,7 +25,7 @@ public void init(FMLInitializationEvent event) { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPortalUnderWorld.class, new TESRUnderworldPortal()); RenderingRegistry.registerBlockHandler(ISBRHUnderworldPortal.INSTANCE); } - if(ModBlocks.COLLECTOR.isEnabled()){ + if (ModBlocks.COLLECTOR.isEnabled()) { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCollector.class, new CollectorLine()); } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java index 60eed6d4..e9037a7c 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java @@ -11,6 +11,7 @@ import com.fouristhenumber.utilitiesinexcess.common.renderers.BlackoutCurtainsRenderer; import com.fouristhenumber.utilitiesinexcess.common.renderers.LapisAetheriusRenderer; import com.fouristhenumber.utilitiesinexcess.common.renderers.SpikeRenderer; +import com.fouristhenumber.utilitiesinexcess.common.tileentities.*; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityBlockUpdateDetector; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityConveyor; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityDrum; @@ -25,7 +26,6 @@ import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityTrashCanEnergy; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityTrashCanFluid; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityTrashCanItem; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.*; import com.fouristhenumber.utilitiesinexcess.common.tileentities.generators.TileEntityEnderGenerator; import com.fouristhenumber.utilitiesinexcess.common.tileentities.generators.TileEntityFoodGenerator; import com.fouristhenumber.utilitiesinexcess.common.tileentities.generators.TileEntityFurnaceGenerator; diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java index b45314e5..32a4bc67 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java @@ -10,8 +10,6 @@ public class BlockCollector extends BlockContainer { - double x0, y0, z0, x1, y1, z1; - public BlockCollector() { super(Material.rock); setBlockName("Collector"); @@ -25,12 +23,16 @@ public TileEntity createNewTileEntity(World worldIn, int meta) { @Override public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { - if (!worldIn.isRemote) { - TileEntity tile = worldIn.getTileEntity(x, y, z); - if (tile instanceof TileEntityCollector collector) { - // - } + TileEntity tile = worldIn.getTileEntity(x, y, z); + if (!(tile instanceof TileEntityCollector)) { + return true; } + TileEntityCollector collector = (TileEntityCollector) tile; + + collector.incrementSize(); + collector.showBorderFor(20); + worldIn.markBlockForUpdate(x, y, z); + return true; } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java index 0031d99f..6fccff3e 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java @@ -9,24 +9,21 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.gtnhlib.capability.item.ItemSink; +import com.gtnewhorizon.gtnhlib.item.InsertionItemStack; +import com.gtnewhorizon.gtnhlib.util.ItemUtil; public class TileEntityCollector extends TileEntity { - public boolean showBorder = true; + public boolean showBorder = false; public int borderTimer = 0; - int tickCount = 0; - IInventory inventory; public List itemPositions = new ArrayList<>(); private float size = 6f; - @Override - public void validate() { - super.validate(); - } - - public void showBorderFor(int ticks) { - this.showBorder = true; - this.borderTimer = ticks; + public float getSize() { + return size; } public void incrementSize() { @@ -34,63 +31,46 @@ public void incrementSize() { if (size > 9) size = 1; } + public void showBorderFor(int ticks) { + this.showBorder = true; + this.borderTimer = ticks; + } + @Override public void updateEntity() { - List items = worldObj.getEntitiesWithinAABB(EntityItem.class, getRadiusAABB()); if (worldObj.isRemote) { - // client: just visual + if (borderTimer > 0) { + borderTimer--; + if (borderTimer <= 0) showBorder = false; + } + itemPositions.clear(); + List items = worldObj.getEntitiesWithinAABB(EntityItem.class, getRadiusAABB()); for (EntityItem item : items) { - if (!item.isDead) itemPositions.add(Vec3.createVectorHelper(item.posX, item.posY + 0.25, item.posZ)); + if (!item.isDead && item.onGround) { + itemPositions.add(Vec3.createVectorHelper(item.posX, item.posY + 0.25, item.posZ)); + } } } - tickCount++; - if (!(tickCount % 20 == 0)) { - return; - } + if (!worldObj.isRemote) { + List items = worldObj.getEntitiesWithinAABB(EntityItem.class, getRadiusAABB()); + TileEntity chest = worldObj.getTileEntity(xCoord, yCoord - 1, zCoord); + if (!(chest instanceof IInventory)) return; - TileEntity below = worldObj.getTileEntity(xCoord, yCoord - 1, zCoord); - if (!(below instanceof IInventory)) return; - - inventory = (IInventory) below; - - for (EntityItem item : items) { - if (item.isDead) continue; - if (!item.onGround) continue; - // Only collect after a short delay (20 ticks = 1 second) - if (item.delayBeforeCanPickup > 0) continue; - - ItemStack stackToInsert = item.getEntityItem(); - if (stackToInsert == null) continue; - - for (int slot = 0; slot < inventory.getSizeInventory(); slot++) { - ItemStack currentStack = inventory.getStackInSlot(slot); - - if (currentStack == null) { - inventory.setInventorySlotContents(slot, stackToInsert); - inventory.markDirty(); - item.setDead(); - break; - } else if (currentStack.isItemEqual(stackToInsert) - && ItemStack.areItemStackTagsEqual(currentStack, stackToInsert)) { - int maxStack = Math.min(currentStack.getMaxStackSize(), inventory.getInventoryStackLimit()); - int space = maxStack - currentStack.stackSize; - - if (space > 0) { - if (stackToInsert.stackSize <= space) { - currentStack.stackSize += stackToInsert.stackSize; - inventory.markDirty(); - item.setDead(); - break; - } else { - currentStack.stackSize += space; - stackToInsert.stackSize -= space; - inventory.markDirty(); - } - } - } + for (EntityItem item : items) { + if (item.isDead || !item.onGround || item.delayBeforeCanPickup > 0) continue; + + ItemStack stackInsert = item.getEntityItem(); + if (stackInsert == null) continue; + + ItemSink sink = ItemUtil.getItemSink(chest, ForgeDirection.UP); + if (sink != null) { + int leftover = sink.store(new InsertionItemStack(stackInsert)); + if (leftover <= 0) item.setDead(); + else stackInsert.stackSize = leftover; + } } } } @@ -104,5 +84,4 @@ private AxisAlignedBB getRadiusAABB() { yCoord + size + 1, zCoord + size + 1); } - } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java index 10ad5dca..dbd3ae04 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java @@ -15,7 +15,7 @@ public class CollectorLine extends TileEntitySpecialRenderer { - private final Map fadingLines = new LinkedHashMap<>(); + private final Map lines = new LinkedHashMap<>(); @Override public void renderTileEntityAt(TileEntity te, double x, double y, double z, float partialTicks) { @@ -23,7 +23,7 @@ public void renderTileEntityAt(TileEntity te, double x, double y, double z, floa if (collector.itemPositions != null) { for (Vec3 pos : collector.itemPositions) { - fadingLines.put(pos, 20); + lines.put(pos, 20); } } @@ -44,7 +44,7 @@ public void renderTileEntityAt(TileEntity te, double x, double y, double z, floa OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f); GL11.glBegin(GL11.GL_LINES); - Iterator> it = fadingLines.entrySet() + Iterator> it = lines.entrySet() .iterator(); while (it.hasNext()) { Map.Entry entry = it.next(); @@ -54,11 +54,11 @@ public void renderTileEntityAt(TileEntity te, double x, double y, double z, floa float alpha = Math.max(0f, life / 20.0f); GL11.glColor4f(1.0f, 0f, 0f, alpha); - double dx = target.xCoord - (te.xCoord + 0.5); - double dy = target.yCoord - (te.yCoord + 0.5); - double dz = target.zCoord - (te.zCoord + 0.5); + double dx = target.xCoord - (te.xCoord); + double dy = target.yCoord - (te.yCoord); + double dz = target.zCoord - (te.zCoord); - GL11.glVertex3d(0, 0, 0); + GL11.glVertex3d(.5, .5, .5); GL11.glVertex3d(dx, dy, dz); entry.setValue(life - 1); @@ -67,7 +67,7 @@ public void renderTileEntityAt(TileEntity te, double x, double y, double z, floa GL11.glEnd(); if (collector.showBorder) { - int r = 4; + float r = collector.getSize(); GL11.glLineWidth(3.0f); GL11.glBegin(GL11.GL_LINES); From b91f5d724fb62f602f200b991380179eb7172de3 Mon Sep 17 00:00:00 2001 From: Spicierspace153 <21964509+Spicierspace153@users.noreply.github.com> Date: Fri, 7 Nov 2025 14:08:38 -0700 Subject: [PATCH 05/12] old code --- .../com/fouristhenumber/utilitiesinexcess/ClientProxy.java | 2 +- .../com/fouristhenumber/utilitiesinexcess/CommonProxy.java | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java index 7b71bf64..40531b84 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java @@ -18,7 +18,7 @@ public class ClientProxy extends CommonProxy { @Override public void init(FMLInitializationEvent event) { super.init(event); - if (ModItems.INVERTED_INGOT.isEnabled()) { + if (ModItems.INVERTED_NUGGET.isEnabled()) { MinecraftForgeClient.registerItemRenderer(ModItems.INVERTED_INGOT.get(), new InvertedIngotRenderer()); } if (ModBlocks.UNDERWORLD_PORTAL.isEnabled()) { diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java index 2bacebc3..50761829 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java @@ -25,10 +25,6 @@ public void preInit(FMLPreInitializationEvent event) { UnderWorldEvents.init(); } - public void registerRenderers() { - // no op on server - } - public void init(FMLInitializationEvent event) { soundVolumeChecks = new SoundVolumeChecks(); } From 509bcc87e92687e4454b3df20adb984eab9996c1 Mon Sep 17 00:00:00 2001 From: Spicierspace153 <21964509+Spicierspace153@users.noreply.github.com> Date: Fri, 7 Nov 2025 19:25:16 -0700 Subject: [PATCH 06/12] croup. --- .../common/blocks/BlockCollector.java | 14 ++++++---- .../tileentities/TileEntityCollector.java | 28 +++++++++++++++++-- .../render/CollectorLine.java | 2 ++ 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java index 32a4bc67..64f6026c 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java @@ -24,15 +24,19 @@ public TileEntity createNewTileEntity(World worldIn, int meta) { public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { TileEntity tile = worldIn.getTileEntity(x, y, z); - if (!(tile instanceof TileEntityCollector)) { + if (!(tile instanceof TileEntityCollector collector)) { return true; } - TileEntityCollector collector = (TileEntityCollector) tile; - collector.incrementSize(); - collector.showBorderFor(20); - worldIn.markBlockForUpdate(x, y, z); + if(collector.getTimeSinceLastClick() < 40 && collector.getTimeSinceLastClick() > 0 ) { + collector.incrementSize(player); + collector.setTimeSinceLastClick(0); + + } + + collector.showBorderFor(40); + worldIn.markBlockForUpdate(x, y, z); return true; } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java index 6fccff3e..e40a7803 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java @@ -4,6 +4,7 @@ import java.util.List; import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -21,14 +22,30 @@ public class TileEntityCollector extends TileEntity { public int borderTimer = 0; public List itemPositions = new ArrayList<>(); private float size = 6f; + private int timeSinceLastClick = 0; + + public int getTimeSinceLastClick() { + return timeSinceLastClick; + } + + public void setTimeSinceLastClick(int timeSinceLastClick) { + this.timeSinceLastClick = timeSinceLastClick; + } public float getSize() { return size; } - public void incrementSize() { - size++; - if (size > 9) size = 1; + public void incrementSize(EntityPlayer player) { + if(player.isSneaking()){ + + size --; + if(size == 1) size = 9; + } + else { + size++; + if (size > 9) size = 1; + } } public void showBorderFor(int ticks) { @@ -40,6 +57,7 @@ public void showBorderFor(int ticks) { public void updateEntity() { if (worldObj.isRemote) { + if (borderTimer > 0) { borderTimer--; if (borderTimer <= 0) showBorder = false; @@ -55,6 +73,10 @@ public void updateEntity() { } if (!worldObj.isRemote) { + timeSinceLastClick++; + if(timeSinceLastClick > 100){ + timeSinceLastClick = 0; + } List items = worldObj.getEntitiesWithinAABB(EntityItem.class, getRadiusAABB()); TileEntity chest = worldObj.getTileEntity(xCoord, yCoord - 1, zCoord); if (!(chest instanceof IInventory)) return; diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java index dbd3ae04..edf531b4 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java @@ -4,6 +4,7 @@ import java.util.LinkedHashMap; import java.util.Map; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; @@ -21,6 +22,7 @@ public class CollectorLine extends TileEntitySpecialRenderer { public void renderTileEntityAt(TileEntity te, double x, double y, double z, float partialTicks) { if (!(te instanceof TileEntityCollector collector)) return; + if (collector.itemPositions != null) { for (Vec3 pos : collector.itemPositions) { lines.put(pos, 20); From 22b443306e223b115784e5c7fe9acfa3ce9f716b Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Sat, 6 Jun 2026 07:41:43 -0400 Subject: [PATCH 07/12] Add texture, lang, fix review comments --- .../utilitiesinexcess/ClientProxy.java | 4 +- .../utilitiesinexcess/ModBlocks.java | 2 +- .../utilitiesinexcess/UtilitiesInExcess.java | 2 +- .../utilitiesinexcess/client/IMCForNEI.java | 2 + .../common/blocks/BlockCollector.java | 10 +- .../tileentities/TileEntityCollector.java | 95 ++++++++++-------- ...lectorLine.java => CollectorRangeBox.java} | 4 +- .../assets/utilitiesinexcess/lang/en_US.lang | 4 + .../textures/blocks/collector.png | Bin 0 -> 262 bytes 9 files changed, 65 insertions(+), 58 deletions(-) rename src/main/java/com/fouristhenumber/utilitiesinexcess/render/{CollectorLine.java => CollectorRangeBox.java} (97%) create mode 100644 src/main/resources/assets/utilitiesinexcess/textures/blocks/collector.png diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java index c7b4728b..b166bb00 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java @@ -19,7 +19,7 @@ import com.fouristhenumber.utilitiesinexcess.compat.ForgeMultipart.render.item.ItemUEMultiPartRenderer; import com.fouristhenumber.utilitiesinexcess.compat.Mods; import com.fouristhenumber.utilitiesinexcess.compat.findit.FindItHelper; -import com.fouristhenumber.utilitiesinexcess.render.CollectorLine; +import com.fouristhenumber.utilitiesinexcess.render.CollectorRangeBox; import com.fouristhenumber.utilitiesinexcess.render.ISBRHUnderworldPortal; import com.fouristhenumber.utilitiesinexcess.render.TESRUnderworldPortal; import com.gtnewhorizon.gtnhlib.client.model.loading.ModelRegistry; @@ -58,7 +58,7 @@ public void init(FMLInitializationEvent event) { RenderingRegistry.registerBlockHandler(ISBRHUnderworldPortal.INSTANCE); } if (ModBlocks.COLLECTOR.isEnabled()) { - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCollector.class, new CollectorLine()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCollector.class, new CollectorRangeBox()); } if (ModItems.GLOVE.isEnabled()) { diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java index 4085f597..8a27688e 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java @@ -7,10 +7,10 @@ import net.minecraft.item.ItemStack; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockAdvancedUpdateDetector; -import com.fouristhenumber.utilitiesinexcess.common.blocks.*; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockBedrockium; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockBlackoutCurtains; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockChandelier; +import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockCollector; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockColored; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockCompressed; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockConveyor; diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java index d15eae4f..21e7391e 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java @@ -16,9 +16,9 @@ import com.fouristhenumber.utilitiesinexcess.common.renderers.LapisAetheriusRenderer; import com.fouristhenumber.utilitiesinexcess.common.renderers.SpikeRenderer; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityAdvancedBlockUpdateDetector; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.*; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityBlockUpdateDetector; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityChandelier; +import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityCollector; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityConveyor; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityDrum; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityGigaTorch; diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/client/IMCForNEI.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/client/IMCForNEI.java index e92777c3..87562665 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/client/IMCForNEI.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/client/IMCForNEI.java @@ -197,6 +197,8 @@ public static void IMCSender() { sendInfoPage("utilitiesinexcess:lapis_aetherius", "nei.infopage.uie.lapis_aetherius.1"); + sendInfoPage("utilitiesinexcess:collector", "nei.infopage.uie.collector.1"); + sendInfoPage("", "nei.infopage.uie.blackout_curtains.1"); sendInfoPage("", "nei.infopage.uie.underworld_portal.1"); diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java index 64f6026c..d0ba9e51 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java @@ -12,7 +12,8 @@ public class BlockCollector extends BlockContainer { public BlockCollector() { super(Material.rock); - setBlockName("Collector"); + setBlockName("collector"); + setBlockTextureName("utilitiesinexcess:collector"); } @Override @@ -28,12 +29,7 @@ public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer return true; } - - if(collector.getTimeSinceLastClick() < 40 && collector.getTimeSinceLastClick() > 0 ) { - collector.incrementSize(player); - collector.setTimeSinceLastClick(0); - - } + collector.incrementSize(player); collector.showBorderFor(40); worldIn.markBlockForUpdate(x, y, z); diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java index e40a7803..72c9e253 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java @@ -22,27 +22,17 @@ public class TileEntityCollector extends TileEntity { public int borderTimer = 0; public List itemPositions = new ArrayList<>(); private float size = 6f; - private int timeSinceLastClick = 0; - - public int getTimeSinceLastClick() { - return timeSinceLastClick; - } - - public void setTimeSinceLastClick(int timeSinceLastClick) { - this.timeSinceLastClick = timeSinceLastClick; - } public float getSize() { return size; } public void incrementSize(EntityPlayer player) { - if(player.isSneaking()){ + if (player.isSneaking()) { - size --; - if(size == 1) size = 9; - } - else { + size--; + if (size == 1) size = 9; + } else { size++; if (size > 9) size = 1; } @@ -55,44 +45,61 @@ public void showBorderFor(int ticks) { @Override public void updateEntity() { + AxisAlignedBB area = getRadiusAABB(); if (worldObj.isRemote) { + updateClientEffects(area); + return; + } - if (borderTimer > 0) { - borderTimer--; - if (borderTimer <= 0) showBorder = false; - } + updateServerItemInsertion(area); + } + + private void updateClientEffects(AxisAlignedBB area) { + if (borderTimer > 0 && --borderTimer <= 0) { + showBorder = false; + } + + itemPositions.clear(); + + for (EntityItem item : worldObj.getEntitiesWithinAABB(EntityItem.class, area)) { - itemPositions.clear(); - List items = worldObj.getEntitiesWithinAABB(EntityItem.class, getRadiusAABB()); - for (EntityItem item : items) { - if (!item.isDead && item.onGround) { - itemPositions.add(Vec3.createVectorHelper(item.posX, item.posY + 0.25, item.posZ)); - } + if (item.isDead || !item.onGround) { + continue; } + + itemPositions.add(Vec3.createVectorHelper(item.posX, item.posY + 0.25, item.posZ)); + } + } + + private void updateServerItemInsertion(AxisAlignedBB area) { + TileEntity te = worldObj.getTileEntity(xCoord, yCoord - 1, zCoord); + if (!(te instanceof IInventory chest)) { + return; + } + + ItemSink sink = ItemUtil.getItemSink(chest, ForgeDirection.UP); + if (sink == null) { + return; } - if (!worldObj.isRemote) { - timeSinceLastClick++; - if(timeSinceLastClick > 100){ - timeSinceLastClick = 0; + for (EntityItem item : worldObj.getEntitiesWithinAABB(EntityItem.class, area)) { + + if (item.isDead || !item.onGround || item.delayBeforeCanPickup > 0) { + continue; + } + + ItemStack stack = item.getEntityItem(); + if (stack == null) { + continue; } - List items = worldObj.getEntitiesWithinAABB(EntityItem.class, getRadiusAABB()); - TileEntity chest = worldObj.getTileEntity(xCoord, yCoord - 1, zCoord); - if (!(chest instanceof IInventory)) return; - - for (EntityItem item : items) { - if (item.isDead || !item.onGround || item.delayBeforeCanPickup > 0) continue; - - ItemStack stackInsert = item.getEntityItem(); - if (stackInsert == null) continue; - - ItemSink sink = ItemUtil.getItemSink(chest, ForgeDirection.UP); - if (sink != null) { - int leftover = sink.store(new InsertionItemStack(stackInsert)); - if (leftover <= 0) item.setDead(); - else stackInsert.stackSize = leftover; - } + + int leftover = sink.store(new InsertionItemStack(stack)); + + if (leftover <= 0) { + item.setDead(); + } else { + stack.stackSize = leftover; } } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorRangeBox.java similarity index 97% rename from src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java rename to src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorRangeBox.java index edf531b4..92982d07 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorLine.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorRangeBox.java @@ -4,7 +4,6 @@ import java.util.LinkedHashMap; import java.util.Map; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; @@ -14,7 +13,7 @@ import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityCollector; -public class CollectorLine extends TileEntitySpecialRenderer { +public class CollectorRangeBox extends TileEntitySpecialRenderer { private final Map lines = new LinkedHashMap<>(); @@ -22,7 +21,6 @@ public class CollectorLine extends TileEntitySpecialRenderer { public void renderTileEntityAt(TileEntity te, double x, double y, double z, float partialTicks) { if (!(te instanceof TileEntityCollector collector)) return; - if (collector.itemPositions != null) { for (Vec3 pos : collector.itemPositions) { lines.put(pos, 20); diff --git a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang index 734dbcdb..e18e222c 100644 --- a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang +++ b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang @@ -492,6 +492,10 @@ tile.lapis_aetherius.13.name=Lapis Aetherius Smaragdinus (Dark Green) tile.lapis_aetherius.14.name=Lapis Aetherius Sanguineus (Red) tile.lapis_aetherius.15.name=Lapis Aetherius Ater (Black) +nei.infopage.uie.collector.1=Collects things! + +tile.collector.name=Collector + nei.infopage.uie.lapis_aetherius.1=Lapis Aetherius is a luminous decorative block that comes in 16 different colors. Its bright, solid colors are sure to make your base pop! tile.blackout_curtains.name=Blackout Curtains diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/collector.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/collector.png new file mode 100644 index 0000000000000000000000000000000000000000..279bb6052288a14f67edabd951c707aead14cbe1 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|4tTmahFJ6_ z-`V;9dp#Q$12;1>bMrJS?#Nl|@BTS_phf4x)%(YRxILKJtWqrHwre>{=WXv)dg!-@b)|Pw1k93909U>z4g1&Bo Date: Sat, 6 Jun 2026 07:56:21 -0400 Subject: [PATCH 08/12] Add message, change range to match exu --- .../common/blocks/BlockCollector.java | 4 +++- .../common/tileentities/TileEntityCollector.java | 10 +++++----- .../resources/assets/utilitiesinexcess/lang/en_US.lang | 2 ++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java index d0ba9e51..ea2c27dc 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java @@ -4,6 +4,7 @@ import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentTranslation; import net.minecraft.world.World; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityCollector; @@ -30,7 +31,8 @@ public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer } collector.incrementSize(player); - + if (!worldIn.isRemote) + player.addChatMessage(new ChatComponentTranslation("uie.chat.collector_size", collector.getSize())); collector.showBorderFor(40); worldIn.markBlockForUpdate(x, y, z); return true; diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java index 72c9e253..c9a586ee 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java @@ -21,7 +21,7 @@ public class TileEntityCollector extends TileEntity { public boolean showBorder = false; public int borderTimer = 0; public List itemPositions = new ArrayList<>(); - private float size = 6f; + private float size = 4f; public float getSize() { return size; @@ -30,11 +30,11 @@ public float getSize() { public void incrementSize(EntityPlayer player) { if (player.isSneaking()) { - size--; - if (size == 1) size = 9; + size -= 0.5f; + if (size == 0f) size = 4f; } else { - size++; - if (size > 9) size = 1; + size += 0.5f; + if (size > 4f) size = 0.5f; } } diff --git a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang index e18e222c..7758d9bc 100644 --- a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang +++ b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang @@ -496,6 +496,8 @@ nei.infopage.uie.collector.1=Collects things! tile.collector.name=Collector +uie.chat.collector_size=Range: %s blocks + nei.infopage.uie.lapis_aetherius.1=Lapis Aetherius is a luminous decorative block that comes in 16 different colors. Its bright, solid colors are sure to make your base pop! tile.blackout_curtains.name=Blackout Curtains From 6fa5190c831e782c90d7378a63aa1bcb5ebe2c9e Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Sat, 6 Jun 2026 08:08:19 -0400 Subject: [PATCH 09/12] Update lang and let you open chests --- .../utilitiesinexcess/common/blocks/BlockCollector.java | 6 ++++++ src/main/resources/assets/utilitiesinexcess/lang/en_US.lang | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java index ea2c27dc..a97c71bc 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockCollector.java @@ -17,6 +17,12 @@ public BlockCollector() { setBlockTextureName("utilitiesinexcess:collector"); } + // So you can open chests under it + @Override + public boolean renderAsNormalBlock() { + return false; + } + @Override public TileEntity createNewTileEntity(World worldIn, int meta) { return new TileEntityCollector(); diff --git a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang index 7758d9bc..1f9ebe6d 100644 --- a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang +++ b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang @@ -403,7 +403,7 @@ tile.block_update_detector.name=Block Update Detector nei.infopage.uie.block_update_detector.1=This mechanism keeps tabs on neighboring blocks and will emit a redstone pulse if any of them receive a block update. tile.advanced_block_update_detector.name=Advanced Block Update Detector -nei.infopage.uie.advanced.block_update_detector.1=Like the standard Block Update Detector, this block will emit a redstone pulse on neighboring block updates. However, it also reacts to changes to tile-entity data or metadata even without a block update. Shift right click any face of the ABUD to toggle scanning on that side. +nei.infopage.uie.advanced.block_update_detector.1=Like the standard Block Update Detector, this block will emit a redstone pulse on neighboring block updates. However, it also reacts to changes to tile-entity data or metadata even without a block update. Sneak right click any face of the ABUD to toggle scanning on that side. chat.tile.advanced_block_update_detector.toggle=Side %s set to redstone output %s. tile.drum.name=Drum @@ -492,7 +492,7 @@ tile.lapis_aetherius.13.name=Lapis Aetherius Smaragdinus (Dark Green) tile.lapis_aetherius.14.name=Lapis Aetherius Sanguineus (Red) tile.lapis_aetherius.15.name=Lapis Aetherius Ater (Black) -nei.infopage.uie.collector.1=Collects things! +nei.infopage.uie.collector.1=Picks up items dropped in the world and deposits them to inventories placed under it. Right click to increment range and sneak right click to decrement. tile.collector.name=Collector From b2fd188c75d431550cfa7fb5002cd95eb685fc1c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 6 Jun 2026 08:10:16 -0400 Subject: [PATCH 10/12] Optimising images contained in kat/collect-dn for #136 (#137) Co-authored-by: GitHub GTNH Actions <33456283+FourIsTheNumber@users.noreply.github.com> --- .../textures/blocks/collector.png | Bin 262 -> 176 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/collector.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/collector.png index 279bb6052288a14f67edabd951c707aead14cbe1..0d902a3373f17f4ea836fa3b898eeb5277933342 100644 GIT binary patch delta 134 zcmV;10D1q000m zM$8c~#%2geY>R>x7{lao8h~yHvSz#nc!eavF}eZRwVQvi8$c|$cJmJ;7Ovg=LzV#y3=9ka X#fwPGPEpDI00000NkvXXu0mjfzyxOH From bda70c2a99eddf9780cf0ff24e130be1a90adfa2 Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Sat, 6 Jun 2026 08:26:10 -0400 Subject: [PATCH 11/12] Recipe --- .../common/recipe/RecipeLoader.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeLoader.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeLoader.java index d3da592f..bd3620e8 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeLoader.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeLoader.java @@ -35,6 +35,19 @@ public static void run() { loadDecorativeBlocksRecipes(); loadColoredBlockRecipes(); + // Collector + addShapedRecipe( + ModBlocks.COLLECTOR, + "eie", + " i ", + "ooo", + 'e', + Items.ender_pearl, + 'i', + ModBlocks.DECORATIVE_BLOCKS.newItemStack(1, 5), + 'o', + Blocks.obsidian); + // Pacifist's Bench addShapedRecipe( ModBlocks.PACIFISTS_BENCH, @@ -742,7 +755,7 @@ private static void loadWateringCanRecipes() { private static void loadDecorativeBlocksRecipes() { // Ender-Infused Obsidian addShapedRecipe( - new DisableableItemStack(ModBlocks.DECORATIVE_BLOCKS, 1, 5), + new DisableableItemStack(ModBlocks.DECORATIVE_BLOCKS, 4, 5), " o ", "oeo", " o ", From ac0affd0ff94f66ac41b0b971a2c402412d54e3e Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Tue, 9 Jun 2026 09:53:34 -0400 Subject: [PATCH 12/12] private showBorder --- .../common/tileentities/TileEntityCollector.java | 6 +++++- .../utilitiesinexcess/render/CollectorRangeBox.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java index c9a586ee..63af7b3b 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityCollector.java @@ -18,7 +18,7 @@ public class TileEntityCollector extends TileEntity { - public boolean showBorder = false; + private boolean showBorder = false; public int borderTimer = 0; public List itemPositions = new ArrayList<>(); private float size = 4f; @@ -113,4 +113,8 @@ private AxisAlignedBB getRadiusAABB() { yCoord + size + 1, zCoord + size + 1); } + + public boolean showBorder() { + return showBorder; + } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorRangeBox.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorRangeBox.java index 92982d07..863aafbe 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorRangeBox.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/render/CollectorRangeBox.java @@ -66,7 +66,7 @@ public void renderTileEntityAt(TileEntity te, double x, double y, double z, floa } GL11.glEnd(); - if (collector.showBorder) { + if (collector.showBorder()) { float r = collector.getSize(); GL11.glLineWidth(3.0f); GL11.glBegin(GL11.GL_LINES);