Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
ef320ea
QED base
FourIsTheNumber Nov 8, 2025
e1d8e89
Semi-functional QED
FourIsTheNumber Nov 8, 2025
23681cc
Fix crystal syncing
FourIsTheNumber Nov 8, 2025
dce0c6d
Merge branch 'refs/heads/master' into QED
FourIsTheNumber Nov 13, 2025
039058a
Address comments
FourIsTheNumber Nov 15, 2025
7bced75
Merge branch 'master' into QED
FourIsTheNumber Nov 21, 2025
aa779d3
Spotless apply for branch QED for #62 (#67)
github-actions[bot] Nov 21, 2025
644ec11
Merge branch 'refs/heads/master' into QED
FourIsTheNumber Nov 22, 2025
e18ed9c
Merge
FourIsTheNumber Nov 22, 2025
28b631f
Merge branch 'master' into QED
FourIsTheNumber Nov 25, 2025
12c62c4
Merge branch 'master' into QED
FourIsTheNumber Jun 24, 2026
a0e220b
Make updateEntity serverside
FourIsTheNumber Jun 24, 2026
5fc08be
NBT typo
FourIsTheNumber Jun 24, 2026
1c07168
Add hardness
FourIsTheNumber Jun 24, 2026
d0a42f2
Fix bad mui nonsense
FourIsTheNumber Jun 24, 2026
f7a8117
Switch back to on place/break scanning
FourIsTheNumber Jun 24, 2026
10bce29
Add flux strength lang
FourIsTheNumber Jun 24, 2026
a85c240
Try and fail to fix NEI handler
FourIsTheNumber Jun 24, 2026
406b834
Bless you koolkrafter
FourIsTheNumber Jun 24, 2026
9212c77
Add actual recipes
FourIsTheNumber Jun 24, 2026
0dd1895
Fix wildcard match error in recipes
FourIsTheNumber Jun 24, 2026
0879639
Star import
FourIsTheNumber Jun 24, 2026
d176f42
Change energy for recipes for exu parity
FourIsTheNumber Jun 24, 2026
8429f4e
Add postea transformers
FourIsTheNumber Jun 24, 2026
95ce117
Optimising images contained in QED for #62 (#172)
github-actions[bot] Jun 24, 2026
e00b323
Add info page
FourIsTheNumber Jun 24, 2026
21b5a6b
Merge remote-tracking branch 'origin/QED' into QED
FourIsTheNumber Jun 24, 2026
47c28e5
New jextures (june textures)
FourIsTheNumber Jun 24, 2026
d625441
Make blocks not pushable
FourIsTheNumber Jun 24, 2026
d363994
Optimising images contained in QED for #62 (#174)
github-actions[bot] Jun 24, 2026
d61ed10
Didn't need to set this for TE
FourIsTheNumber Jun 24, 2026
4cde989
Merge remote-tracking branch 'origin/QED' into QED
FourIsTheNumber Jun 24, 2026
d618d9e
Flux Crystal model
FourIsTheNumber Jun 25, 2026
dd5ba0d
Merge branch 'master' into QED
FourIsTheNumber Jun 27, 2026
c7b767b
Rename
FourIsTheNumber Jun 27, 2026
117afe3
Nerf crystals for parity
FourIsTheNumber Jun 27, 2026
37473c2
Merge branch 'master' into QED
FourIsTheNumber Jun 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,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;
Expand Down Expand Up @@ -84,6 +85,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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@
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;
Expand Down Expand Up @@ -156,6 +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"),
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"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
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;
Expand Down Expand Up @@ -52,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;
Expand Down Expand Up @@ -80,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)
Expand Down Expand Up @@ -137,6 +139,7 @@ public void init(FMLInitializationEvent event) {
GameRegistry.registerTileEntity(TileEntityPortalUnderWorld.class, "TileEntityPortalUnderWorldUIE");
GameRegistry.registerTileEntity(TileEntitySmartPump.class, "TileEntitySmartPumpUIE");
GameRegistry.registerTileEntity(TileEntityCollector.class, "TileEntityCollectorUIE");
GameRegistry.registerTileEntity(TileEntityEnderLocus.class, "TileEntityEnderLocusUIE");
GameRegistry.registerTileEntity(
TileEntityLowTemperatureFurnaceGenerator.class,
"TileEntityLowTemperatureFurnaceGeneratorUIE");
Expand Down Expand Up @@ -195,7 +198,7 @@ public void init(FMLInitializationEvent event) {
}

if (Mods.CraftTweaker.isLoaded()) {
MineTweakerAPI.registerClass(QEDCraftTweakerSupport.class);
MineTweakerAPI.registerClass(EnderLocusCraftTweakerSupport.class);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<QEDRecipe> recipes = new ObjectArrayList<>();
private final ObjectList<EnderLocusRecipe> recipes = new ObjectArrayList<>();

private QEDRegistry() {}
private EnderLocusRegistry() {}

public static QEDRegistry instance() {
public static EnderLocusRegistry instance() {
return REGISTRY;
}

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

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

Expand All @@ -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++) {
Expand All @@ -108,7 +108,7 @@ public ItemStack findRecipe(InventoryCrafting inv, boolean consume) {
return null;
}

public List<QEDRecipe> getAllRecipes() {
public List<EnderLocusRecipe> getAllRecipes() {
return ObjectLists.unmodifiable(this.recipes);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ public static void IMCSender() {

sendInfoPage("<utilitiesinexcess:drum>", "nei.infopage.uie.drum.1");

sendInfoPage(
"<utilitiesinexcess:ender_locus>,<utilitiesinexcess:convergence_crystal>",
"nei.infopage.uie.ender_locus.1");

sendInfoPage("<utilitiesinexcess:block_update_detector>", "nei.infopage.uie.block_update_detector.1");
sendInfoPage(
"<utilitiesinexcess:advanced_block_update_detector>",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
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.TileEntityEnderLocus;
import com.gtnewhorizon.gtnhlib.blockpos.BlockPos;
import com.gtnewhorizon.gtnhlib.client.model.ModelISBRH;

public class BlockConvergenceCrystal extends Block {

public BlockConvergenceCrystal() {
super(Material.iron);
setBlockName("convergence_crystal");
setBlockTextureName("utilitiesinexcess:convergence_crystal");
setHardness(5.0F);
}

@Override
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) {
if (!worldIn.isRemote) {
Set<BlockPos> positions = scanForBlock(worldIn, x, y, z, 9, ModBlocks.ENDER_LOCUS.get());
for (BlockPos pos : positions) {
TileEntityEnderLocus enderLocus = (TileEntityEnderLocus) worldIn.getTileEntity(pos.x, pos.y, pos.z);
enderLocus.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<BlockPos> positions = scanForBlock(worldIn, x, y, z, 9, ModBlocks.ENDER_LOCUS.get());
for (BlockPos pos : positions) {
TileEntityEnderLocus enderLocus = (TileEntityEnderLocus) worldIn.getTileEntity(pos.x, pos.y, pos.z);
enderLocus.removeCrystal();
}
}

super.onBlockPreDestroy(worldIn, x, y, z, meta);
}
Comment thread
FourIsTheNumber marked this conversation as resolved.
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
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.TileEntityEnderLocus;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class BlockEnderLocus extends BlockContainer {

public BlockEnderLocus() {
super(Material.iron);
setBlockName("ender_locus");
setBlockTextureName("utilitiesinexcess:ender_locus");
setHardness(5.0F);
}

@Override
public TileEntity createNewTileEntity(World worldIn, int meta) {
return new TileEntityEnderLocus();
}

@Override
public void onBlockAdded(World worldIn, int x, int y, int z) {
if (!worldIn.isRemote) {
TileEntityEnderLocus locus = (TileEntityEnderLocus) worldIn.getTileEntity(x, y, z);
locus.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) {
if (!worldIn.isRemote) {
GuiFactories.tileEntity()
.open(player, x, y, z);
}
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);
}

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