From ef320eabd8461a678a6cd4b98698a83d3de704aa Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Sat, 8 Nov 2025 04:53:48 -0500 Subject: [PATCH 01/28] QED base --- .../utilitiesinexcess/ModBlocks.java | 2 + .../utilitiesinexcess/UtilitiesInExcess.java | 2 + .../common/blocks/BlockQED.java | 34 +++ .../common/tileentities/TileEntityQED.java | 225 ++++++++++++++++++ .../assets/utilitiesinexcess/lang/en_US.lang | 1 + .../utilitiesinexcess/textures/blocks/qed.png | Bin 0 -> 229 bytes 6 files changed, 264 insertions(+) create mode 100644 src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java create mode 100644 src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java create mode 100644 src/main/resources/assets/utilitiesinexcess/textures/blocks/qed.png diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java index 863103c7d..7d923aaa2 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java @@ -21,6 +21,7 @@ import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockMarginallyMaximisedChest; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockPortalUnderWorld; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockPureLove; +import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockQED; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockRainMuffler; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockRedstoneClock; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockSignificantlyShrunkChest; @@ -99,6 +100,7 @@ public enum ModBlocks { SPIKE_GOLD(BlockConfig.spikes.enableGoldSpike, new BlockSpike(BlockSpike.SpikeType.GOLD, "goldSpike"), BlockSpike.ItemSpike.class, "goldSpike"), SPIKE_DIAMOND(BlockConfig.spikes.enableDiamondSpike, new BlockSpike(BlockSpike.SpikeType.DIAMOND, "diamondSpike"), BlockSpike.ItemSpike.class, "diamondSpike"), UNDERWORLD_PORTAL(BlockConfig.enableUnderWorldPortal && UnderWorldConfig.enableUnderWorld, new BlockPortalUnderWorld(), "underworld_portal"), + QED(true, new BlockQED(), "uieqed") ; // 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 c6f216ef1..4e72a001c 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java @@ -17,6 +17,7 @@ import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityMarginallyMaximisedChest; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityPortalUnderWorld; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityPureLove; +import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityQED; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityRainMuffler; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityRedstoneClock; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntitySignificantlyShrunkChest; @@ -105,6 +106,7 @@ public void init(FMLInitializationEvent event) { GameRegistry.registerTileEntity(TileEntityBlockUpdateDetector.class, "TileEntityBlockUpdateDetector"); GameRegistry.registerTileEntity(TileEntityConveyor.class, "TileEntityConveyor"); GameRegistry.registerTileEntity(TileEntityPortalUnderWorld.class, "TileEntityPortalUnderWorld"); + GameRegistry.registerTileEntity(TileEntityQED.class, "TileEntityQEDUIE"); GameRegistry.registerTileEntity( TileEntityLowTemperatureFurnaceGenerator.class, diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java new file mode 100644 index 000000000..122b19933 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java @@ -0,0 +1,34 @@ +package com.fouristhenumber.utilitiesinexcess.common.blocks; + +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import com.cleanroommc.modularui.factory.GuiFactories; +import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityQED; + +public class BlockQED extends BlockContainer { + + public BlockQED() { + super(Material.iron); + setBlockName("qed"); + setBlockTextureName("utilitiesinexcess:qed"); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) { + return new TileEntityQED(); + } + + @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) { + GuiFactories.tileEntity() + .open(player, x, y, z); + } + return true; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java new file mode 100644 index 000000000..3c74c2ac1 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java @@ -0,0 +1,225 @@ +package com.fouristhenumber.utilitiesinexcess.common.tileentities; + +import com.cleanroommc.modularui.api.IGuiHolder; +import com.cleanroommc.modularui.api.drawable.IDrawable; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.drawable.ItemDrawable; +import com.cleanroommc.modularui.factory.PosGuiData; +import com.cleanroommc.modularui.factory.inventory.ItemHandler; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.screen.UISettings; +import com.cleanroommc.modularui.screen.viewport.ModularGuiContext; +import com.cleanroommc.modularui.theme.WidgetTheme; +import com.cleanroommc.modularui.utils.ItemStackItemHandler; +import com.cleanroommc.modularui.utils.item.IItemHandler; +import com.cleanroommc.modularui.utils.item.InvWrapper; +import com.cleanroommc.modularui.utils.item.ItemStackHandler; +import com.cleanroommc.modularui.value.sync.GenericSyncValue; +import com.cleanroommc.modularui.value.sync.PanelSyncManager; +import com.cleanroommc.modularui.value.sync.SyncHandler; +import com.cleanroommc.modularui.value.sync.SyncHandlers; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.ItemDisplayWidget; +import com.cleanroommc.modularui.widgets.ProgressWidget; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import com.cleanroommc.modularui.widgets.slot.ItemSlot; +import com.cleanroommc.modularui.widgets.slot.ModularSlot; +import com.cleanroommc.modularui.widgets.slot.PhantomItemSlot; +import com.fouristhenumber.utilitiesinexcess.api.QEDRegistry; +import com.fouristhenumber.utilitiesinexcess.compat.nei.QEDRecipeHandler; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.Constants; +import org.lwjgl.opengl.GL11; + +import static com.cleanroommc.modularui.drawable.GuiTextures.PROGRESS_ARROW; + +public class TileEntityQED extends TileEntity implements IInventory, IGuiHolder { + private final InventoryCrafting craftMatrix = new InventoryCrafting(new ContainerDummy(), 3, 3); + private final InventoryCraftResult craftResult = new InventoryCraftResult(); + + private static final ItemStack fakeItem = new ItemStack(new Item()); + private ItemStack preview = fakeItem; + + + @Override + public void updateEntity() { + + super.updateEntity(); + } + + private void updateCraftingResult() { + ItemStack stack = QEDRegistry.instance().findRecipe(craftMatrix, false); + preview = stack == null ? fakeItem : stack; + } + + @Override + public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) { + + ModularPanel panel = new ModularPanel("panel"); + panel.bindPlayerInventory(); + + syncManager.syncValue("preview", GenericSyncValue.forItem(() -> preview, null)); + + // Add title + panel.child( + new ParentWidget<>().coverChildren() + .topRelAnchor(0, 1) + .child( + IKey.str(StatCollector.translateToLocal(getInventoryName())) + .asWidget() + .marginLeft(5) + .marginRight(5) + .marginTop(5) + .marginBottom(-15))); + + IItemHandler itemHandler = new InvWrapper(this); + + // Input slots + panel.child(SlotGroupWidget.builder() + .matrix("III", "III", "III") + .key('I', index -> new ItemSlot().slot(new ModularSlot(itemHandler, index))).build() + .marginTop(20) + .marginLeft(37)); + + // Progress bar + panel.child(new ProgressWidget() + .texture(PROGRESS_ARROW, 20) + .marginTop(38) + .marginLeft(97)); + + // Preview slot + panel.child(new ItemDisplayWidget() + .syncHandler("preview") + .marginTop(15) + .marginLeft(97)); + + // Output slot + panel.child(new ItemSlot() + .slot(new ModularSlot(itemHandler, 9)) + .marginTop(38) + .marginLeft(121)); + + return panel; + } + + @Override + public int getSizeInventory() { + return 10; + } + + @Override + public String getInventoryName() { + return "tile.qed.name"; + } + + @Override + public ItemStack getStackInSlot(int index) { + return index < 9 ? craftMatrix.getStackInSlot(index) : craftResult.getStackInSlot(0); + } + + @Override + public ItemStack decrStackSize(int index, int count) { + ItemStack stack; + if (index < 9) { + stack = craftMatrix.decrStackSize(index, count); + } else { + stack = craftResult.decrStackSize(0, count); + } + markDirty(); + return stack; + } + + @Override + public ItemStack getStackInSlotOnClosing(int index) { + return index < 9 ? craftMatrix.getStackInSlotOnClosing(index) : craftResult.getStackInSlotOnClosing(0); + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) { + if (index < 9) { + craftMatrix.setInventorySlotContents(index, stack); + updateCraftingResult(); + } else { + craftResult.setInventorySlotContents(0, stack); + } + markDirty(); + } + + @Override + public boolean hasCustomInventoryName() { + return false; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) == this && player + .getDistanceSq((double) this.xCoord + 0.5D, (double) this.yCoord + 0.5D, (double) this.zCoord + 0.5D) + <= 64.0D; + } + + @Override + public void openInventory() {} + + @Override + public void closeInventory() {} + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack) { + return true; + } + + @Override + public void readFromNBT(NBTTagCompound nbttagcompound) { + super.readFromNBT(nbttagcompound); + NBTTagList nbttaglist = nbttagcompound.getTagList("Items", Constants.NBT.TAG_COMPOUND); + for (int index = 0; index < nbttaglist.tagCount(); index++) { + NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(index); + int slot = nbttagcompound1.getByte("Slot") & 255; + if (slot < getSizeInventory()) { + setInventorySlotContents(slot, ItemStack.loadItemStackFromNBT(nbttagcompound1)); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbttagcompound) { + super.writeToNBT(nbttagcompound); + NBTTagList nbttaglist = new NBTTagList(); + for (int index = 0; index < getSizeInventory(); index++) { + ItemStack curStack = getStackInSlot(index); + if (curStack != null) { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + nbttagcompound1.setByte("Slot", (byte) index); + curStack.writeToNBT(nbttagcompound1); + nbttaglist.appendTag(nbttagcompound1); + } + } + nbttagcompound.setTag("Items", nbttaglist); + } + + public static class ContainerDummy extends Container { + public ContainerDummy() { + } + + public boolean canInteractWith(EntityPlayer var1) { + return false; + } + } +} diff --git a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang index 2f3a1f8bd..8df06c87e 100644 --- a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang +++ b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang @@ -169,6 +169,7 @@ gui.energy.tooltip=RF: %s / %s item.golden_bag.name=Golden Bag of Holding item.golden_bag.desc=Carries a double chest worth of items +tile.qed.name=QED utilitiesinexcess.config.block.ender_lotus=Ender Lotus diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e4ec1be0d862547930928dd5050ad49d2345f8 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|=6kw0hFJ6_ z=V;CNG{3R2@!^}vuX&a*Buo0Tfq+_(iSp}2C3oXZiaG{;K{q@>f^F5S&jkK3D9E2` z*(L?#cQAS-st1}Jx^aT*B5%`4!- Date: Sat, 8 Nov 2025 06:27:07 -0500 Subject: [PATCH 02/28] Semi-functional QED --- .../utilitiesinexcess/ModBlocks.java | 4 +- .../common/blocks/BlockFluxCrystal.java | 45 ++++++ .../common/blocks/BlockQED.java | 31 ++++ .../common/tileentities/TileEntityQED.java | 149 ++++++++++++------ .../config/blocks/BlockConfig.java | 3 + .../utilitiesinexcess/utils/UIEUtils.java | 30 ++++ .../assets/utilitiesinexcess/lang/en_US.lang | 1 + .../textures/blocks/flux_crystal.png | Bin 0 -> 141 bytes 8 files changed, 211 insertions(+), 52 deletions(-) create mode 100644 src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java create mode 100644 src/main/resources/assets/utilitiesinexcess/textures/blocks/flux_crystal.png diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java index 7d923aaa2..72c96545e 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java @@ -15,6 +15,7 @@ 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.BlockFluxCrystal; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockInverted; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockLapisAetherius; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockMagicWood; @@ -100,7 +101,8 @@ public enum ModBlocks { SPIKE_GOLD(BlockConfig.spikes.enableGoldSpike, new BlockSpike(BlockSpike.SpikeType.GOLD, "goldSpike"), BlockSpike.ItemSpike.class, "goldSpike"), SPIKE_DIAMOND(BlockConfig.spikes.enableDiamondSpike, new BlockSpike(BlockSpike.SpikeType.DIAMOND, "diamondSpike"), BlockSpike.ItemSpike.class, "diamondSpike"), UNDERWORLD_PORTAL(BlockConfig.enableUnderWorldPortal && UnderWorldConfig.enableUnderWorld, new BlockPortalUnderWorld(), "underworld_portal"), - QED(true, new BlockQED(), "uieqed") + QED(BlockConfig.enableQED, new BlockQED(), "qed"), + FLUX_CRYSTAL(BlockConfig.enableQED, new BlockFluxCrystal(), "flux_crystal"), ; // leave trailing semicolon // spotless:on diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java new file mode 100644 index 000000000..8d4838884 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java @@ -0,0 +1,45 @@ +package com.fouristhenumber.utilitiesinexcess.common.blocks; + +import static codechicken.nei.NEIClientConfig.world; +import static com.fouristhenumber.utilitiesinexcess.utils.UIEUtils.scanForBlock; + +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.world.World; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityQED; +import com.gtnewhorizon.gtnhlib.blockpos.BlockPos; + +public class BlockFluxCrystal extends Block { + + public BlockFluxCrystal() { + super(Material.iron); + setBlockName("flux_crystal"); + setBlockTextureName("utilitiesinexcess:flux_crystal"); + } + + @Override + public void onBlockAdded(World world, int x, int y, int z) { + Set positions = scanForBlock(world, x, y, z, 9, ModBlocks.QED.get()); + + for (BlockPos pos : positions) { + TileEntityQED qed = (TileEntityQED) world.getTileEntity(pos.x, pos.y, pos.z); + qed.addCrystal(new BlockPos(x, y, z)); + } + super.onBlockAdded(world, x, y, z); + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block blockBroken, int meta) { + Set positions = scanForBlock(world, x, y, z, 9, ModBlocks.QED.get()); + + for (BlockPos pos : positions) { + TileEntityQED qed = (TileEntityQED) world.getTileEntity(pos.x, pos.y, pos.z); + qed.removeCrystal(new BlockPos(x, y, z)); + } + super.breakBlock(world, x, y, z, blockBroken, meta); + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java index 122b19933..176264997 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java @@ -1,5 +1,10 @@ package com.fouristhenumber.utilitiesinexcess.common.blocks; +import static com.fouristhenumber.utilitiesinexcess.utils.UIEUtils.scanForBlock; + +import java.util.Set; + +import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; @@ -7,7 +12,9 @@ import net.minecraft.world.World; import com.cleanroommc.modularui.factory.GuiFactories; +import com.fouristhenumber.utilitiesinexcess.ModBlocks; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityQED; +import com.gtnewhorizon.gtnhlib.blockpos.BlockPos; public class BlockQED extends BlockContainer { @@ -30,5 +37,29 @@ public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer .open(player, x, y, z); } return true; + + } + + @Override + public void onBlockAdded(World world, int x, int y, int z) { + Set positions = scanForBlock(world, x, y, z, 9, ModBlocks.FLUX_CRYSTAL.get()); + TileEntityQED qed = (TileEntityQED) world.getTileEntity(x, y, z); + + for (BlockPos pos : positions) { + qed.addCrystal(new BlockPos(pos.x, pos.y, pos.z)); + } + + super.onBlockAdded(world, x, y, z); + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block blockBroken, int meta) { + Set positions = scanForBlock(world, x, y, z, 9, ModBlocks.FLUX_CRYSTAL.get()); + TileEntityQED qed = (TileEntityQED) world.getTileEntity(x, y, z); + + for (BlockPos pos : positions) { + qed.removeCrystal(new BlockPos(pos.x, pos.y, pos.z)); + } + super.breakBlock(world, x, y, z, blockBroken, meta); } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java index 3c74c2ac1..e59205729 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java @@ -1,67 +1,103 @@ package com.fouristhenumber.utilitiesinexcess.common.tileentities; +import static com.cleanroommc.modularui.drawable.GuiTextures.PROGRESS_ARROW; + +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.Constants; + import com.cleanroommc.modularui.api.IGuiHolder; -import com.cleanroommc.modularui.api.drawable.IDrawable; import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.drawable.ItemDrawable; import com.cleanroommc.modularui.factory.PosGuiData; -import com.cleanroommc.modularui.factory.inventory.ItemHandler; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.screen.UISettings; -import com.cleanroommc.modularui.screen.viewport.ModularGuiContext; -import com.cleanroommc.modularui.theme.WidgetTheme; -import com.cleanroommc.modularui.utils.ItemStackItemHandler; import com.cleanroommc.modularui.utils.item.IItemHandler; import com.cleanroommc.modularui.utils.item.InvWrapper; -import com.cleanroommc.modularui.utils.item.ItemStackHandler; +import com.cleanroommc.modularui.value.sync.DoubleSyncValue; import com.cleanroommc.modularui.value.sync.GenericSyncValue; +import com.cleanroommc.modularui.value.sync.IntSyncValue; import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import com.cleanroommc.modularui.value.sync.SyncHandler; -import com.cleanroommc.modularui.value.sync.SyncHandlers; import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.ItemDisplayWidget; import com.cleanroommc.modularui.widgets.ProgressWidget; import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.slot.ItemSlot; import com.cleanroommc.modularui.widgets.slot.ModularSlot; -import com.cleanroommc.modularui.widgets.slot.PhantomItemSlot; import com.fouristhenumber.utilitiesinexcess.api.QEDRegistry; -import com.fouristhenumber.utilitiesinexcess.compat.nei.QEDRecipeHandler; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.InventoryCraftResult; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.Constants; -import org.lwjgl.opengl.GL11; - -import static com.cleanroommc.modularui.drawable.GuiTextures.PROGRESS_ARROW; +import com.gtnewhorizon.gtnhlib.blockpos.BlockPos; public class TileEntityQED extends TileEntity implements IInventory, IGuiHolder { + private final InventoryCrafting craftMatrix = new InventoryCrafting(new ContainerDummy(), 3, 3); private final InventoryCraftResult craftResult = new InventoryCraftResult(); private static final ItemStack fakeItem = new ItemStack(new Item()); private ItemStack preview = fakeItem; + private int craftingProgress = 0; + private boolean crafting = false; + private final Set crystals = new HashSet<>(); @Override public void updateEntity() { - + if (crafting) { + for (BlockPos ignored : crystals) { + craftingProgress++; + } + } + if (craftingProgress >= 500) { + ItemStack newStack = QEDRegistry.instance() + .findRecipe(craftMatrix, true); + if (newStack != null) { + ItemStack outputStack = craftResult.getStackInSlot(0); + + if (outputStack == null) craftResult.setInventorySlotContents(0, newStack); + else outputStack.stackSize += newStack.stackSize; + } + craftingProgress = 0; + crafting = false; + updateCraftingResult(); + } super.updateEntity(); } private void updateCraftingResult() { - ItemStack stack = QEDRegistry.instance().findRecipe(craftMatrix, false); - preview = stack == null ? fakeItem : stack; + ItemStack stack = QEDRegistry.instance() + .findRecipe(craftMatrix, false); + + crafting = stack != null && canInsertToOutput(stack); + preview = stack != null ? stack : fakeItem; + } + + public boolean canInsertToOutput(ItemStack toInsert) { + ItemStack outputStack = craftResult.getStackInSlot(0); + if (outputStack == null) return true; + + if (!outputStack.isItemEqual(toInsert) || !ItemStack.areItemStackTagsEqual(outputStack, toInsert)) { + return false; + } + + return (outputStack.stackSize + toInsert.stackSize) <= outputStack.getMaxStackSize(); + } + + public void addCrystal(BlockPos position) { + crystals.add(position); + } + + public void removeCrystal(BlockPos position) { + crystals.remove(position); } @Override @@ -71,6 +107,8 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet panel.bindPlayerInventory(); syncManager.syncValue("preview", GenericSyncValue.forItem(() -> preview, null)); + IntSyncValue craftingSyncer = new IntSyncValue(() -> craftingProgress); + syncManager.syncValue("craftingProgress", craftingSyncer); // Add title panel.child( @@ -87,29 +125,39 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet IItemHandler itemHandler = new InvWrapper(this); // Input slots - panel.child(SlotGroupWidget.builder() - .matrix("III", "III", "III") - .key('I', index -> new ItemSlot().slot(new ModularSlot(itemHandler, index))).build() - .marginTop(20) - .marginLeft(37)); + panel.child( + SlotGroupWidget.builder() + .matrix("III", "III", "III") + .key( + 'I', + index -> new ItemSlot().slot( + new ModularSlot(itemHandler, index).changeListener((w, x, y, z) -> updateCraftingResult()))) + .build() + .marginTop(20) + .marginLeft(37)); // Progress bar - panel.child(new ProgressWidget() - .texture(PROGRESS_ARROW, 20) - .marginTop(38) - .marginLeft(97)); + panel.child( + new ProgressWidget().texture(PROGRESS_ARROW, 20) + .value(new DoubleSyncValue(() -> (double) craftingSyncer.getIntValue() / 500)) + .marginTop(38) + .marginLeft(97)); // Preview slot - panel.child(new ItemDisplayWidget() - .syncHandler("preview") - .marginTop(15) - .marginLeft(97)); + panel.child( + new ItemDisplayWidget().syncHandler("preview") + .marginTop(15) + .marginLeft(97)); // Output slot - panel.child(new ItemSlot() - .slot(new ModularSlot(itemHandler, 9)) - .marginTop(38) - .marginLeft(121)); + panel + .child( + new ItemSlot() + .slot( + new ModularSlot(itemHandler, 9).changeListener((w, x, y, z) -> updateCraftingResult()) + .accessibility(false, true)) + .marginTop(38) + .marginLeft(121)); return panel; } @@ -150,7 +198,6 @@ public ItemStack getStackInSlotOnClosing(int index) { public void setInventorySlotContents(int index, ItemStack stack) { if (index < 9) { craftMatrix.setInventorySlotContents(index, stack); - updateCraftingResult(); } else { craftResult.setInventorySlotContents(0, stack); } @@ -215,8 +262,8 @@ public void writeToNBT(NBTTagCompound nbttagcompound) { } public static class ContainerDummy extends Container { - public ContainerDummy() { - } + + public ContainerDummy() {} public boolean canInteractWith(EntityPlayer var1) { return false; 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 0345bca5c..5c3e956b0 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/config/blocks/BlockConfig.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/config/blocks/BlockConfig.java @@ -76,6 +76,9 @@ public static void registerConfig() throws ConfigException { @Config.DefaultBoolean(true) public static boolean enableUnderWorldPortal; + @Config.DefaultBoolean(true) + public static boolean enableQED; + @Config.Comment("Cursed Earth Configuration") public static final CursedEarth cursedEarth = new CursedEarth(); diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java index aeea24641..cccac564e 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java @@ -1,7 +1,14 @@ package com.fouristhenumber.utilitiesinexcess.utils; import java.text.DecimalFormat; +import java.util.HashSet; import java.util.Random; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.world.World; + +import com.gtnewhorizon.gtnhlib.blockpos.BlockPos; public class UIEUtils { @@ -24,4 +31,27 @@ public static String formatNumber(double number) { public static String formatNumber(float number) { return COMMA_FORMAT.format(number); } + + public static Set scanForBlock(World world, int x, int y, int z, int radius, Block findBlock) { + Set positions = new HashSet<>(); + for (int dx = -radius; dx <= radius; dx++) { + for (int dy = -radius; dy <= radius; dy++) { + int rem = radius - (Math.abs(dx) + Math.abs(dy)); + if (rem < 0) continue; + + for (int dz = -rem; dz <= rem; dz++) { + if (Math.abs(dx) + Math.abs(dy) + Math.abs(dz) > radius) continue; + + int nx = x + dx; + int ny = y + dy; + int nz = z + dz; + + if (!world.blockExists(nx, ny, nz)) continue; + + if (world.getBlock(nx, ny, nz) == findBlock) positions.add(new BlockPos(nx, ny, nz)); + } + } + } + return positions; + } } diff --git a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang index 8df06c87e..577579013 100644 --- a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang +++ b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang @@ -170,6 +170,7 @@ item.golden_bag.name=Golden Bag of Holding item.golden_bag.desc=Carries a double chest worth of items tile.qed.name=QED +tile.flux_crystal.name=Flux Crystal utilitiesinexcess.config.block.ender_lotus=Ender Lotus diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/flux_crystal.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/flux_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..53ff07d57513a2536183124a71d6068244a3e408 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|+&x_!Lo9le zx2%cyIKQ#6QE|hK$&Df#_LW;RgMhH*tchO@%J%;IF+b(5M? Date: Sat, 8 Nov 2025 13:52:22 -0500 Subject: [PATCH 03/28] Fix crystal syncing --- .../common/blocks/BlockQED.java | 31 ------------------- .../common/tileentities/TileEntityQED.java | 30 +++++++++++++++++- 2 files changed, 29 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java index 176264997..122b19933 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java @@ -1,10 +1,5 @@ package com.fouristhenumber.utilitiesinexcess.common.blocks; -import static com.fouristhenumber.utilitiesinexcess.utils.UIEUtils.scanForBlock; - -import java.util.Set; - -import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; @@ -12,9 +7,7 @@ import net.minecraft.world.World; import com.cleanroommc.modularui.factory.GuiFactories; -import com.fouristhenumber.utilitiesinexcess.ModBlocks; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityQED; -import com.gtnewhorizon.gtnhlib.blockpos.BlockPos; public class BlockQED extends BlockContainer { @@ -37,29 +30,5 @@ public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer .open(player, x, y, z); } return true; - - } - - @Override - public void onBlockAdded(World world, int x, int y, int z) { - Set positions = scanForBlock(world, x, y, z, 9, ModBlocks.FLUX_CRYSTAL.get()); - TileEntityQED qed = (TileEntityQED) world.getTileEntity(x, y, z); - - for (BlockPos pos : positions) { - qed.addCrystal(new BlockPos(pos.x, pos.y, pos.z)); - } - - super.onBlockAdded(world, x, y, z); - } - - @Override - public void breakBlock(World world, int x, int y, int z, Block blockBroken, int meta) { - Set positions = scanForBlock(world, x, y, z, 9, ModBlocks.FLUX_CRYSTAL.get()); - TileEntityQED qed = (TileEntityQED) world.getTileEntity(x, y, z); - - for (BlockPos pos : positions) { - qed.removeCrystal(new BlockPos(pos.x, pos.y, pos.z)); - } - super.breakBlock(world, x, y, z, blockBroken, meta); } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java index e59205729..62ef32de7 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java @@ -1,6 +1,7 @@ package com.fouristhenumber.utilitiesinexcess.common.tileentities; import static com.cleanroommc.modularui.drawable.GuiTextures.PROGRESS_ARROW; +import static com.fouristhenumber.utilitiesinexcess.utils.UIEUtils.scanForBlock; import java.util.HashSet; import java.util.Set; @@ -35,6 +36,7 @@ import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.slot.ItemSlot; import com.cleanroommc.modularui.widgets.slot.ModularSlot; +import com.fouristhenumber.utilitiesinexcess.ModBlocks; import com.fouristhenumber.utilitiesinexcess.api.QEDRegistry; import com.gtnewhorizon.gtnhlib.blockpos.BlockPos; @@ -49,11 +51,16 @@ public class TileEntityQED extends TileEntity implements IInventory, IGuiHolder< private int craftingProgress = 0; private boolean crafting = false; private final Set crystals = new HashSet<>(); + public boolean queuedScan = false; @Override public void updateEntity() { + if (worldObj.getTotalWorldTime() % 20 == 0 && queuedScan) { + scan(); + queuedScan = false; + } if (crafting) { - for (BlockPos ignored : crystals) { + for (BlockPos pos : crystals) { craftingProgress++; } } @@ -73,6 +80,19 @@ public void updateEntity() { super.updateEntity(); } + private void scan() { + Set positions = scanForBlock(worldObj, xCoord, yCoord, zCoord, 9, ModBlocks.FLUX_CRYSTAL.get()); + for (BlockPos pos : positions) { + addCrystal(new BlockPos(pos.x, pos.y, pos.z)); + } + } + + @Override + public void validate() { + queuedScan = true; + super.validate(); + } + private void updateCraftingResult() { ItemStack stack = QEDRegistry.instance() .findRecipe(craftMatrix, false); @@ -108,7 +128,9 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet syncManager.syncValue("preview", GenericSyncValue.forItem(() -> preview, null)); IntSyncValue craftingSyncer = new IntSyncValue(() -> craftingProgress); + IntSyncValue connected = new IntSyncValue(crystals::size); syncManager.syncValue("craftingProgress", craftingSyncer); + syncManager.syncValue("connected", connected); // Add title panel.child( @@ -122,6 +144,12 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .marginTop(5) .marginBottom(-15))); + panel.child( + IKey.dynamic(connected::getStringValue) + .asWidget() + .marginTop(70) + .marginLeft(10)); + IItemHandler itemHandler = new InvWrapper(this); // Input slots From 039058aae69da490f5a4235cbfb74d13764c6b5a Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Fri, 14 Nov 2025 19:52:10 -0500 Subject: [PATCH 04/28] Address comments --- .../common/blocks/BlockFluxCrystal.java | 32 ----------- .../common/tileentities/TileEntityQED.java | 56 +++++++------------ .../utilitiesinexcess/utils/UIEUtils.java | 7 ++- 3 files changed, 27 insertions(+), 68 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java index 8d4838884..8a349efb9 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java @@ -1,17 +1,7 @@ package com.fouristhenumber.utilitiesinexcess.common.blocks; -import static codechicken.nei.NEIClientConfig.world; -import static com.fouristhenumber.utilitiesinexcess.utils.UIEUtils.scanForBlock; - -import java.util.Set; - import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.world.World; - -import com.fouristhenumber.utilitiesinexcess.ModBlocks; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityQED; -import com.gtnewhorizon.gtnhlib.blockpos.BlockPos; public class BlockFluxCrystal extends Block { @@ -20,26 +10,4 @@ public BlockFluxCrystal() { setBlockName("flux_crystal"); setBlockTextureName("utilitiesinexcess:flux_crystal"); } - - @Override - public void onBlockAdded(World world, int x, int y, int z) { - Set positions = scanForBlock(world, x, y, z, 9, ModBlocks.QED.get()); - - for (BlockPos pos : positions) { - TileEntityQED qed = (TileEntityQED) world.getTileEntity(pos.x, pos.y, pos.z); - qed.addCrystal(new BlockPos(x, y, z)); - } - super.onBlockAdded(world, x, y, z); - } - - @Override - public void breakBlock(World world, int x, int y, int z, Block blockBroken, int meta) { - Set positions = scanForBlock(world, x, y, z, 9, ModBlocks.QED.get()); - - for (BlockPos pos : positions) { - TileEntityQED qed = (TileEntityQED) world.getTileEntity(pos.x, pos.y, pos.z); - qed.removeCrystal(new BlockPos(x, y, z)); - } - super.breakBlock(world, x, y, z, blockBroken, meta); - } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java index 62ef32de7..e0a5b2f77 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java @@ -3,7 +3,6 @@ import static com.cleanroommc.modularui.drawable.GuiTextures.PROGRESS_ARROW; import static com.fouristhenumber.utilitiesinexcess.utils.UIEUtils.scanForBlock; -import java.util.HashSet; import java.util.Set; import net.minecraft.entity.player.EntityPlayer; @@ -37,6 +36,7 @@ import com.cleanroommc.modularui.widgets.slot.ItemSlot; import com.cleanroommc.modularui.widgets.slot.ModularSlot; import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.fouristhenumber.utilitiesinexcess.UtilitiesInExcess; import com.fouristhenumber.utilitiesinexcess.api.QEDRegistry; import com.gtnewhorizon.gtnhlib.blockpos.BlockPos; @@ -50,19 +50,12 @@ public class TileEntityQED extends TileEntity implements IInventory, IGuiHolder< private int craftingProgress = 0; private boolean crafting = false; - private final Set crystals = new HashSet<>(); - public boolean queuedScan = false; + private int crystals = 0; @Override public void updateEntity() { - if (worldObj.getTotalWorldTime() % 20 == 0 && queuedScan) { - scan(); - queuedScan = false; - } if (crafting) { - for (BlockPos pos : crystals) { - craftingProgress++; - } + craftingProgress += crystals; } if (craftingProgress >= 500) { ItemStack newStack = QEDRegistry.instance() @@ -71,7 +64,9 @@ public void updateEntity() { ItemStack outputStack = craftResult.getStackInSlot(0); if (outputStack == null) craftResult.setInventorySlotContents(0, newStack); - else outputStack.stackSize += newStack.stackSize; + else if (canInsertToOutput(newStack)) outputStack.stackSize += newStack.stackSize; + else UtilitiesInExcess.LOG + .error("Failed to complete QED recipe because output stack did not match craft result."); } craftingProgress = 0; crafting = false; @@ -82,21 +77,14 @@ public void updateEntity() { private void scan() { Set positions = scanForBlock(worldObj, xCoord, yCoord, zCoord, 9, ModBlocks.FLUX_CRYSTAL.get()); - for (BlockPos pos : positions) { - addCrystal(new BlockPos(pos.x, pos.y, pos.z)); - } - } - - @Override - public void validate() { - queuedScan = true; - super.validate(); + crystals = positions.size(); } private void updateCraftingResult() { ItemStack stack = QEDRegistry.instance() .findRecipe(craftMatrix, false); + if (stack != null) scan(); crafting = stack != null && canInsertToOutput(stack); preview = stack != null ? stack : fakeItem; } @@ -112,14 +100,6 @@ public boolean canInsertToOutput(ItemStack toInsert) { return (outputStack.stackSize + toInsert.stackSize) <= outputStack.getMaxStackSize(); } - public void addCrystal(BlockPos position) { - crystals.add(position); - } - - public void removeCrystal(BlockPos position) { - crystals.remove(position); - } - @Override public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) { @@ -128,7 +108,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet syncManager.syncValue("preview", GenericSyncValue.forItem(() -> preview, null)); IntSyncValue craftingSyncer = new IntSyncValue(() -> craftingProgress); - IntSyncValue connected = new IntSyncValue(crystals::size); + IntSyncValue connected = new IntSyncValue(() -> crystals); syncManager.syncValue("craftingProgress", craftingSyncer); syncManager.syncValue("connected", connected); @@ -261,9 +241,9 @@ public boolean isItemValidForSlot(int index, ItemStack stack) { } @Override - public void readFromNBT(NBTTagCompound nbttagcompound) { - super.readFromNBT(nbttagcompound); - NBTTagList nbttaglist = nbttagcompound.getTagList("Items", Constants.NBT.TAG_COMPOUND); + public void readFromNBT(NBTTagCompound tag) { + super.readFromNBT(tag); + NBTTagList nbttaglist = tag.getTagList("Items", Constants.NBT.TAG_COMPOUND); for (int index = 0; index < nbttaglist.tagCount(); index++) { NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(index); int slot = nbttagcompound1.getByte("Slot") & 255; @@ -271,11 +251,14 @@ public void readFromNBT(NBTTagCompound nbttagcompound) { setInventorySlotContents(slot, ItemStack.loadItemStackFromNBT(nbttagcompound1)); } } + craftingProgress = tag.getInteger("craftingProgress"); + crafting = tag.getBoolean("crafting"); + crystals = tag.getInteger("crystals"); } @Override - public void writeToNBT(NBTTagCompound nbttagcompound) { - super.writeToNBT(nbttagcompound); + public void writeToNBT(NBTTagCompound tag) { + super.writeToNBT(tag); NBTTagList nbttaglist = new NBTTagList(); for (int index = 0; index < getSizeInventory(); index++) { ItemStack curStack = getStackInSlot(index); @@ -286,7 +269,10 @@ public void writeToNBT(NBTTagCompound nbttagcompound) { nbttaglist.appendTag(nbttagcompound1); } } - nbttagcompound.setTag("Items", nbttaglist); + tag.setTag("Items", nbttaglist); + tag.setInteger("craftingProgres", craftingProgress); + tag.setBoolean("crafting", crafting); + tag.setInteger("crystals", crystals); } public static class ContainerDummy extends Container { diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java index cccac564e..9fb33203f 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java @@ -33,6 +33,10 @@ public static String formatNumber(float number) { } public static Set scanForBlock(World world, int x, int y, int z, int radius, Block findBlock) { + return scanForBlock(world, x, y, z, radius, findBlock, 0); + } + + public static Set scanForBlock(World world, int x, int y, int z, int radius, Block findBlock, int meta) { Set positions = new HashSet<>(); for (int dx = -radius; dx <= radius; dx++) { for (int dy = -radius; dy <= radius; dy++) { @@ -48,7 +52,8 @@ public static Set scanForBlock(World world, int x, int y, int z, int r if (!world.blockExists(nx, ny, nz)) continue; - if (world.getBlock(nx, ny, nz) == findBlock) positions.add(new BlockPos(nx, ny, nz)); + if (world.getBlock(nx, ny, nz) == findBlock && world.getBlockMetadata(nx, ny, nz) == meta) + positions.add(new BlockPos(nx, ny, nz)); } } } From aa779d34aa9ce90074aeebe8fe113a5112272524 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 20 Nov 2025 21:46:45 -0500 Subject: [PATCH 05/28] Spotless apply for branch QED for #62 (#67) Co-authored-by: GitHub GTNH Actions <> --- .../utilitiesinexcess/config/blocks/BlockConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 cd0afd70c..88e7d951f 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/config/blocks/BlockConfig.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/config/blocks/BlockConfig.java @@ -84,7 +84,7 @@ public static void registerConfig() throws ConfigException { @Config.DefaultBoolean(true) public static boolean enableQED; - + @Config.DefaultBoolean(true) public static boolean enableDecorativeGlass; From e18ed9cb1b122610201b35e7c44bf6d819da4f34 Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Sat, 22 Nov 2025 12:25:18 -0500 Subject: [PATCH 06/28] Merge --- .../fouristhenumber/utilitiesinexcess/utils/UIEUtils.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java index 356b0d8fd..e3f652a11 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java @@ -6,14 +6,12 @@ import java.util.Set; import net.minecraft.block.Block; -import net.minecraft.world.World; - -import com.gtnewhorizon.gtnhlib.blockpos.BlockPos; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.world.World; import com.fouristhenumber.utilitiesinexcess.compat.Mods; +import com.gtnewhorizon.gtnhlib.blockpos.BlockPos; import baubles.common.container.InventoryBaubles; import baubles.common.lib.PlayerHandler; From a0e220b7a5999ef60bbd865f450647633866db3e Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Tue, 23 Jun 2026 22:01:28 -0400 Subject: [PATCH 07/28] Make updateEntity serverside --- .../utilitiesinexcess/common/tileentities/TileEntityQED.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java index e0a5b2f77..815beaa3b 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java @@ -54,6 +54,8 @@ public class TileEntityQED extends TileEntity implements IInventory, IGuiHolder< @Override public void updateEntity() { + if (worldObj.isRemote) return; + if (crafting) { craftingProgress += crystals; } From 5fc08be843da6bea2bb7f783c91254dc6bce407f Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Tue, 23 Jun 2026 22:02:42 -0400 Subject: [PATCH 08/28] NBT typo --- .../utilitiesinexcess/common/tileentities/TileEntityQED.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java index 815beaa3b..fe16e77b4 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java @@ -55,7 +55,7 @@ public class TileEntityQED extends TileEntity implements IInventory, IGuiHolder< @Override public void updateEntity() { if (worldObj.isRemote) return; - + if (crafting) { craftingProgress += crystals; } @@ -272,7 +272,7 @@ public void writeToNBT(NBTTagCompound tag) { } } tag.setTag("Items", nbttaglist); - tag.setInteger("craftingProgres", craftingProgress); + tag.setInteger("craftingProgress", craftingProgress); tag.setBoolean("crafting", crafting); tag.setInteger("crystals", crystals); } From 1c07168b8b2c54a2de35c68cc9610f5f29a2ce0a Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Tue, 23 Jun 2026 22:18:31 -0400 Subject: [PATCH 09/28] Add hardness --- .../utilitiesinexcess/common/blocks/BlockFluxCrystal.java | 1 + .../utilitiesinexcess/common/blocks/BlockQED.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java index 8a349efb9..8204491c6 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java @@ -9,5 +9,6 @@ public BlockFluxCrystal() { super(Material.iron); setBlockName("flux_crystal"); setBlockTextureName("utilitiesinexcess:flux_crystal"); + setHardness(5.0F); } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java index 122b19933..8de3d2677 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java @@ -15,6 +15,7 @@ public BlockQED() { super(Material.iron); setBlockName("qed"); setBlockTextureName("utilitiesinexcess:qed"); + setHardness(5.0F); } @Override From d0a42f2dd07bf8a26a138ac5c3bb8a6340299851 Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Tue, 23 Jun 2026 22:43:00 -0400 Subject: [PATCH 10/28] Fix bad mui nonsense --- .../common/tileentities/TileEntityQED.java | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java index fe16e77b4..a0805fc21 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java @@ -15,7 +15,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.StatCollector; import net.minecraftforge.common.util.Constants; import com.cleanroommc.modularui.api.IGuiHolder; @@ -29,7 +28,6 @@ import com.cleanroommc.modularui.value.sync.GenericSyncValue; import com.cleanroommc.modularui.value.sync.IntSyncValue; import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.ItemDisplayWidget; import com.cleanroommc.modularui.widgets.ProgressWidget; import com.cleanroommc.modularui.widgets.SlotGroupWidget; @@ -61,7 +59,7 @@ public void updateEntity() { } if (craftingProgress >= 500) { ItemStack newStack = QEDRegistry.instance() - .findRecipe(craftMatrix, true); + .findRecipe(craftMatrix, false); if (newStack != null) { ItemStack outputStack = craftResult.getStackInSlot(0); @@ -116,21 +114,16 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet // Add title panel.child( - new ParentWidget<>().coverChildren() - .topRelAnchor(0, 1) - .child( - IKey.str(StatCollector.translateToLocal(getInventoryName())) - .asWidget() - .marginLeft(5) - .marginRight(5) - .marginTop(5) - .marginBottom(-15))); + IKey.lang(getInventoryName()) + .asWidget() + .marginLeft(5) + .marginTop(5)); panel.child( IKey.dynamic(connected::getStringValue) .asWidget() .marginTop(70) - .marginLeft(10)); + .marginLeft(5)); IItemHandler itemHandler = new InvWrapper(this); From f7a8117364c30214709b8dcb39c4d8c8b4586dea Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Tue, 23 Jun 2026 23:02:51 -0400 Subject: [PATCH 11/28] Switch back to on place/break scanning --- .../common/blocks/BlockFluxCrystal.java | 36 +++++++++++++++++++ .../common/blocks/BlockQED.java | 9 +++++ .../common/tileentities/TileEntityQED.java | 18 ++++++++-- 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java index 8204491c6..33e225247 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java @@ -1,7 +1,16 @@ package com.fouristhenumber.utilitiesinexcess.common.blocks; +import static com.fouristhenumber.utilitiesinexcess.utils.UIEUtils.scanForBlock; + +import java.util.Set; + import net.minecraft.block.Block; import net.minecraft.block.material.Material; +import net.minecraft.world.World; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityQED; +import com.gtnewhorizon.gtnhlib.blockpos.BlockPos; public class BlockFluxCrystal extends Block { @@ -11,4 +20,31 @@ public BlockFluxCrystal() { setBlockTextureName("utilitiesinexcess:flux_crystal"); setHardness(5.0F); } + + @Override + public int onBlockPlaced(World worldIn, int x, int y, int z, int side, float subX, float subY, float subZ, + int meta) { + if (!worldIn.isRemote) { + Set positions = scanForBlock(worldIn, x, y, z, 9, ModBlocks.QED.get()); + for (BlockPos pos : positions) { + TileEntityQED qed = (TileEntityQED) worldIn.getTileEntity(pos.x, pos.y, pos.z); + qed.addCrystal(); + } + } + + return super.onBlockPlaced(worldIn, x, y, z, side, subX, subY, subZ, meta); + } + + @Override + public void onBlockPreDestroy(World worldIn, int x, int y, int z, int meta) { + if (!worldIn.isRemote) { + Set positions = scanForBlock(worldIn, x, y, z, 9, ModBlocks.QED.get()); + for (BlockPos pos : positions) { + TileEntityQED qed = (TileEntityQED) worldIn.getTileEntity(pos.x, pos.y, pos.z); + qed.removeCrystal(); + } + } + + super.onBlockPreDestroy(worldIn, x, y, z, meta); + } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java index 8de3d2677..4da39be5b 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java @@ -23,6 +23,15 @@ public TileEntity createNewTileEntity(World worldIn, int meta) { return new TileEntityQED(); } + @Override + public void onBlockAdded(World worldIn, int x, int y, int z) { + if (!worldIn.isRemote) { + TileEntityQED qed = (TileEntityQED) worldIn.getTileEntity(x, y, z); + qed.scan(); + } + super.onBlockAdded(worldIn, x, y, z); + } + @Override public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java index a0805fc21..7619b9ce1 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java @@ -43,6 +43,8 @@ public class TileEntityQED extends TileEntity implements IInventory, IGuiHolder< private final InventoryCrafting craftMatrix = new InventoryCrafting(new ContainerDummy(), 3, 3); private final InventoryCraftResult craftResult = new InventoryCraftResult(); + // TODO: Creating this unregistered item is an ugly hack - MUI2 ItemDisplayWidget cannot handle null + // ItemStacks/Items and will crash otherwise. Need fix on MUI2 end, I think. private static final ItemStack fakeItem = new ItemStack(new Item()); private ItemStack preview = fakeItem; @@ -54,6 +56,11 @@ public class TileEntityQED extends TileEntity implements IInventory, IGuiHolder< public void updateEntity() { if (worldObj.isRemote) return; + // Extremely rare periodic check to catch any weirdness + if (worldObj.getTotalWorldTime() % 1200 == 0) { + scan(); + } + if (crafting) { craftingProgress += crystals; } @@ -75,7 +82,15 @@ public void updateEntity() { super.updateEntity(); } - private void scan() { + public void addCrystal() { + crystals++; + } + + public void removeCrystal() { + if (crystals > 0) crystals--; + } + + public void scan() { Set positions = scanForBlock(worldObj, xCoord, yCoord, zCoord, 9, ModBlocks.FLUX_CRYSTAL.get()); crystals = positions.size(); } @@ -84,7 +99,6 @@ private void updateCraftingResult() { ItemStack stack = QEDRegistry.instance() .findRecipe(craftMatrix, false); - if (stack != null) scan(); crafting = stack != null && canInsertToOutput(stack); preview = stack != null ? stack : fakeItem; } From 10bce29370da2c50d8b2a95a2e24aaea8d139fad Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Tue, 23 Jun 2026 23:46:50 -0400 Subject: [PATCH 12/28] Add flux strength lang --- .../common/tileentities/TileEntityQED.java | 17 +++++++++-------- .../assets/utilitiesinexcess/lang/en_US.lang | 2 ++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java index 7619b9ce1..692a360b2 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java @@ -15,6 +15,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.StatCollector; import net.minecraftforge.common.util.Constants; import com.cleanroommc.modularui.api.IGuiHolder; @@ -66,7 +67,7 @@ public void updateEntity() { } if (craftingProgress >= 500) { ItemStack newStack = QEDRegistry.instance() - .findRecipe(craftMatrix, false); + .findRecipe(craftMatrix, true); if (newStack != null) { ItemStack outputStack = craftResult.getStackInSlot(0); @@ -98,7 +99,7 @@ public void scan() { private void updateCraftingResult() { ItemStack stack = QEDRegistry.instance() .findRecipe(craftMatrix, false); - + if (stack == null || stack.getItem() != preview.getItem()) craftingProgress = 0; crafting = stack != null && canInsertToOutput(stack); preview = stack != null ? stack : fakeItem; } @@ -134,10 +135,10 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .marginTop(5)); panel.child( - IKey.dynamic(connected::getStringValue) + IKey.dynamic(() -> StatCollector.translateToLocalFormatted("gui.flux_strength", connected.getStringValue())) .asWidget() .marginTop(70) - .marginLeft(5)); + .horizontalCenter()); IItemHandler itemHandler = new InvWrapper(this); @@ -150,20 +151,20 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet index -> new ItemSlot().slot( new ModularSlot(itemHandler, index).changeListener((w, x, y, z) -> updateCraftingResult()))) .build() - .marginTop(20) + .marginTop(15) .marginLeft(37)); // Progress bar panel.child( new ProgressWidget().texture(PROGRESS_ARROW, 20) .value(new DoubleSyncValue(() -> (double) craftingSyncer.getIntValue() / 500)) - .marginTop(38) + .marginTop(33) .marginLeft(97)); // Preview slot panel.child( new ItemDisplayWidget().syncHandler("preview") - .marginTop(15) + .marginTop(10) .marginLeft(97)); // Output slot @@ -173,7 +174,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .slot( new ModularSlot(itemHandler, 9).changeListener((w, x, y, z) -> updateCraftingResult()) .accessibility(false, true)) - .marginTop(38) + .marginTop(33) .marginLeft(121)); return panel; diff --git a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang index 0ef515acb..09cf58a91 100644 --- a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang +++ b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang @@ -388,6 +388,8 @@ nei.infopage.uie.xray_glasses.1=These stylish spectacles will highlight like blo tile.qed.name=QED tile.flux_crystal.name=Flux Crystal +gui.flux_strength=Flux Strength: %s + utilitiesinexcess.config.block.ender_lotus=Ender Lotus item.ender_lotus_seed.name=Ender-Lotus Seed From a85c240fd1f071f4c254fe4a82ef0d8be6bae945 Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Wed, 24 Jun 2026 01:38:10 -0400 Subject: [PATCH 13/28] Try and fail to fix NEI handler --- .../utilitiesinexcess/ClientProxy.java | 4 ++ .../utilitiesinexcess/UtilitiesInExcess.java | 1 + .../common/recipe/RecipeLoader.java | 49 ++++++++++++++++++- .../compat/nei/NEIConfig.java | 36 +++++++++----- .../compat/nei/QEDRecipeHandler.java | 32 +++++++++--- 5 files changed, 102 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java index b166bb009..596103bb7 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/ClientProxy.java @@ -19,6 +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.compat.nei.NEIConfig; import com.fouristhenumber.utilitiesinexcess.render.CollectorRangeBox; import com.fouristhenumber.utilitiesinexcess.render.ISBRHUnderworldPortal; import com.fouristhenumber.utilitiesinexcess.render.TESRUnderworldPortal; @@ -77,6 +78,9 @@ public void init(FMLInitializationEvent event) { FindItHelper.INSTANCE = new FindItHelper(); MinecraftForge.EVENT_BUS.register(FindItHelper.INSTANCE); } + if (Mods.NEI.isLoaded()) { + MinecraftForge.EVENT_BUS.register(new NEIConfig()); + } } @SubscribeEvent diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java index d275ac335..12dfda47a 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java @@ -81,6 +81,7 @@ public class UtilitiesInExcess { public static final String MODID = "utilitiesinexcess"; + public static final String MODNAME = "Utilities in Excess"; public static final Logger LOG = LogManager.getLogger(MODID); @Mod.Instance(MODID) 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 8d63135c7..7b27c4633 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeLoader.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeLoader.java @@ -1262,7 +1262,45 @@ private static void loadInversionRecipes() { } private static void loadQEDRecipes() { - // todo test recipe, remove later + addShapedRecipe( + ModBlocks.QED, + "ece", + "omo", + "ooo", + 'e', + Items.ender_eye, + 'c', + Blocks.crafting_table, + 'o', + ModBlocks.DECORATIVE_BLOCKS.newItemStack(1, 5), + 'm', + ModBlocks.DECORATIVE_BLOCKS.newItemStack(1, 0)); + + addShapedRecipe( + Items.spider_eye, + "ece", + "omo", + "ooo", + 'e', + Items.ender_eye, + 'c', + ModBlocks.QED, + 'o', + ModBlocks.DECORATIVE_BLOCKS.newItemStack(1, 5), + 'm', + ModBlocks.DECORATIVE_BLOCKS.newItemStack(1, 0)); + + + addShapedRecipe( + ModBlocks.FLUX_CRYSTAL, + " e ", + " o ", + "ooo", + 'e', + Items.ender_eye, + 'o', + ModBlocks.DECORATIVE_BLOCKS.newItemStack(1, 5)); + QEDRegistry.instance() .addRecipe( new ItemStack(Items.gold_ingot), @@ -1271,6 +1309,15 @@ private static void loadQEDRecipes() { new ItemStack(Items.gold_nugget), 'G', "blockGlass"); + + QEDRegistry.instance() + .addRecipe( + new ItemStack(Items.iron_boots), + new String[] { "NNN", "NGN", "NNN" }, + 'N', + new ItemStack(Items.gold_nugget), + 'G', + ModBlocks.BEDROCKIUM_BLOCK); } private static boolean addShapedRecipe(Object outputObject, Object... params) { diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/NEIConfig.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/NEIConfig.java index ffeb0dbfb..499ec0557 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/NEIConfig.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/NEIConfig.java @@ -2,15 +2,18 @@ import net.minecraft.util.StatCollector; +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.fouristhenumber.utilitiesinexcess.Tags; import com.fouristhenumber.utilitiesinexcess.UtilitiesInExcess; +import codechicken.nei.api.API; import codechicken.nei.api.IConfigureNEI; -import codechicken.nei.recipe.GuiCraftingRecipe; -import codechicken.nei.recipe.GuiUsageRecipe; -import codechicken.nei.recipe.TemplateRecipeHandler; +import codechicken.nei.event.NEIRegisterHandlerInfosEvent; +import codechicken.nei.recipe.HandlerInfo; import cpw.mods.fml.common.event.FMLInterModComms; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; -@SuppressWarnings("unused") // automatically found by NEI +@SuppressWarnings("unused") public class NEIConfig implements IConfigureNEI { @Override @@ -20,21 +23,32 @@ public String getName() { @Override public String getVersion() { - return "1.0"; // ?? + return Tags.VERSION; } @Override public void loadConfig() { - addHandler(new QEDRecipeHandler()); - } + QEDRecipeHandler handler = new QEDRecipeHandler(); + + API.registerRecipeHandler(handler); + API.registerUsageHandler(handler); + + API.addRecipeCatalyst(ModBlocks.QED.newItemStack(), "qed_recipes", 1); + API.addRecipeCatalyst(ModBlocks.FLUX_CRYSTAL.newItemStack(), "qed_recipes", 0); - private void addHandler(TemplateRecipeHandler handler) { FMLInterModComms.sendRuntimeMessage( UtilitiesInExcess.MODID, "NEIPlugins", "register-crafting-handler", - "utilitiesinexcess@" + handler.getRecipeName() + "@" + handler.getOverlayIdentifier()); - GuiCraftingRecipe.craftinghandlers.add(handler); - GuiUsageRecipe.usagehandlers.add(handler); + "utilitiesinexcess@" + StatCollector.translateToLocal("nei.title.uie.qed") + "@qed_recipes"); + } + + @SubscribeEvent + public void registerHandlerInfo(NEIRegisterHandlerInfosEvent event) { + event.registerHandlerInfo( + new HandlerInfo.Builder("qed_recipes", UtilitiesInExcess.MODNAME, UtilitiesInExcess.MODID).setHeight(140) + .setWidth(166) + .setDisplayStack(ModBlocks.QED.newItemStack()) + .build()); } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java index 48fc3140c..3dacaba03 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java @@ -22,22 +22,39 @@ public String getRecipeName() { return StatCollector.translateToLocal("nei.title.uie.qed"); } + @Override + public void loadUsageRecipes(String inputId, Object... ingredients) { + if (inputId.equals(this.getOverlayIdentifier())) { + for (QEDRecipe qedRecipe : QEDRegistry.instance() + .getAllRecipes()) { + CachedShapedRecipe neiRecipe = makeNeiRecipe(qedRecipe); + if (neiRecipe == null) continue; + neiRecipe.computeVisuals(); + this.arecipes.add(neiRecipe); + } + } else { + super.loadUsageRecipes(inputId, ingredients); + } + } + @Override public void loadUsageRecipes(ItemStack ingredient) { for (QEDRecipe qedRecipe : QEDRegistry.instance() .getAllRecipes()) { - if (!qedRecipe.containsInput(ingredient)) continue; CachedShapedRecipe neiRecipe = makeNeiRecipe(qedRecipe); if (neiRecipe == null) continue; - neiRecipe.computeVisuals(); - neiRecipe.setIngredientPermutation(neiRecipe.ingredients, ingredient); - this.arecipes.add(neiRecipe); + + if (neiRecipe.contains(neiRecipe.ingredients, ingredient)) { + neiRecipe.computeVisuals(); + neiRecipe.setIngredientPermutation(neiRecipe.ingredients, ingredient); + this.arecipes.add(neiRecipe); + } } } @Override public void loadCraftingRecipes(String outputId, Object... results) { - if (outputId.equals(getOverlayIdentifier())) { + if (outputId.equals(this.getOverlayIdentifier())) { for (QEDRecipe qedRecipe : QEDRegistry.instance() .getAllRecipes()) { CachedShapedRecipe neiRecipe = makeNeiRecipe(qedRecipe); @@ -45,8 +62,8 @@ public void loadCraftingRecipes(String outputId, Object... results) { neiRecipe.computeVisuals(); this.arecipes.add(neiRecipe); } - } else if (outputId.equals("item")) { - loadCraftingRecipes((ItemStack) results[0]); + } else { + super.loadCraftingRecipes(outputId, results); } } @@ -71,7 +88,6 @@ private CachedShapedRecipe makeNeiRecipe(QEDRecipe recipe) { return null; } } - return new CachedShapedRecipe(3, 3, inputs, recipe.getOutput()); } catch (Exception e) { NEIClientConfig.logger.error("Error loading QED recipe: ", e); From 406b83402b02be46802f29042aae7c59ce78adc3 Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Wed, 24 Jun 2026 01:55:57 -0400 Subject: [PATCH 14/28] Bless you koolkrafter --- .../common/recipe/RecipeLoader.java | 15 --------------- .../utilitiesinexcess/compat/nei/NEIConfig.java | 4 ++-- .../compat/nei/QEDRecipeHandler.java | 7 +++++++ 3 files changed, 9 insertions(+), 17 deletions(-) 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 7b27c4633..5a510c8e5 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeLoader.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeLoader.java @@ -1276,21 +1276,6 @@ private static void loadQEDRecipes() { 'm', ModBlocks.DECORATIVE_BLOCKS.newItemStack(1, 0)); - addShapedRecipe( - Items.spider_eye, - "ece", - "omo", - "ooo", - 'e', - Items.ender_eye, - 'c', - ModBlocks.QED, - 'o', - ModBlocks.DECORATIVE_BLOCKS.newItemStack(1, 5), - 'm', - ModBlocks.DECORATIVE_BLOCKS.newItemStack(1, 0)); - - addShapedRecipe( ModBlocks.FLUX_CRYSTAL, " e ", diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/NEIConfig.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/NEIConfig.java index 499ec0557..ec5dde4ca 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/NEIConfig.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/NEIConfig.java @@ -33,8 +33,8 @@ public void loadConfig() { API.registerRecipeHandler(handler); API.registerUsageHandler(handler); - API.addRecipeCatalyst(ModBlocks.QED.newItemStack(), "qed_recipes", 1); - API.addRecipeCatalyst(ModBlocks.FLUX_CRYSTAL.newItemStack(), "qed_recipes", 0); + API.addRecipeCatalyst(ModBlocks.QED.newItemStack(), handler, 1); + API.addRecipeCatalyst(ModBlocks.FLUX_CRYSTAL.newItemStack(), handler, 0); FMLInterModComms.sendRuntimeMessage( UtilitiesInExcess.MODID, diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java index 3dacaba03..a5d04e867 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java @@ -1,5 +1,7 @@ package com.fouristhenumber.utilitiesinexcess.compat.nei; +import java.awt.*; + import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; @@ -37,6 +39,11 @@ public void loadUsageRecipes(String inputId, Object... ingredients) { } } + @Override + public void loadTransferRects() { + transferRects.add(new RecipeTransferRect(new Rectangle(166, 74, 24, 18), getOverlayIdentifier())); + } + @Override public void loadUsageRecipes(ItemStack ingredient) { for (QEDRecipe qedRecipe : QEDRegistry.instance() From 9212c77cdff5731d6e8ee2aded1fab5c453f90a3 Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Wed, 24 Jun 2026 02:13:41 -0400 Subject: [PATCH 15/28] Add actual recipes --- .../common/recipe/RecipeLoader.java | 41 +++++++++++++------ .../compat/nei/QEDRecipeHandler.java | 2 +- 2 files changed, 30 insertions(+), 13 deletions(-) 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 5a510c8e5..fb8fcb882 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeLoader.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeLoader.java @@ -1262,6 +1262,7 @@ private static void loadInversionRecipes() { } private static void loadQEDRecipes() { + // QED addShapedRecipe( ModBlocks.QED, "ece", @@ -1276,6 +1277,7 @@ private static void loadQEDRecipes() { 'm', ModBlocks.DECORATIVE_BLOCKS.newItemStack(1, 0)); + // Flux Crystal addShapedRecipe( ModBlocks.FLUX_CRYSTAL, " e ", @@ -1286,23 +1288,38 @@ private static void loadQEDRecipes() { 'o', ModBlocks.DECORATIVE_BLOCKS.newItemStack(1, 5)); + // Ore + Coal -> Ingot (QED) QEDRegistry.instance() .addRecipe( - new ItemStack(Items.gold_ingot), - new String[] { "NNN", "NGN", "NNN" }, - 'N', - new ItemStack(Items.gold_nugget), - 'G', - "blockGlass"); + new ItemStack(Items.gold_ingot, 3), + new String[] { "OC ", " ", " " }, + 'O', + Blocks.gold_ore, + 'C', + Items.coal); QEDRegistry.instance() .addRecipe( - new ItemStack(Items.iron_boots), - new String[] { "NNN", "NGN", "NNN" }, - 'N', - new ItemStack(Items.gold_nugget), - 'G', - ModBlocks.BEDROCKIUM_BLOCK); + new ItemStack(Items.iron_ingot, 3), + new String[] { "OC ", " ", " " }, + 'O', + Blocks.iron_ore, + 'C', + Items.coal); + + // Giga Torch (QED) + QEDRegistry.instance() + .addRecipe( + ModBlocks.GIGA_TORCH.newItemStack(), + new String[] { "RCH", "CWC", "CWC" }, + 'R', + new ItemStack(Items.potionitem, 1, 8225), + 'H', + new ItemStack(Items.potionitem, 1, 8229), + 'W', + "logWood", + 'C', + ModBlocks.CHANDELIER); } private static boolean addShapedRecipe(Object outputObject, Object... params) { diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java index a5d04e867..1ed83c055 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java @@ -41,7 +41,7 @@ public void loadUsageRecipes(String inputId, Object... ingredients) { @Override public void loadTransferRects() { - transferRects.add(new RecipeTransferRect(new Rectangle(166, 74, 24, 18), getOverlayIdentifier())); + transferRects.add(new RecipeTransferRect(new Rectangle(84, 23, 24, 18), getOverlayIdentifier())); } @Override From 0dd1895e298469a4ad1ea347c13353531896d6bd Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Wed, 24 Jun 2026 02:24:06 -0400 Subject: [PATCH 16/28] Fix wildcard match error in recipes --- .../com/fouristhenumber/utilitiesinexcess/api/QEDRecipe.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/api/QEDRecipe.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/api/QEDRecipe.java index 596c64abf..1181191cf 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/api/QEDRecipe.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/api/QEDRecipe.java @@ -36,8 +36,9 @@ public boolean matches(InventoryCrafting inv) { return false; } - if (recipeInput.getItemDamage() != providedInput.getItemDamage()) { - return recipeInput.getItemDamage() == OreDictionary.WILDCARD_VALUE; + if (recipeInput.getItemDamage() != providedInput.getItemDamage() + && recipeInput.getItemDamage() != OreDictionary.WILDCARD_VALUE) { + return false; } } else if (rawRecipeInput instanceof ItemStack[]ores) { boolean matched = false; From 087963976c06ee0aa9be8ba4469393af95bba7e6 Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Wed, 24 Jun 2026 02:25:06 -0400 Subject: [PATCH 17/28] Star import --- .../utilitiesinexcess/compat/nei/QEDRecipeHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java index 1ed83c055..926bc7c82 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java @@ -1,6 +1,6 @@ package com.fouristhenumber.utilitiesinexcess.compat.nei; -import java.awt.*; +import java.awt.Rectangle; import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; From d176f420be3928ac439f5f37653753cd3600f8b3 Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Wed, 24 Jun 2026 04:15:08 -0400 Subject: [PATCH 18/28] Change energy for recipes for exu parity --- .../utilitiesinexcess/common/tileentities/TileEntityQED.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java index 692a360b2..8e60ce81f 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java @@ -63,9 +63,9 @@ public void updateEntity() { } if (crafting) { - craftingProgress += crystals; + craftingProgress += (crystals * 40); } - if (craftingProgress >= 500) { + if (craftingProgress >= 20_000) { ItemStack newStack = QEDRegistry.instance() .findRecipe(craftMatrix, true); if (newStack != null) { From 8429f4e98d31c02b2fce401deca5cff3b6764fcf Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Wed, 24 Jun 2026 04:42:17 -0400 Subject: [PATCH 19/28] Add postea transformers --- .../common/tileentities/TileEntityQED.java | 6 ++- .../compat/exu/PosteaTransforms.java | 9 +++- .../tileentities/QEDTransformation.java | 47 +++++++++++++++++++ 3 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/QEDTransformation.java diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java index 8e60ce81f..a4687ae35 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java @@ -53,6 +53,8 @@ public class TileEntityQED extends TileEntity implements IInventory, IGuiHolder< private boolean crafting = false; private int crystals = 0; + private static final int recipeCost = 20_000; + @Override public void updateEntity() { if (worldObj.isRemote) return; @@ -65,7 +67,7 @@ public void updateEntity() { if (crafting) { craftingProgress += (crystals * 40); } - if (craftingProgress >= 20_000) { + if (craftingProgress >= recipeCost) { ItemStack newStack = QEDRegistry.instance() .findRecipe(craftMatrix, true); if (newStack != null) { @@ -157,7 +159,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet // Progress bar panel.child( new ProgressWidget().texture(PROGRESS_ARROW, 20) - .value(new DoubleSyncValue(() -> (double) craftingSyncer.getIntValue() / 500)) + .value(new DoubleSyncValue(() -> (double) craftingSyncer.getIntValue() / recipeCost)) .marginTop(33) .marginLeft(97)); diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/PosteaTransforms.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/PosteaTransforms.java index b219fe0e0..da4d1034f 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/PosteaTransforms.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/PosteaTransforms.java @@ -10,6 +10,7 @@ import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities.FullChestTransformation; import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities.GeneratorTransformation; import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities.MiniChestTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities.QEDTransformation; import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities.SpikeTransformation; import com.gtnewhorizons.postea.api.BlockReplacementManager; import com.gtnewhorizons.postea.api.ItemStackReplacementManager; @@ -78,6 +79,12 @@ private static void transformItems() { ItemStackReplacementManager.addSimpleReplacement("ExtraUtilities:drum", 0, ModBlocks.DRUM.getItem(), 0); ItemStackReplacementManager .addSimpleReplacement("ExtraUtilities:drum", 1, ModBlocks.BEDROCKIUM_DRUM.getItem(), 0); + ItemStackReplacementManager + .addSimpleReplacement("ExtraUtilities:endConstructor", 0, ModBlocks.QED.getItem(), 0); + ItemStackReplacementManager + .addSimpleReplacement("ExtraUtilities:endConstructor", 2, ModBlocks.FLUX_CRYSTAL.getItem(), 0); + ItemStackReplacementManager + .addSimpleReplacement("ExtraUtilities:endConstructor", 3, ModBlocks.FLUX_CRYSTAL.getItem(), 0); // Custom transformers ItemStackReplacementManager .addTransformationHandler("ExtraUtilities:divisionSigil", new DivisionSigilTransformation()); @@ -140,7 +147,6 @@ private static void transformBlocks() { BlockReplacementManager.addSimpleReplacement("ExtraUtilities:magnumTorch", ModBlocks.GIGA_TORCH.get()); BlockReplacementManager.addSimpleReplacement("ExtraUtilities:chandelier", ModBlocks.CHANDELIER.get()); BlockReplacementManager.addSimpleReplacement("ExtraUtilities:trading_post", ModBlocks.TRADING_POST.get()); - // BlockReplacementManager.addSimpleReplacement("ExtraUtilities:", ModBlocks.SPIKE_DIAMOND.get()); } private static void transformTileEntities() { @@ -148,6 +154,7 @@ private static void transformTileEntities() { TileEntityReplacementManager.tileEntityTransformer("TileMiniChest", MiniChestTransformation::transform); TileEntityReplacementManager.tileEntityTransformer("TileEnderCollector", CollectorTransformation::transform); TileEntityReplacementManager.tileEntityTransformer("drum", DrumTransformation::transform); + TileEntityReplacementManager.tileEntityTransformer("TileEnderConstructor", QEDTransformation::transform); SpikeTransformation.registerIDResolvers(); TileEntityReplacementManager.tileEntityTransformer("TileEntityEnchantedSpike", SpikeTransformation::transform); diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/QEDTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/QEDTransformation.java new file mode 100644 index 000000000..f050462ed --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/QEDTransformation.java @@ -0,0 +1,47 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.gtnewhorizons.postea.utility.BlockInfo; +import com.gtnewhorizons.postea.utility.PosteaUtilities; + +public class QEDTransformation { + + public static BlockInfo transform(NBTTagCompound _oldTag, World world, Chunk chunk) { + return new BlockInfo(ModBlocks.QED.get(), 0, QEDTransformation::transformNBT); + } + + private static NBTTagCompound transformNBT(NBTTagCompound oldTag) { + NBTTagCompound tag = PosteaUtilities.cleanseNBT("TileEntityQEDUIE", oldTag); + NBTTagList itemsTag = new NBTTagList(); + for (int i = 0; i < 9; i++) { + NBTTagCompound exuSlotTag = oldTag.getCompoundTag("items_" + i); + ItemStack exuSlotStack = ItemStack.loadItemStackFromNBT(exuSlotTag); + if (exuSlotStack != null) { + NBTTagCompound slotTag = new NBTTagCompound(); + slotTag.setByte("Slot", (byte) i); + exuSlotStack.writeToNBT(slotTag); + itemsTag.appendTag(slotTag); + } + } + NBTTagCompound exuOutputTag = oldTag.getCompoundTag("output"); + ItemStack exuOutput = ItemStack.loadItemStackFromNBT(exuOutputTag); + if (exuOutput != null) { + NBTTagCompound slotTag = new NBTTagCompound(); + slotTag.setByte("Slot", (byte) 9); + exuOutput.writeToNBT(slotTag); + itemsTag.appendTag(slotTag); + } + tag.setTag("Items", itemsTag); + int energy = oldTag.getInteger("Energy"); + tag.setInteger("craftingProgress", energy); + if (energy > 0) tag.setBoolean("crafting", true); + + return tag; + } +} From 95ce11798f78c2cfdde781f9e3a9812d46008883 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 24 Jun 2026 04:43:45 -0400 Subject: [PATCH 20/28] Optimising images contained in QED for #62 (#172) Co-authored-by: GitHub GTNH Actions <33456283+FourIsTheNumber@users.noreply.github.com> --- .../textures/blocks/flux_crystal.png | Bin 141 -> 115 bytes .../utilitiesinexcess/textures/blocks/qed.png | Bin 229 -> 159 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/flux_crystal.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/flux_crystal.png index 53ff07d57513a2536183124a71d6068244a3e408..20c3b9b162d1575351be192f8a625f56b4b38f34 100644 GIT binary patch delta 72 zcmeBWES_NKr0eP87-Hd{ykSkmNBNfBarG*khrbw3SS)!{fUU$a=;I2;#cVv{%o^u> brlh4aSU-=Lq{q(d!2krFu6{1-oD!M<&$Af` delta 98 zcmXT!Wt?CbF=7-G?zyk$+q$N7zojfxv?Ol}m}u&>;j83cqaXHEQSP`3BqkNGKg zJsLWN&Ms!_kuvDuX?Uttbl}&$w*ul5k~w_%8LTCR4!xZqs>c8Xp00i_>zopr0Q{{d AKmY&$ diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed.png index d5e4ec1be0d862547930928dd5050ad49d2345f8..3936dcfdf068c1b2f4f2b8eaba3d3eb5ddfe9a5c 100644 GIT binary patch delta 117 zcmV-*0E++R0iOYoF>YB&L_t(IjbmsknDQTl{X?=z!Z3Xd^&iVf}nh7sn8b-sBvu8K34iHa0$dGx;^o5{6_+Up5d>D>6}jov7q)yh%~V zpfBi#CrGfZdi9yW9|i^aQ!U%1fcy?duSE4glS4O7a9!kWI%zoZaY@Sc38@T52eKQ0 zT6#7(u)dwi>3RoSS+oUpS? kCP8O0XCb3y+kr0(412#hTk39G#l-*wp00i_>zopr0GuF46951J From e00b323fc32bc924f8d593a0e1a835fcb2d0426f Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Wed, 24 Jun 2026 04:48:44 -0400 Subject: [PATCH 21/28] Add info page --- .../com/fouristhenumber/utilitiesinexcess/client/IMCForNEI.java | 2 ++ src/main/resources/assets/utilitiesinexcess/lang/en_US.lang | 1 + 2 files changed, 3 insertions(+) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/client/IMCForNEI.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/client/IMCForNEI.java index 875626659..fc509e84f 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/client/IMCForNEI.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/client/IMCForNEI.java @@ -78,6 +78,8 @@ public static void IMCSender() { sendInfoPage("", "nei.infopage.uie.drum.1"); + sendInfoPage(",", "nei.infopage.uie.qed.1"); + sendInfoPage("", "nei.infopage.uie.block_update_detector.1"); sendInfoPage( "", diff --git a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang index 09cf58a91..f18e93965 100644 --- a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang +++ b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang @@ -387,6 +387,7 @@ nei.infopage.uie.xray_glasses.1=These stylish spectacles will highlight like blo tile.qed.name=QED tile.flux_crystal.name=Flux Crystal +nei.infopage.uie.qed.1=The QED is a simple machine that draws Flux Energy from nearby Flux Crystals in order to complete recipes. The QED operates faster for each Flux Crystal in a 9 block sphere around it. gui.flux_strength=Flux Strength: %s From 47c28e5037f437bb0e820447e72901593c022dc7 Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Wed, 24 Jun 2026 18:02:22 -0400 Subject: [PATCH 22/28] New jextures (june textures) --- .../common/blocks/BlockQED.java | 28 ++++++++++++++++++ .../utilitiesinexcess/textures/blocks/qed.png | Bin 159 -> 0 bytes .../textures/blocks/qed_bottom.png | Bin 0 -> 636 bytes .../textures/blocks/qed_side.png | Bin 0 -> 494 bytes .../textures/blocks/qed_top.png | Bin 0 -> 681 bytes 5 files changed, 28 insertions(+) delete mode 100644 src/main/resources/assets/utilitiesinexcess/textures/blocks/qed.png create mode 100644 src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_bottom.png create mode 100644 src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_side.png create mode 100644 src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_top.png diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java index 4da39be5b..0bc8fa877 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java @@ -2,13 +2,19 @@ import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import com.cleanroommc.modularui.factory.GuiFactories; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityQED; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + public class BlockQED extends BlockContainer { public BlockQED() { @@ -41,4 +47,26 @@ public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer } return true; } + + public IIcon sideTexture; + public IIcon bottomTexture; + + @SideOnly(Side.CLIENT) + @Override + public void registerBlockIcons(IIconRegister reg) { + this.blockIcon = reg.registerIcon(this.getTextureName() + "_top"); + this.sideTexture = reg.registerIcon(this.getTextureName() + "_side"); + this.bottomTexture = reg.registerIcon(this.getTextureName() + "_bottom"); + } + + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return side == 1 ? this.blockIcon : (side == 0 ? bottomTexture : this.sideTexture); + } + + @SideOnly(Side.CLIENT) + @Override + public IIcon getIcon(IBlockAccess worldIn, int x, int y, int z, int side) { + return getIcon(side, 0); + } } diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed.png deleted file mode 100644 index 3936dcfdf068c1b2f4f2b8eaba3d3eb5ddfe9a5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|B0XIkLo9le zGqh%Wl5hFzyvg&BK`qad3^%iu#+b7PJmw1urgBOw{yg#M#j6K+9j$A#;xD$)(7cd{fi&Q|e!*`TF4F^5^>oX?cBbOyUg3MQM(-?{)TVeoYIb6Mw< G&;$VQ=QXAP diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_bottom.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e1d442cfbe19f120f75395fa071296e7f1fe32 GIT binary patch literal 636 zcmV-?0)zdDP)q<(z$oau%m)Cexa;^Wx9vL3 zIZbA+<4eT>z-9g@=r@2~I8dF=e12u>Y6w0eN+PA^(`1&FONK1HzczI>pI@m?rxy;$ zu%7^csjK7e@nW;6skQ*;(M47+0bsFNAYvs7mjy^$06@;qzDmW@`)for#_V__q5#1R zW59&Ytu=pY09;km_>v;#Rj#cL+<-BbtHL1;QH0l9Yd~7jSYmWT2>^aPd@qUu5o@T^ zB7IFQH@RcM^Sqs1|0q#p4sp2QJGs=*Qk0fhp-PIZ$HFK1R4WdI)<)B_$rnH9K0eQx znvE zdswF+n8{3%NnRwKvg`_RPVYUw_x+gphQ+)4xIPpA+0YFp;m_$bSvX$+Oq=_QMY@!+ zHfmYCvoaR%?njfPGTK*<9e!@7<9iW+-`|C88+uvjAj6oR!S=X$!L}b7g3a~WH$ucUtWIu{Nw%c z!Kqz1J~*AHAJX)zm0HheFnKhKkBF$O)r0tuh1QZeDlU?f84W1OQzWoDAxslC$^-Kn~SQ0ARTB$n6TW0Pb$z`NwgCaGQs9QI5CA koO2gUsP4B;!o79Jzx((Hkk}q-p8x;=07*qoM6N<$f|iQqu>b%7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_top.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_top.png new file mode 100644 index 0000000000000000000000000000000000000000..ce40c33c6c49601d06a7b8eea29eb9fe26bd9790 GIT binary patch literal 681 zcmV;a0#^NrP)=)!_@qe;|`(V5I6$&4{ci79S-HkWhx?m6H6@e!j+C5nO|9E?dD93$jKtD@@$ zeHJ0A#Ixp=@uyq#0`Ic@g=eKO3W&T^j0r;1%D(%^i)_1PXNJUFk&R%T4Q| ziSUW%1u~zpnyq`1m7fPZ6w>k-6 z{;0OJxs}KrPy*>YeSNx28`NoeOa+zrmPKu~UfZosrh|_c7RUDv9@f?!*It=ho{$R$ zb((xJjuR&TDH;UveCpx!&tE6S!pO>-Wyr8Uewsh39WN{b7~eaX+1|m_EF9n-rqg^Y zy`v4oAhqLar=bn2hB{=_{y>PS6EdahtafFv-iQ^Qd8ww07 z(gMlK3F6!{1_wzrx{mwgdBK3FjNV*dBw132N9@p)6xnFm6z=?+{%fTW1D4Z7$njbF zaX^I#@Nfr!NaIbCOhNd-GeSON>3Z3qP66oQv|*TyUda! Date: Wed, 24 Jun 2026 18:02:57 -0400 Subject: [PATCH 23/28] Make blocks not pushable --- .../utilitiesinexcess/common/blocks/BlockFluxCrystal.java | 5 +++++ .../utilitiesinexcess/common/blocks/BlockQED.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java index 33e225247..04c81d794 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java @@ -21,6 +21,11 @@ public BlockFluxCrystal() { setHardness(5.0F); } + @Override + public int getMobilityFlag() { + return 2; + } + @Override public int onBlockPlaced(World worldIn, int x, int y, int z, int side, float subX, float subY, float subZ, int meta) { diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java index 0bc8fa877..8f45127e7 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java @@ -24,6 +24,11 @@ public BlockQED() { setHardness(5.0F); } + @Override + public int getMobilityFlag() { + return 2; + } + @Override public TileEntity createNewTileEntity(World worldIn, int meta) { return new TileEntityQED(); From d363994ba1f42746d67447ae40f6c776bba1bb68 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 24 Jun 2026 18:03:59 -0400 Subject: [PATCH 24/28] Optimising images contained in QED for #62 (#174) Co-authored-by: GitHub GTNH Actions <33456283+FourIsTheNumber@users.noreply.github.com> --- .../textures/blocks/qed_bottom.png | Bin 636 -> 358 bytes .../textures/blocks/qed_side.png | Bin 494 -> 346 bytes .../textures/blocks/qed_top.png | Bin 681 -> 441 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_bottom.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_bottom.png index e9e1d442cfbe19f120f75395fa071296e7f1fe32..991b48f951dc41e3a6c36890e4ba99c72ea0e642 100644 GIT binary patch delta 332 zcmV-S0ki)61m*&eBYy!cNkl*ju(0$(veLLM!OmZQ>02`taY}}kfpFg2>LyFG&tbeRXqqy3M1U<%xl0tfM zZ7vm(dNEYT@zza)9UA8`gUzSnv(UPGIOv~4HsM5rJrn8SwyQz)=3oU9d)xOetFc?YZAyw@ e?w9Ys>-`5VLQNmC|Cwa~00007f(= delta 612 zcmV-q0-OEj0{jG!BYy%zNklq<(z$oau%m)Cexa;^Wx9vL3IZbA+<4eT>z-9g@=zlkWUN}&l&U}7l>S_o+ zB1$5q=F?=Bl}m;!y}vefHJ@LpPNx?R$grOPfT^qF?(t%?sHwI9=g~!0E&*V%Ss-F1 z3YP^)TL3`L&%R2<)B9^gG{)?BBccGo3}e8A&g1Yj+hpOs zAr4W5*IR2qTG3cybVCUMems0HiUJX9sM8{SO)WRMV}HT(yq#VDC{bh%ak$|-xzx~7 zl$KbbN{XzKqlKP^bbEXwa3BNq0;Uw{lC-vDR{4=J_K=(KsGWcA<8#qbsrB-A6i*01ltk!C}Zl9zS( zrYRtA-4>1RW>~5E)}2r9M7XSqIKmKqkf@-88`_kJfQ)o%MobuU5cmeS zw{9A9K*wePggEzzNzlRXlv7?WVa$Q`*SdlzrD%}Zf)2Q6-9$uryCT7VhaHlKY`Lvp Rj_Lpa002ovPDHLkV1m>Rn`;07 delta 468 zcmV;_0W1F60`3ElB!9I@L_t(2k$sZEYt%p##=n_t(rk>~E+t)sWN-CW5L{cKH$l(s z#XrJ7!n61{h|;TG1aE~3UiK{F$(tK{Sf?PE$xM<-UL>8e>)Zv{h0ZN#k>2s zJ`?}h&jAj6o zR!S=X$!L}b7g3a~WH$ucUtWIu{Nw%c!Kqz1J~*AHAJX)zm0H5}VWP*zzlLD$Lw+O}nk`CdpMRcBk?t#!wZ zJ2=Ed%XkzT@;)Q>Y|df_y|A_ z)k^?ixbevC3bX+3Zr}OGaf5K1hjmeox5u1w7fh(`w@$*nb;rN^_y>^K9%`Qe0000< KMNUMnLSTZp+vPO? diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_top.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_top.png index ce40c33c6c49601d06a7b8eea29eb9fe26bd9790..5522baad7883f61dddc524ffa3fdc290ba02bde4 100644 GIT binary patch delta 416 zcmV;R0bl;91-S!|BYy#aNklxUhME8T=Rfm}IXZM3o;E_cRBO3 z#qH{D`Y@ZOi{$P8;_=d5lB$;Kt*QsufUY03d~bB>^nK5^YJXnmB#h%>6btt`dW~tN7NCs|fX(yd6;HbV3IM9a z3^aWr5`rB}2{!tvfeiYAdA0G0y0LeIYi;{;wQpbNb=C80zmf!>sa z@?27o$u#btp@Ay8(8E^Xm7&=b``Tu${I9H)zvy-CHXp}N%g1p`blB!Jdfh9)a!Yu6 zXS~dVRu;nQ@ZsVP;8tG>^t^d#heXC=6|4^vC&=Rbycyxu^Zo|aP@Rkco@_J#0000< KMNUMnLSTYBd(gQ6 delta 658 zcmV;D0&V@d1E~d&BYy&LNkl=)!_@qe;|`(V5I6$&4{ci79S-HkWhx z?m6H6@e!j+C5nO|9E?dD93$jKtD@@$eHJ0A#Ixp=@uyq#0)Owa{e@?xFbasgRE!Bi z)5^a4$ct>dWoL%OT#=1qTwOFJCD&=SvP#Z(eO`QZd;6PaXhBkQ%(WvitT;f4osf7E zB=Cgdh!%QLCnnsx9uo{YNQ%sJ?`_)@7#4t1Riz3EVE@PA{>dQ#sz54L6@b97A=+co z2F){qs^r9upnp`=RJ1a;EQ?w)O~%Vj>!OM9iRT3}pRt;)dyt(*lNiqp1nFK)l`gylH31I%HwzRpG$Q@7u={tRWx=b6?X?aWqmH3uL zZM9z8txl$cj~5ol_YNM`)*aVgnOmNa3kG$Xd@+s_CV&4a8U*ot>f!XyUnj-F$jX~# z$gn?tnm?)?FDwEW-#eJu-oex?9N-?N(|jwvqYcC41upa=szC0aB(9b=x5oDl0L*Of zd_SwFe%hCj@AVDCq#L~wLax(w6ePSI*9P#gww|n?noU~((ZJEPa-&zG{lHU)v+lL$ zo_i@JIDh}1y>PS6EdahtafFv-iQ^Qd8ww07(gMlK3F6!{1_wzrx{mwgdBK3FjNV*d zBw132N9@p)6xnFm6z=?+{%fTW1D4Z7$njbFaX^I#@Nfr!NaIbCOhNd-GeSON>3Z3q sP66oQv|*TyUda! Date: Wed, 24 Jun 2026 18:06:19 -0400 Subject: [PATCH 25/28] Didn't need to set this for TE --- .../utilitiesinexcess/common/blocks/BlockQED.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java index 8f45127e7..0bc8fa877 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java @@ -24,11 +24,6 @@ public BlockQED() { setHardness(5.0F); } - @Override - public int getMobilityFlag() { - return 2; - } - @Override public TileEntity createNewTileEntity(World worldIn, int meta) { return new TileEntityQED(); From d618d9e5a6ca5e4eb75d2027b923f13354ccdb71 Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Thu, 25 Jun 2026 16:34:31 -0400 Subject: [PATCH 26/28] Flux Crystal model --- .../common/blocks/BlockFluxCrystal.java | 16 ++ .../blockstates/flux_crystal.json | 5 + .../models/blocks/flux_crystal.json | 192 ++++++++++++++++++ .../textures/blocks/flux_crystal.png | Bin 115 -> 0 bytes .../textures/blocks/models/flux_crystal.png | Bin 0 -> 2193 bytes .../blocks/models/particle/flux_crystal.png | Bin 0 -> 773 bytes 6 files changed, 213 insertions(+) create mode 100644 src/main/resources/assets/utilitiesinexcess/blockstates/flux_crystal.json create mode 100644 src/main/resources/assets/utilitiesinexcess/models/blocks/flux_crystal.json delete mode 100644 src/main/resources/assets/utilitiesinexcess/textures/blocks/flux_crystal.png create mode 100644 src/main/resources/assets/utilitiesinexcess/textures/blocks/models/flux_crystal.png create mode 100644 src/main/resources/assets/utilitiesinexcess/textures/blocks/models/particle/flux_crystal.png diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java index 04c81d794..cc09a0350 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java @@ -11,6 +11,7 @@ import com.fouristhenumber.utilitiesinexcess.ModBlocks; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityQED; import com.gtnewhorizon.gtnhlib.blockpos.BlockPos; +import com.gtnewhorizon.gtnhlib.client.model.ModelISBRH; public class BlockFluxCrystal extends Block { @@ -26,6 +27,21 @@ public int getMobilityFlag() { return 2; } + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public int getRenderType() { + return ModelISBRH.JSON_ISBRH_ID; + } + @Override public int onBlockPlaced(World worldIn, int x, int y, int z, int side, float subX, float subY, float subZ, int meta) { diff --git a/src/main/resources/assets/utilitiesinexcess/blockstates/flux_crystal.json b/src/main/resources/assets/utilitiesinexcess/blockstates/flux_crystal.json new file mode 100644 index 000000000..d45cf92f4 --- /dev/null +++ b/src/main/resources/assets/utilitiesinexcess/blockstates/flux_crystal.json @@ -0,0 +1,5 @@ +{ + "variants": { + "meta=0": { "model": "utilitiesinexcess:blocks/flux_crystal"} + } +} diff --git a/src/main/resources/assets/utilitiesinexcess/models/blocks/flux_crystal.json b/src/main/resources/assets/utilitiesinexcess/models/blocks/flux_crystal.json new file mode 100644 index 000000000..f541bc557 --- /dev/null +++ b/src/main/resources/assets/utilitiesinexcess/models/blocks/flux_crystal.json @@ -0,0 +1,192 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "2": "utilitiesinexcess:models/flux_crystal", + "particle": "utilitiesinexcess:models/particle/flux_crystal" + }, + "elements": [ + { + "from": [7, 15, 7], + "to": [9, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 15, 7]}, + "faces": { + "north": {"uv": [12.5, 0.5, 13.5, 1], "texture": "#2"}, + "east": {"uv": [12.5, 0.5, 13.5, 1], "texture": "#2"}, + "south": {"uv": [12.5, 0.5, 13.5, 1], "texture": "#2"}, + "west": {"uv": [12.5, 0.5, 13.5, 1], "texture": "#2"}, + "up": {"uv": [3, 3, 2, 2], "texture": "#2"} + } + }, + { + "from": [6, 14, 6], + "to": [10, 15, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 14, 7]}, + "faces": { + "north": {"uv": [12, 1, 14, 1.5], "texture": "#2"}, + "east": {"uv": [12, 1, 14, 1.5], "texture": "#2"}, + "south": {"uv": [12, 1, 14, 1.5], "texture": "#2"}, + "west": {"uv": [12, 1, 14, 1.5], "texture": "#2"}, + "up": {"uv": [3.5, 3.5, 1.5, 1.5], "texture": "#2"} + } + }, + { + "from": [5, 13, 5], + "to": [11, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 13, 7]}, + "faces": { + "north": {"uv": [11.5, 1.5, 14.5, 2], "texture": "#2"}, + "east": {"uv": [11.5, 1.5, 14.5, 2], "texture": "#2"}, + "south": {"uv": [11.5, 1.5, 14.5, 2], "texture": "#2"}, + "west": {"uv": [11.5, 1.5, 14.5, 2], "texture": "#2"}, + "up": {"uv": [4, 4, 1, 1], "texture": "#2"} + } + }, + { + "from": [4, 11, 4], + "to": [12, 13, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 11, 7]}, + "faces": { + "north": {"uv": [11, 2, 15, 3], "texture": "#2"}, + "east": {"uv": [11, 2, 15, 3], "texture": "#2"}, + "south": {"uv": [11, 2, 15, 3], "texture": "#2"}, + "west": {"uv": [11, 2, 15, 3], "texture": "#2"}, + "up": {"uv": [4.5, 4.5, 0.5, 0.5], "texture": "#2"} + } + }, + { + "from": [3, 7, 3], + "to": [13, 11, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 6, 7]}, + "faces": { + "north": {"uv": [10.5, 3, 15.5, 5], "texture": "#2"}, + "east": {"uv": [10.5, 3, 15.5, 5], "texture": "#2"}, + "south": {"uv": [10.5, 3, 15.5, 5], "texture": "#2"}, + "west": {"uv": [10.5, 3, 15.5, 5], "texture": "#2"}, + "up": {"uv": [5, 5, 0, 0], "texture": "#2"}, + "down": {"uv": [5, 0, 0, 5], "texture": "#2"} + } + }, + { + "from": [4, 5, 4], + "to": [12, 7, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 5, 7]}, + "faces": { + "north": {"uv": [11, 5, 15, 6], "texture": "#2"}, + "east": {"uv": [11, 5, 15, 6], "texture": "#2"}, + "south": {"uv": [11, 5, 15, 6], "texture": "#2"}, + "west": {"uv": [11, 5, 15, 6], "texture": "#2"}, + "down": {"uv": [4.5, 0.5, 0.5, 4.5], "texture": "#2"} + } + }, + { + "from": [5, 4, 5], + "to": [11, 5, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 4, 7]}, + "faces": { + "north": {"uv": [11.5, 6, 14.5, 6.5], "texture": "#2"}, + "east": {"uv": [11.5, 6, 14.5, 6.5], "texture": "#2"}, + "south": {"uv": [11.5, 6, 14.5, 6.5], "texture": "#2"}, + "west": {"uv": [11.5, 6, 14.5, 6.5], "texture": "#2"}, + "down": {"uv": [4, 1, 1, 4], "texture": "#2"} + } + }, + { + "from": [6, 3, 6], + "to": [10, 4, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 3, 7]}, + "faces": { + "north": {"uv": [12, 6.5, 14, 7], "texture": "#2"}, + "east": {"uv": [12, 6.5, 14, 7], "texture": "#2"}, + "south": {"uv": [12, 6.5, 14, 7], "texture": "#2"}, + "west": {"uv": [12, 6.5, 14, 7], "texture": "#2"}, + "down": {"uv": [3.5, 1.5, 1.5, 3.5], "texture": "#2"} + } + }, + { + "from": [7, 2, 7], + "to": [9, 3, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 2, 7]}, + "faces": { + "north": {"uv": [12.5, 7, 13.5, 7.5], "texture": "#2"}, + "east": {"uv": [12.5, 7, 13.5, 7.5], "texture": "#2"}, + "south": {"uv": [12.5, 7, 13.5, 7.5], "texture": "#2"}, + "west": {"uv": [12.5, 7, 13.5, 7.5], "texture": "#2"}, + "down": {"uv": [3, 2, 2, 3], "texture": "#2"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 4, 3], + "faces": { + "north": {"uv": [0, 6, 8, 8], "texture": "#2"}, + "east": {"uv": [6.5, 6, 8, 8], "texture": "#2"}, + "south": {"uv": [0, 6, 8, 8], "texture": "#2"}, + "west": {"uv": [0, 6, 1.5, 8], "texture": "#2"}, + "up": {"uv": [8, 14.5, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 14.5, 8, 16], "texture": "#2"} + } + }, + { + "from": [0, 0, 13], + "to": [16, 4, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 12]}, + "faces": { + "north": {"uv": [0, 6, 8, 8], "texture": "#2"}, + "east": {"uv": [0, 6, 1.5, 8], "texture": "#2"}, + "south": {"uv": [0, 6, 8, 8], "texture": "#2"}, + "west": {"uv": [6.5, 6, 8, 8], "texture": "#2"}, + "up": {"uv": [8, 8, 16, 9.5], "texture": "#2"}, + "down": {"uv": [0, 8, 8, 9.5], "texture": "#2"} + } + }, + { + "from": [0, 0, 3], + "to": [3, 4, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 4]}, + "faces": { + "east": {"uv": [1.5, 6, 6.5, 8], "texture": "#2"}, + "west": {"uv": [1.5, 6, 6.5, 8], "texture": "#2"}, + "up": {"uv": [14.5, 9.5, 16, 14.5], "texture": "#2"}, + "down": {"uv": [6.5, 9.5, 8, 14.5], "texture": "#2"} + } + }, + { + "from": [13, 0, 3], + "to": [16, 4, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 0, 4]}, + "faces": { + "east": {"uv": [1.5, 6, 6.5, 8], "texture": "#2"}, + "west": {"uv": [1.5, 6, 6.5, 8], "texture": "#2"}, + "up": {"uv": [8, 9.5, 9.5, 14.5], "texture": "#2"}, + "down": {"uv": [0, 9.5, 1.5, 14.5], "texture": "#2"} + } + }, + { + "from": [3, 0, 3], + "to": [13, 1, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]}, + "faces": { + "up": {"uv": [9.5, 9.5, 14.5, 14.5], "texture": "#2"}, + "down": {"uv": [1.5, 9.5, 6.5, 14.5], "texture": "#2"} + } + } + ], + "groups": [ + { + "name": "crystal", + "origin": [7, 2, 7], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8] + }, + { + "name": "base", + "origin": [8, 8, 8], + "scope": 0, + "color": 0, + "children": [9, 10, 11, 12, 13] + } + ] +} diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/flux_crystal.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/flux_crystal.png deleted file mode 100644 index 20c3b9b162d1575351be192f8a625f56b4b38f34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|bUj@hLoEE0 zH>`>HDBrR>u3m-n@E5}gizROgu$4FleO$q~n2krAS>v3~l(cjP>*o=Z^w@blfEpP* MUHx3vIVCg!0B{B%QUCw| diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/models/flux_crystal.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/models/flux_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..7a2622742c3e90e2d45ee46be1fdf98a43295a57 GIT binary patch literal 2193 zcmV;C2yXX@P)Px-OG!jQR9JIf%BZ zP*H1%SBoeFmo~+Jv>>ED@~BiqpE8dMt5OO`w4{+C&^95YB0(rn2b;uB2xjeFZ^n;( z&aP*6X8On21C$V&R6Www?A$qf&Ue3i?sqQ3Lz+FCvhB`+L3`uDJ$C27pxrqzXy2ia z*_{J}_JV5L!$X?Q|I3aavF%7#w>^2xwoi=M_JV5Lvnktsk92k03#$D;0T>?AK6w$H z1B14@f6*Qu(mn=Ycu2F={fl>65m7dg{zf3bFpR=y5;mu96sktK@zd zeZ9oGt0eTepI~qFypw;vTcTn>ZXPz=An~6dgsDf4lbeIw9JF*uy!Jwg*IzEt(jmF? zxjo5qP9Ev%w(of6X8Z-4+&q{SsEq2|@yyLcy1HEu0zlo|qC1xDOmpXAq8y;-x$SIx z;&Ga)Oji0WHof>1s|UV=CvHrE^lzezd zv)}B0mO~F7B-X!{i?-fC$CfV>?2VG!ljP0*XWgyv=Jq71yJnFis)f=hxj`D^5~q%p zxKt6CdhYl+GmxpP;@Pj=$ro?Aj>wH0DWoSD{r)y4f4`5k<%OhEZ^EJ5Z)4rg%{0cP zj|EX0CD!fS%pbb$JZAs^brI*8D~_Yj8334gKH}p&@S4t^ftTpp`xvqQwM;$YtTxyi zCAT-p;a|VR*c+vfNBr|_-Q-ZyV*Sjp0kHJe~WZ=+oBv`{Fi@brX*tMP^T_( z>2JP{sg+6p<7E$kC$^%^MN_wJ3;Apo^Svp|qR!}!CjhwUhqohE`w>^is11c!7((Gungk^zgfD(hTH%j#M$?ku=07@i|ZaDi~8h*tMF!P@CG$#|70AnYq z{l<-i>KpL;B-C``tSt2O$)4dM&2GO$!smC?^~1?o79!m!p{fbeTesuCu+{x|YE0wQ znC8AqJ=c)lx*b(bxPU*+dirF~_*zb@zM&2 zNZflr<~d`9Qimh~>s?EEYMmAkqTl4bnQA3zsH zY(SP}!nKY3ZQn2e*KX<|lb=D;G(3RcG|@MH1{B4qfv6nD@Hs-H8zuZ+2|*CBEDOC- z;>VCcjGn)k< zo68|3WL>-7&n05;$~dFn8JuY|`VU@RKwo<&4F z*tU(w<00U$#==6Yc!E;39q?BpB4T1v){8Fv07qv=SgdGV9=p={ZD`mY zFtPC=(AIi2v-1Bn^bX$NE+xBbbth{rB= z05sRHVPbBA8ea{9AQ1M2sj8|%(=@b7kz6Imn)+5w&7I(i_yz!GHI>QvcbR;@fHiG$ z+7Kx$IJDpT)J#0 z%d*HDdFMFEGNxc5d1VTP0vc~Q%#Yg z`!P}zAzesgSr!1Mt`Tc!C6!Ad2m)ojNL%aGB&Lq?#posO7L46GfV%5p#O64tDn)gH z_@+KCJh0o{g2S0(G}N~_3;>9T6vxIXstYvt^x^FcbK?452tzhw5q$VQGWi*V)|T}|8r#r}Jc8ih zu`CNyFflMF>qWO9ixep>7V!FIB8_ddwya0fH1gRj2iF+9x#@e#r|4eu@>UQx%$nrk@}&ymk&(KHS3vIzOa0Fjyqsay&}FsQX^DO1M4az!d# zNK@sLu`CN!by~64SM4w+2gtp)4H)2a`Me5{p1gag`_W;7O zpez?-tx!v)yhvTJ4nYv`A-HN7sc~+Zf*`OgU|!QCo6CWsxFE9cIiPFmoB?1aEvA=} zi*kT$E{E4Noo*PF!x*)-Zl@Ep!bgg)SSfNr{RLQZjoUGO`8-K2gSDXpmbHDU8P$eD zq_=M8o&C;@=F*-Hf)C$E{=?1a$UB%?+3AK!Ekh{ag{4k+a(?6^N5zN0Px%zez+vR49>s(rsu>aRA5h-}#?&&%^(^PqV|ltJ^%ak!9p@#!B*-H4*ZHY%9r2 z#grr|xht=Dff^+gjgaKU5Syma#kA4AD6MVxc5LoB_uO;tJ-h#Nyx;|Iy#IdReYog} z!(^-|K6vTyya!N9!-43TV|M|Z?A)2lXDrL&0Fg0g^#Z6WSJm3)R>>uPS|}I<5D0}5 zQhR-);*;?9ncY$9%Ii7+-7u7qAJ8;DG-BE->m_Eo-!wLyx=??1#RjEh!8TE|#5ez2 zU3YiF8_oL4oE@+9-|ZzXA)#Q9j1{42)f+D?s+C34GbX{xC=WRcW{VX|k1(qUO$!Bs z4$l)00PwqBc*r_f&Klri5}P5qPF&nR_)6X6{CNNm5GbWI6iV#Ay<(+u;QhEeH+A4W z_px&yfasx9{>7#~6nVaRS+cIF!@0^+O2UC?LTYbnQN%L4IVU!ito_)zPgg7X>UieT z>0B~+f6ZFXBl8x~gw!4mM7hV;t)=S}NybPTF^Mfax<;H|N z;vBQ@q32HbvPMDs8DF=5&#Gnq9AlKc>9J3C?j*TjEQ{%S>*JPS!|`Zq-h5T@sG*UZ>){A=McVu1 z3cozkc>dyex;wIKbIGy@2LRxyZ1kVYTnjv1y(Ypjd%C3irN~67r@5_gV{|;-E&CM! z96$udbi;tE{(fHf7r%`0#sths6sx6yL1*;qJ=w4DRMrhcV2rEU)(lm( Date: Sat, 27 Jun 2026 01:50:55 -0400 Subject: [PATCH 27/28] Rename --- .../utilitiesinexcess/ModBlocks.java | 8 ++--- .../utilitiesinexcess/UtilitiesInExcess.java | 8 ++--- .../{QEDRecipe.java => EnderLocusRecipe.java} | 4 +-- ...DRegistry.java => EnderLocusRegistry.java} | 22 ++++++------ .../utilitiesinexcess/client/IMCForNEI.java | 4 ++- ...stal.java => BlockConvergenceCrystal.java} | 22 ++++++------ .../{BlockQED.java => BlockEnderLocus.java} | 29 +++++++++++----- .../common/recipe/RecipeLoader.java | 24 ++++++------- ...tityQED.java => TileEntityEnderLocus.java} | 20 +++++++---- ...ava => EnderLocusCraftTweakerSupport.java} | 22 ++++++------ .../compat/exu/PosteaTransforms.java | 6 ++-- .../tileentities/QEDTransformation.java | 4 +-- ...dler.java => EnderLocusRecipeHandler.java} | 32 +++++++++--------- .../compat/nei/NEIConfig.java | 14 ++++---- .../config/blocks/BlockConfig.java | 2 +- .../blockstates/convergence_crystal.json | 5 +++ .../blockstates/flux_crystal.json | 5 --- .../assets/utilitiesinexcess/lang/en_US.lang | 8 ++--- ..._crystal.json => convergence_crystal.json} | 4 +-- ...{qed_bottom.png => ender_locus_bottom.png} | Bin .../{qed_side.png => ender_locus_side.png} | Bin .../{qed_top.png => ender_locus_top.png} | Bin ...ux_crystal.png => convergence_crystal.png} | Bin ...ux_crystal.png => convergence_crystal.png} | Bin 24 files changed, 133 insertions(+), 110 deletions(-) rename src/main/java/com/fouristhenumber/utilitiesinexcess/api/{QEDRecipe.java => EnderLocusRecipe.java} (96%) rename src/main/java/com/fouristhenumber/utilitiesinexcess/api/{QEDRegistry.java => EnderLocusRegistry.java} (83%) rename src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/{BlockFluxCrystal.java => BlockConvergenceCrystal.java} (72%) rename src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/{BlockQED.java => BlockEnderLocus.java} (68%) rename src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/{TileEntityQED.java => TileEntityEnderLocus.java} (94%) rename src/main/java/com/fouristhenumber/utilitiesinexcess/compat/crafttweaker/{QEDCraftTweakerSupport.java => EnderLocusCraftTweakerSupport.java} (79%) rename src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/{QEDRecipeHandler.java => EnderLocusRecipeHandler.java} (67%) create mode 100644 src/main/resources/assets/utilitiesinexcess/blockstates/convergence_crystal.json delete mode 100644 src/main/resources/assets/utilitiesinexcess/blockstates/flux_crystal.json rename src/main/resources/assets/utilitiesinexcess/models/blocks/{flux_crystal.json => convergence_crystal.json} (97%) rename src/main/resources/assets/utilitiesinexcess/textures/blocks/{qed_bottom.png => ender_locus_bottom.png} (100%) rename src/main/resources/assets/utilitiesinexcess/textures/blocks/{qed_side.png => ender_locus_side.png} (100%) rename src/main/resources/assets/utilitiesinexcess/textures/blocks/{qed_top.png => ender_locus_top.png} (100%) rename src/main/resources/assets/utilitiesinexcess/textures/blocks/models/{flux_crystal.png => convergence_crystal.png} (100%) rename src/main/resources/assets/utilitiesinexcess/textures/blocks/models/particle/{flux_crystal.png => convergence_crystal.png} (100%) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java index e90877465..ff9d07d1f 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/ModBlocks.java @@ -13,16 +13,17 @@ 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.BlockConvergenceCrystal; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockConveyor; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockCursedEarth; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockDecorative; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockDecorativeGlass; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockDrum; +import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockEnderLocus; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockEnderLotus; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockEndspark; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockEtherealGlass; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockFloating; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockFluxCrystal; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockGigaTorch; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockInverted; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockLapisAetherius; @@ -32,7 +33,6 @@ import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockPortalEndOfTime; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockPortalUnderWorld; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockPureLove; -import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockQED; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockRadicallyReducedChest; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockRainMuffler; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockRedstoneClock; @@ -158,8 +158,8 @@ public enum ModBlocks { SPIKE_DIAMOND(BlockConfig.spikes.enableDiamondSpike, new BlockSpike(BlockSpike.SpikeType.DIAMOND, "diamond_spike"), BlockSpike.ItemSpike.class, "diamond_spike"), UNDERWORLD_PORTAL(BlockConfig.enableUnderWorldPortal && UnderWorldConfig.enableUnderWorld, new BlockPortalUnderWorld(), "underworld_portal"), END_OF_TIME_PORTAL(BlockConfig.enableEndOfTimePortal && EndOfTimeConfig.enableEndOfTime, new BlockPortalEndOfTime(), BlockPortalEndOfTime.ItemBlockPortalEndOfTime.class, "temporal_gate"), - QED(BlockConfig.enableQED, new BlockQED(), "qed"), - FLUX_CRYSTAL(BlockConfig.enableQED, new BlockFluxCrystal(), "flux_crystal"), + ENDER_LOCUS(BlockConfig.enableEnderLocus, new BlockEnderLocus(), "ender_locus"), + CONVERGENCE_CRYSTAL(BlockConfig.enableEnderLocus, new BlockConvergenceCrystal(), "convergence_crystal"), DECORATIVE_GLASS(BlockConfig.enableDecorativeGlass, new BlockDecorativeGlass(), BlockDecorativeGlass.ItemBlockDecorativeGlass.class, "decorative_glass"), PACIFISTS_BENCH(BlockConfig.enablePacifistsBench, new BlockPacifistsBench(), "pacifists_bench"), SMART_PUMP(BlockConfig.enableSmartPump, new BlockSmartPump(), "smart_pump"), diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java index 12dfda47a..a9fb02243 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java @@ -20,12 +20,12 @@ 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.TileEntityEnderLocus; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityGigaTorch; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityMarginallyMaximisedChest; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityPacifistsBench; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityPortalUnderWorld; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityPureLove; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityQED; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityRadicallyReducedChest; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityRainMuffler; import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityRedstoneClock; @@ -53,7 +53,7 @@ import com.fouristhenumber.utilitiesinexcess.compat.ForgeMultipart.FMPRecipeLoader; import com.fouristhenumber.utilitiesinexcess.compat.ForgeMultipart.multipart.Content; import com.fouristhenumber.utilitiesinexcess.compat.Mods; -import com.fouristhenumber.utilitiesinexcess.compat.crafttweaker.QEDCraftTweakerSupport; +import com.fouristhenumber.utilitiesinexcess.compat.crafttweaker.EnderLocusCraftTweakerSupport; import com.fouristhenumber.utilitiesinexcess.compat.tinkers.TinkersCompat; import com.fouristhenumber.utilitiesinexcess.config.OtherConfig; import com.fouristhenumber.utilitiesinexcess.utils.FMLEventHandler; @@ -139,7 +139,7 @@ public void init(FMLInitializationEvent event) { GameRegistry.registerTileEntity(TileEntityPortalUnderWorld.class, "TileEntityPortalUnderWorldUIE"); GameRegistry.registerTileEntity(TileEntitySmartPump.class, "TileEntitySmartPumpUIE"); GameRegistry.registerTileEntity(TileEntityCollector.class, "TileEntityCollectorUIE"); - GameRegistry.registerTileEntity(TileEntityQED.class, "TileEntityQEDUIE"); + GameRegistry.registerTileEntity(TileEntityEnderLocus.class, "TileEntityEnderLocusUIE"); GameRegistry.registerTileEntity( TileEntityLowTemperatureFurnaceGenerator.class, "TileEntityLowTemperatureFurnaceGeneratorUIE"); @@ -198,7 +198,7 @@ public void init(FMLInitializationEvent event) { } if (Mods.CraftTweaker.isLoaded()) { - MineTweakerAPI.registerClass(QEDCraftTweakerSupport.class); + MineTweakerAPI.registerClass(EnderLocusCraftTweakerSupport.class); } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/api/QEDRecipe.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/api/EnderLocusRecipe.java similarity index 96% rename from src/main/java/com/fouristhenumber/utilitiesinexcess/api/QEDRecipe.java rename to src/main/java/com/fouristhenumber/utilitiesinexcess/api/EnderLocusRecipe.java index 1181191cf..39e7d6b69 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/api/QEDRecipe.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/api/EnderLocusRecipe.java @@ -4,12 +4,12 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; -public class QEDRecipe { +public class EnderLocusRecipe { private final Object[] inputs; private final ItemStack output; - public QEDRecipe(Object[] inputs, ItemStack output) { + public EnderLocusRecipe(Object[] inputs, ItemStack output) { this.inputs = inputs; this.output = output; } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/api/QEDRegistry.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/api/EnderLocusRegistry.java similarity index 83% rename from src/main/java/com/fouristhenumber/utilitiesinexcess/api/QEDRegistry.java rename to src/main/java/com/fouristhenumber/utilitiesinexcess/api/EnderLocusRegistry.java index 696795c1c..40ee5c6d3 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/api/QEDRegistry.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/api/EnderLocusRegistry.java @@ -18,15 +18,15 @@ import it.unimi.dsi.fastutil.objects.ObjectList; import it.unimi.dsi.fastutil.objects.ObjectLists; -public final class QEDRegistry { +public final class EnderLocusRegistry { - private static final QEDRegistry REGISTRY = new QEDRegistry(); + private static final EnderLocusRegistry REGISTRY = new EnderLocusRegistry(); - private final ObjectList recipes = new ObjectArrayList<>(); + private final ObjectList recipes = new ObjectArrayList<>(); - private QEDRegistry() {} + private EnderLocusRegistry() {} - public static QEDRegistry instance() { + public static EnderLocusRegistry instance() { return REGISTRY; } @@ -73,11 +73,11 @@ public void addRecipe(ItemStack output, String[] pattern, Object... inputs) { } } - QEDRecipe qedRecipe = new QEDRecipe(inputArray, output); - this.recipes.add(qedRecipe); + EnderLocusRecipe enderLocusRecipe = new EnderLocusRecipe(inputArray, output); + this.recipes.add(enderLocusRecipe); } - public void addRecipe(QEDRecipe recipe) { + public void addRecipe(EnderLocusRecipe recipe) { this.recipes.add(recipe); } @@ -86,7 +86,7 @@ private void verifyPattern(String[] pattern) { || pattern[0].length() != 3 || pattern[1].length() != 3 || pattern[2].length() != 3) { - throw new IllegalArgumentException("QED recipe pattern must be 3 strings each with 3 characters"); + throw new IllegalArgumentException("Ender Locus recipe pattern must be 3 strings each with 3 characters"); } } @@ -95,7 +95,7 @@ public void removeRecipe(ItemStack output) { } public ItemStack findRecipe(InventoryCrafting inv, boolean consume) { - for (QEDRecipe recipe : this.recipes) { + for (EnderLocusRecipe recipe : this.recipes) { if (recipe.matches(inv)) { if (consume) { for (int i = 0; i < 9; i++) { @@ -108,7 +108,7 @@ public ItemStack findRecipe(InventoryCrafting inv, boolean consume) { return null; } - public List getAllRecipes() { + public List getAllRecipes() { return ObjectLists.unmodifiable(this.recipes); } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/client/IMCForNEI.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/client/IMCForNEI.java index ed243da0b..a41dea881 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/client/IMCForNEI.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/client/IMCForNEI.java @@ -78,7 +78,9 @@ public static void IMCSender() { sendInfoPage("", "nei.infopage.uie.drum.1"); - sendInfoPage(",", "nei.infopage.uie.qed.1"); + sendInfoPage( + ",", + "nei.infopage.uie.ender_locus.1"); sendInfoPage("", "nei.infopage.uie.block_update_detector.1"); sendInfoPage( diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockConvergenceCrystal.java similarity index 72% rename from src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java rename to src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockConvergenceCrystal.java index cc09a0350..a220a0ac7 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockFluxCrystal.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockConvergenceCrystal.java @@ -9,16 +9,16 @@ import net.minecraft.world.World; import com.fouristhenumber.utilitiesinexcess.ModBlocks; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityQED; +import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityEnderLocus; import com.gtnewhorizon.gtnhlib.blockpos.BlockPos; import com.gtnewhorizon.gtnhlib.client.model.ModelISBRH; -public class BlockFluxCrystal extends Block { +public class BlockConvergenceCrystal extends Block { - public BlockFluxCrystal() { + public BlockConvergenceCrystal() { super(Material.iron); - setBlockName("flux_crystal"); - setBlockTextureName("utilitiesinexcess:flux_crystal"); + setBlockName("convergence_crystal"); + setBlockTextureName("utilitiesinexcess:convergence_crystal"); setHardness(5.0F); } @@ -46,10 +46,10 @@ public int getRenderType() { public int onBlockPlaced(World worldIn, int x, int y, int z, int side, float subX, float subY, float subZ, int meta) { if (!worldIn.isRemote) { - Set positions = scanForBlock(worldIn, x, y, z, 9, ModBlocks.QED.get()); + Set positions = scanForBlock(worldIn, x, y, z, 9, ModBlocks.ENDER_LOCUS.get()); for (BlockPos pos : positions) { - TileEntityQED qed = (TileEntityQED) worldIn.getTileEntity(pos.x, pos.y, pos.z); - qed.addCrystal(); + TileEntityEnderLocus enderLocus = (TileEntityEnderLocus) worldIn.getTileEntity(pos.x, pos.y, pos.z); + enderLocus.addCrystal(); } } @@ -59,10 +59,10 @@ public int onBlockPlaced(World worldIn, int x, int y, int z, int side, float sub @Override public void onBlockPreDestroy(World worldIn, int x, int y, int z, int meta) { if (!worldIn.isRemote) { - Set positions = scanForBlock(worldIn, x, y, z, 9, ModBlocks.QED.get()); + Set positions = scanForBlock(worldIn, x, y, z, 9, ModBlocks.ENDER_LOCUS.get()); for (BlockPos pos : positions) { - TileEntityQED qed = (TileEntityQED) worldIn.getTileEntity(pos.x, pos.y, pos.z); - qed.removeCrystal(); + TileEntityEnderLocus enderLocus = (TileEntityEnderLocus) worldIn.getTileEntity(pos.x, pos.y, pos.z); + enderLocus.removeCrystal(); } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockEnderLocus.java similarity index 68% rename from src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java rename to src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockEnderLocus.java index 0bc8fa877..6dd17c2e7 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/blocks/BlockEnderLocus.java @@ -1,39 +1,43 @@ package com.fouristhenumber.utilitiesinexcess.common.blocks; +import static com.fouristhenumber.utilitiesinexcess.utils.UIEUtils.dropItemsFromIInventory; + +import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import com.cleanroommc.modularui.factory.GuiFactories; -import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityQED; +import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityEnderLocus; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class BlockQED extends BlockContainer { +public class BlockEnderLocus extends BlockContainer { - public BlockQED() { + public BlockEnderLocus() { super(Material.iron); - setBlockName("qed"); - setBlockTextureName("utilitiesinexcess:qed"); + setBlockName("ender_locus"); + setBlockTextureName("utilitiesinexcess:ender_locus"); setHardness(5.0F); } @Override public TileEntity createNewTileEntity(World worldIn, int meta) { - return new TileEntityQED(); + return new TileEntityEnderLocus(); } @Override public void onBlockAdded(World worldIn, int x, int y, int z) { if (!worldIn.isRemote) { - TileEntityQED qed = (TileEntityQED) worldIn.getTileEntity(x, y, z); - qed.scan(); + TileEntityEnderLocus locus = (TileEntityEnderLocus) worldIn.getTileEntity(x, y, z); + locus.scan(); } super.onBlockAdded(worldIn, x, y, z); } @@ -69,4 +73,13 @@ public IIcon getIcon(int side, int meta) { public IIcon getIcon(IBlockAccess worldIn, int x, int y, int z, int side) { return getIcon(side, 0); } + + @Override + public void breakBlock(World worldIn, int x, int y, int z, Block blockBroken, int meta) { + TileEntity te = worldIn.getTileEntity(x, y, z); + if (te instanceof IInventory inv) { + dropItemsFromIInventory(0, inv, worldIn, te.xCoord, te.yCoord, te.zCoord); + } + super.breakBlock(worldIn, x, y, z, blockBroken, meta); + } } 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 74abcd1fe..be34f29ba 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeLoader.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeLoader.java @@ -10,7 +10,7 @@ import com.fouristhenumber.utilitiesinexcess.ModBlocks; import com.fouristhenumber.utilitiesinexcess.ModItems; -import com.fouristhenumber.utilitiesinexcess.api.QEDRegistry; +import com.fouristhenumber.utilitiesinexcess.api.EnderLocusRegistry; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockColored; import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockCompressed; import com.fouristhenumber.utilitiesinexcess.compat.Mods; @@ -30,7 +30,7 @@ public static void run() { loadLapisAetheriusRecipes(); loadSpikeRecipes(); loadGeneratorRecipes(); - loadQEDRecipes(); + loadEnderLocusRecipes(); loadGlassRecipes(); loadDecorativeBlocksRecipes(); loadColoredBlockRecipes(); @@ -1316,10 +1316,10 @@ private static void loadInversionRecipes() { } } - private static void loadQEDRecipes() { - // QED + private static void loadEnderLocusRecipes() { + // Ender Locus addShapedRecipe( - ModBlocks.QED, + ModBlocks.ENDER_LOCUS, "ece", "omo", "ooo", @@ -1332,9 +1332,9 @@ private static void loadQEDRecipes() { 'm', ModBlocks.DECORATIVE_BLOCKS.newItemStack(1, 0)); - // Flux Crystal + // Convergence Crystal addShapedRecipe( - ModBlocks.FLUX_CRYSTAL, + ModBlocks.CONVERGENCE_CRYSTAL, " e ", " o ", "ooo", @@ -1343,8 +1343,8 @@ private static void loadQEDRecipes() { 'o', ModBlocks.DECORATIVE_BLOCKS.newItemStack(1, 5)); - // Ore + Coal -> Ingot (QED) - QEDRegistry.instance() + // Ore + Coal -> Ingot (Ender Locus) + EnderLocusRegistry.instance() .addRecipe( new ItemStack(Items.gold_ingot, 3), new String[] { "OC ", " ", " " }, @@ -1353,7 +1353,7 @@ private static void loadQEDRecipes() { 'C', Items.coal); - QEDRegistry.instance() + EnderLocusRegistry.instance() .addRecipe( new ItemStack(Items.iron_ingot, 3), new String[] { "OC ", " ", " " }, @@ -1362,8 +1362,8 @@ private static void loadQEDRecipes() { 'C', Items.coal); - // Giga Torch (QED) - QEDRegistry.instance() + // Giga Torch (Ender Locus) + EnderLocusRegistry.instance() .addRecipe( ModBlocks.GIGA_TORCH.newItemStack(), new String[] { "RCH", "CWC", "CWC" }, diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityEnderLocus.java similarity index 94% rename from src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java rename to src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityEnderLocus.java index a4687ae35..61c1a1795 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityQED.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityEnderLocus.java @@ -36,10 +36,10 @@ import com.cleanroommc.modularui.widgets.slot.ModularSlot; import com.fouristhenumber.utilitiesinexcess.ModBlocks; import com.fouristhenumber.utilitiesinexcess.UtilitiesInExcess; -import com.fouristhenumber.utilitiesinexcess.api.QEDRegistry; +import com.fouristhenumber.utilitiesinexcess.api.EnderLocusRegistry; import com.gtnewhorizon.gtnhlib.blockpos.BlockPos; -public class TileEntityQED extends TileEntity implements IInventory, IGuiHolder { +public class TileEntityEnderLocus extends TileEntity implements IInventory, IGuiHolder { private final InventoryCrafting craftMatrix = new InventoryCrafting(new ContainerDummy(), 3, 3); private final InventoryCraftResult craftResult = new InventoryCraftResult(); @@ -68,7 +68,7 @@ public void updateEntity() { craftingProgress += (crystals * 40); } if (craftingProgress >= recipeCost) { - ItemStack newStack = QEDRegistry.instance() + ItemStack newStack = EnderLocusRegistry.instance() .findRecipe(craftMatrix, true); if (newStack != null) { ItemStack outputStack = craftResult.getStackInSlot(0); @@ -76,7 +76,7 @@ public void updateEntity() { if (outputStack == null) craftResult.setInventorySlotContents(0, newStack); else if (canInsertToOutput(newStack)) outputStack.stackSize += newStack.stackSize; else UtilitiesInExcess.LOG - .error("Failed to complete QED recipe because output stack did not match craft result."); + .error("Failed to complete Ender Locus recipe because output stack did not match craft result."); } craftingProgress = 0; crafting = false; @@ -94,12 +94,18 @@ public void removeCrystal() { } public void scan() { - Set positions = scanForBlock(worldObj, xCoord, yCoord, zCoord, 9, ModBlocks.FLUX_CRYSTAL.get()); + Set positions = scanForBlock( + worldObj, + xCoord, + yCoord, + zCoord, + 9, + ModBlocks.CONVERGENCE_CRYSTAL.get()); crystals = positions.size(); } private void updateCraftingResult() { - ItemStack stack = QEDRegistry.instance() + ItemStack stack = EnderLocusRegistry.instance() .findRecipe(craftMatrix, false); if (stack == null || stack.getItem() != preview.getItem()) craftingProgress = 0; crafting = stack != null && canInsertToOutput(stack); @@ -189,7 +195,7 @@ public int getSizeInventory() { @Override public String getInventoryName() { - return "tile.qed.name"; + return "tile.ender_locus.name"; } @Override diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/crafttweaker/QEDCraftTweakerSupport.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/crafttweaker/EnderLocusCraftTweakerSupport.java similarity index 79% rename from src/main/java/com/fouristhenumber/utilitiesinexcess/compat/crafttweaker/QEDCraftTweakerSupport.java rename to src/main/java/com/fouristhenumber/utilitiesinexcess/compat/crafttweaker/EnderLocusCraftTweakerSupport.java index 15d70d923..185c6cdbb 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/crafttweaker/QEDCraftTweakerSupport.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/crafttweaker/EnderLocusCraftTweakerSupport.java @@ -5,8 +5,8 @@ import net.minecraftforge.oredict.OreDictionary; import com.fouristhenumber.utilitiesinexcess.UtilitiesInExcess; -import com.fouristhenumber.utilitiesinexcess.api.QEDRecipe; -import com.fouristhenumber.utilitiesinexcess.api.QEDRegistry; +import com.fouristhenumber.utilitiesinexcess.api.EnderLocusRecipe; +import com.fouristhenumber.utilitiesinexcess.api.EnderLocusRegistry; import minetweaker.IUndoableAction; import minetweaker.MineTweakerAPI; @@ -18,9 +18,9 @@ import stanhebben.zenscript.annotations.ZenClass; import stanhebben.zenscript.annotations.ZenMethod; -@ZenClass("mods.utilitiesinexcess.QED") +@ZenClass("mods.utilitiesinexcess.EnderLocus") @ModOnly(UtilitiesInExcess.MODID) -public class QEDCraftTweakerSupport { +public class EnderLocusCraftTweakerSupport { @ZenMethod public static void addRecipe(IItemStack output, IIngredient[][] inputs) { @@ -50,8 +50,8 @@ public void apply() { } } - QEDRegistry.instance() - .addRecipe(new QEDRecipe(inputArray, MineTweakerMC.getItemStack(output))); + EnderLocusRegistry.instance() + .addRecipe(new EnderLocusRecipe(inputArray, MineTweakerMC.getItemStack(output))); successful = true; } @@ -62,18 +62,18 @@ public boolean canUndo() { @Override public void undo() { - QEDRegistry.instance() + EnderLocusRegistry.instance() .removeRecipe(MineTweakerMC.getItemStack(output)); } @Override public String describe() { - return "Adding QED recipe for " + StatCollector.translateToLocal(output.getName()); + return "Adding Ender Locus recipe for " + StatCollector.translateToLocal(output.getName()); } @Override public String describeUndo() { - return "Undoing QED recipe addition for " + StatCollector.translateToLocal(output.getName()); + return "Undoing Ender Locus recipe addition for " + StatCollector.translateToLocal(output.getName()); } @Override @@ -89,13 +89,13 @@ public static void removeRecipe(IItemStack output) { @Override public void apply() { - QEDRegistry.instance() + EnderLocusRegistry.instance() .removeRecipe(MineTweakerMC.getItemStack(output)); } @Override public String describe() { - return "Removing QED recipe for " + StatCollector.translateToLocal(output.getName()); + return "Removing Ender Locus recipe for " + StatCollector.translateToLocal(output.getName()); } @Override diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/PosteaTransforms.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/PosteaTransforms.java index 937c9c8ce..f28385485 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/PosteaTransforms.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/PosteaTransforms.java @@ -81,11 +81,11 @@ private static void transformItems() { ItemStackReplacementManager .addSimpleReplacement("ExtraUtilities:drum", 1, ModBlocks.BEDROCKIUM_DRUM.getItem(), 0); ItemStackReplacementManager - .addSimpleReplacement("ExtraUtilities:endConstructor", 0, ModBlocks.QED.getItem(), 0); + .addSimpleReplacement("ExtraUtilities:endConstructor", 0, ModBlocks.ENDER_LOCUS.getItem(), 0); ItemStackReplacementManager - .addSimpleReplacement("ExtraUtilities:endConstructor", 2, ModBlocks.FLUX_CRYSTAL.getItem(), 0); + .addSimpleReplacement("ExtraUtilities:endConstructor", 2, ModBlocks.CONVERGENCE_CRYSTAL.getItem(), 0); ItemStackReplacementManager - .addSimpleReplacement("ExtraUtilities:endConstructor", 3, ModBlocks.FLUX_CRYSTAL.getItem(), 0); + .addSimpleReplacement("ExtraUtilities:endConstructor", 3, ModBlocks.CONVERGENCE_CRYSTAL.getItem(), 0); // Custom transformers ItemStackReplacementManager .addTransformationHandler("ExtraUtilities:divisionSigil", new DivisionSigilTransformation()); diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/QEDTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/QEDTransformation.java index f050462ed..ffe04100e 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/QEDTransformation.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/QEDTransformation.java @@ -13,11 +13,11 @@ public class QEDTransformation { public static BlockInfo transform(NBTTagCompound _oldTag, World world, Chunk chunk) { - return new BlockInfo(ModBlocks.QED.get(), 0, QEDTransformation::transformNBT); + return new BlockInfo(ModBlocks.ENDER_LOCUS.get(), 0, QEDTransformation::transformNBT); } private static NBTTagCompound transformNBT(NBTTagCompound oldTag) { - NBTTagCompound tag = PosteaUtilities.cleanseNBT("TileEntityQEDUIE", oldTag); + NBTTagCompound tag = PosteaUtilities.cleanseNBT("TileEntityEnderLocusUIE", oldTag); NBTTagList itemsTag = new NBTTagList(); for (int i = 0; i < 9; i++) { NBTTagCompound exuSlotTag = oldTag.getCompoundTag("items_" + i); diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/EnderLocusRecipeHandler.java similarity index 67% rename from src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java rename to src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/EnderLocusRecipeHandler.java index 926bc7c82..cb383e717 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/QEDRecipeHandler.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/EnderLocusRecipeHandler.java @@ -5,31 +5,31 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; -import com.fouristhenumber.utilitiesinexcess.api.QEDRecipe; -import com.fouristhenumber.utilitiesinexcess.api.QEDRegistry; +import com.fouristhenumber.utilitiesinexcess.api.EnderLocusRecipe; +import com.fouristhenumber.utilitiesinexcess.api.EnderLocusRegistry; import codechicken.nei.NEIClientConfig; import codechicken.nei.NEIServerUtils; import codechicken.nei.recipe.ShapedRecipeHandler; -public class QEDRecipeHandler extends ShapedRecipeHandler { +public class EnderLocusRecipeHandler extends ShapedRecipeHandler { @Override public String getOverlayIdentifier() { - return "qed_recipes"; + return "ender_locus_recipes"; } @Override public String getRecipeName() { - return StatCollector.translateToLocal("nei.title.uie.qed"); + return StatCollector.translateToLocal("nei.title.uie.ender_locus"); } @Override public void loadUsageRecipes(String inputId, Object... ingredients) { if (inputId.equals(this.getOverlayIdentifier())) { - for (QEDRecipe qedRecipe : QEDRegistry.instance() + for (EnderLocusRecipe enderLocusRecipe : EnderLocusRegistry.instance() .getAllRecipes()) { - CachedShapedRecipe neiRecipe = makeNeiRecipe(qedRecipe); + CachedShapedRecipe neiRecipe = makeNeiRecipe(enderLocusRecipe); if (neiRecipe == null) continue; neiRecipe.computeVisuals(); this.arecipes.add(neiRecipe); @@ -46,9 +46,9 @@ public void loadTransferRects() { @Override public void loadUsageRecipes(ItemStack ingredient) { - for (QEDRecipe qedRecipe : QEDRegistry.instance() + for (EnderLocusRecipe enderLocusRecipe : EnderLocusRegistry.instance() .getAllRecipes()) { - CachedShapedRecipe neiRecipe = makeNeiRecipe(qedRecipe); + CachedShapedRecipe neiRecipe = makeNeiRecipe(enderLocusRecipe); if (neiRecipe == null) continue; if (neiRecipe.contains(neiRecipe.ingredients, ingredient)) { @@ -62,9 +62,9 @@ public void loadUsageRecipes(ItemStack ingredient) { @Override public void loadCraftingRecipes(String outputId, Object... results) { if (outputId.equals(this.getOverlayIdentifier())) { - for (QEDRecipe qedRecipe : QEDRegistry.instance() + for (EnderLocusRecipe enderLocusRecipe : EnderLocusRegistry.instance() .getAllRecipes()) { - CachedShapedRecipe neiRecipe = makeNeiRecipe(qedRecipe); + CachedShapedRecipe neiRecipe = makeNeiRecipe(enderLocusRecipe); if (neiRecipe == null) continue; neiRecipe.computeVisuals(); this.arecipes.add(neiRecipe); @@ -76,10 +76,10 @@ public void loadCraftingRecipes(String outputId, Object... results) { @Override public void loadCraftingRecipes(ItemStack result) { - for (QEDRecipe qedRecipe : QEDRegistry.instance() + for (EnderLocusRecipe enderLocusRecipe : EnderLocusRegistry.instance() .getAllRecipes()) { - if (NEIServerUtils.areStacksSameTypeCrafting(qedRecipe.getOutput(), result)) { - CachedShapedRecipe neiRecipe = makeNeiRecipe(qedRecipe); + if (NEIServerUtils.areStacksSameTypeCrafting(enderLocusRecipe.getOutput(), result)) { + CachedShapedRecipe neiRecipe = makeNeiRecipe(enderLocusRecipe); if (neiRecipe == null) continue; neiRecipe.computeVisuals(); this.arecipes.add(neiRecipe); @@ -87,7 +87,7 @@ public void loadCraftingRecipes(ItemStack result) { } } - private CachedShapedRecipe makeNeiRecipe(QEDRecipe recipe) { + private CachedShapedRecipe makeNeiRecipe(EnderLocusRecipe recipe) { try { Object[] inputs = recipe.getInputs(); for (Object rawInput : inputs) { @@ -97,7 +97,7 @@ private CachedShapedRecipe makeNeiRecipe(QEDRecipe recipe) { } return new CachedShapedRecipe(3, 3, inputs, recipe.getOutput()); } catch (Exception e) { - NEIClientConfig.logger.error("Error loading QED recipe: ", e); + NEIClientConfig.logger.error("Error loading Ender Locus recipe: ", e); return null; } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/NEIConfig.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/NEIConfig.java index ec5dde4ca..10422f765 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/NEIConfig.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/nei/NEIConfig.java @@ -28,27 +28,29 @@ public String getVersion() { @Override public void loadConfig() { - QEDRecipeHandler handler = new QEDRecipeHandler(); + EnderLocusRecipeHandler handler = new EnderLocusRecipeHandler(); API.registerRecipeHandler(handler); API.registerUsageHandler(handler); - API.addRecipeCatalyst(ModBlocks.QED.newItemStack(), handler, 1); - API.addRecipeCatalyst(ModBlocks.FLUX_CRYSTAL.newItemStack(), handler, 0); + API.addRecipeCatalyst(ModBlocks.ENDER_LOCUS.newItemStack(), handler, 1); + API.addRecipeCatalyst(ModBlocks.CONVERGENCE_CRYSTAL.newItemStack(), handler, 0); FMLInterModComms.sendRuntimeMessage( UtilitiesInExcess.MODID, "NEIPlugins", "register-crafting-handler", - "utilitiesinexcess@" + StatCollector.translateToLocal("nei.title.uie.qed") + "@qed_recipes"); + "utilitiesinexcess@" + StatCollector.translateToLocal("nei.title.uie.ender_locus") + + "@ender_locus_recipes"); } @SubscribeEvent public void registerHandlerInfo(NEIRegisterHandlerInfosEvent event) { event.registerHandlerInfo( - new HandlerInfo.Builder("qed_recipes", UtilitiesInExcess.MODNAME, UtilitiesInExcess.MODID).setHeight(140) + new HandlerInfo.Builder("ender_locus_recipes", UtilitiesInExcess.MODNAME, UtilitiesInExcess.MODID) + .setHeight(140) .setWidth(166) - .setDisplayStack(ModBlocks.QED.newItemStack()) + .setDisplayStack(ModBlocks.ENDER_LOCUS.newItemStack()) .build()); } } 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 96636973f..661cd05ea 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/config/blocks/BlockConfig.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/config/blocks/BlockConfig.java @@ -105,7 +105,7 @@ public static void registerConfig() throws ConfigException { public static boolean enableEndOfTimePortal; @Config.DefaultBoolean(true) - public static boolean enableQED; + public static boolean enableEnderLocus; @Config.DefaultBoolean(true) public static boolean enableSmartPump; diff --git a/src/main/resources/assets/utilitiesinexcess/blockstates/convergence_crystal.json b/src/main/resources/assets/utilitiesinexcess/blockstates/convergence_crystal.json new file mode 100644 index 000000000..41d6b90ea --- /dev/null +++ b/src/main/resources/assets/utilitiesinexcess/blockstates/convergence_crystal.json @@ -0,0 +1,5 @@ +{ + "variants": { + "meta=0": { "model": "utilitiesinexcess:blocks/convergence_crystal"} + } +} diff --git a/src/main/resources/assets/utilitiesinexcess/blockstates/flux_crystal.json b/src/main/resources/assets/utilitiesinexcess/blockstates/flux_crystal.json deleted file mode 100644 index d45cf92f4..000000000 --- a/src/main/resources/assets/utilitiesinexcess/blockstates/flux_crystal.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "utilitiesinexcess:blocks/flux_crystal"} - } -} diff --git a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang index b5594fd25..ed318a3d1 100644 --- a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang +++ b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang @@ -44,7 +44,7 @@ tile.compressed_gravel.7.name=Octuple Compressed Gravel tile.compressed_gravel.desc=%,d Gravel nei.title.uie.plugin=UtilitiesInExcess NEI Plugin -nei.title.uie.qed=QED Recipes +nei.title.uie.ender_locus=Ender Locus Recipes nei.infopage.uie.compressed.1=Tons of spare blocks lying around? Save yourself some space by compacting them. Compressible blocks can be repeatedly compressed up to eight times! @@ -389,9 +389,9 @@ nei.infopage.uie.golden_bag.1=A fancy bag which can carry a double chest's worth item.xray_glasses.name=X-Ray Glasses nei.infopage.uie.xray_glasses.1=These stylish spectacles highlight like blocks adjacent to the one you are looking at through walls. Spot entire ore veins with ease! -tile.qed.name=QED -tile.flux_crystal.name=Flux Crystal -nei.infopage.uie.qed.1=The QED is a simple machine that draws Flux Energy from nearby Flux Crystals in order to complete recipes. The QED operates faster for each Flux Crystal in a 9 block sphere around it. +tile.ender_locus.name=Ender Locus +tile.convergence_crystal.name=Convergence Crystal +nei.infopage.uie.ender_locus.1=The Ender Locus is a simple machine that draws Flux Energy from nearby Convergence Crystals in order to complete recipes. The Ender Locus operates faster for each Convergence Crystal in a 9 block sphere around it. gui.flux_strength=Flux Strength: %s diff --git a/src/main/resources/assets/utilitiesinexcess/models/blocks/flux_crystal.json b/src/main/resources/assets/utilitiesinexcess/models/blocks/convergence_crystal.json similarity index 97% rename from src/main/resources/assets/utilitiesinexcess/models/blocks/flux_crystal.json rename to src/main/resources/assets/utilitiesinexcess/models/blocks/convergence_crystal.json index f541bc557..fa3f4817c 100644 --- a/src/main/resources/assets/utilitiesinexcess/models/blocks/flux_crystal.json +++ b/src/main/resources/assets/utilitiesinexcess/models/blocks/convergence_crystal.json @@ -3,8 +3,8 @@ "credit": "Made with Blockbench", "texture_size": [32, 32], "textures": { - "2": "utilitiesinexcess:models/flux_crystal", - "particle": "utilitiesinexcess:models/particle/flux_crystal" + "2": "utilitiesinexcess:models/convergence_crystal", + "particle": "utilitiesinexcess:models/particle/convergence_crystal" }, "elements": [ { diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_bottom.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/ender_locus_bottom.png similarity index 100% rename from src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_bottom.png rename to src/main/resources/assets/utilitiesinexcess/textures/blocks/ender_locus_bottom.png diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_side.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/ender_locus_side.png similarity index 100% rename from src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_side.png rename to src/main/resources/assets/utilitiesinexcess/textures/blocks/ender_locus_side.png diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_top.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/ender_locus_top.png similarity index 100% rename from src/main/resources/assets/utilitiesinexcess/textures/blocks/qed_top.png rename to src/main/resources/assets/utilitiesinexcess/textures/blocks/ender_locus_top.png diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/models/flux_crystal.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/models/convergence_crystal.png similarity index 100% rename from src/main/resources/assets/utilitiesinexcess/textures/blocks/models/flux_crystal.png rename to src/main/resources/assets/utilitiesinexcess/textures/blocks/models/convergence_crystal.png diff --git a/src/main/resources/assets/utilitiesinexcess/textures/blocks/models/particle/flux_crystal.png b/src/main/resources/assets/utilitiesinexcess/textures/blocks/models/particle/convergence_crystal.png similarity index 100% rename from src/main/resources/assets/utilitiesinexcess/textures/blocks/models/particle/flux_crystal.png rename to src/main/resources/assets/utilitiesinexcess/textures/blocks/models/particle/convergence_crystal.png From 117afe31a15b485eb95b91f6b8356fe87c1615b7 Mon Sep 17 00:00:00 2001 From: Mary Hopson Date: Sat, 27 Jun 2026 01:52:30 -0400 Subject: [PATCH 28/28] Nerf crystals for parity --- .../common/tileentities/TileEntityEnderLocus.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityEnderLocus.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityEnderLocus.java index 61c1a1795..5301635f7 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityEnderLocus.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/tileentities/TileEntityEnderLocus.java @@ -65,7 +65,7 @@ public void updateEntity() { } if (crafting) { - craftingProgress += (crystals * 40); + craftingProgress += (crystals * 10); } if (craftingProgress >= recipeCost) { ItemStack newStack = EnderLocusRegistry.instance()