Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
e74b4be
Add Ex Nihilo integration
Irgendwer01 Jun 1, 2023
d6d9937
E
Irgendwer01 Jun 1, 2023
652aa9a
Move GT Pebbles outside of the if-statement
Irgendwer01 Jun 1, 2023
fac23ff
Add Langs + Textures and add Rubber Sapling as drop from dirt
Irgendwer01 Jun 2, 2023
9ec17eb
Fix lots of stuff
Irgendwer01 Jun 2, 2023
b878bbf
Implement review suggestions
Irgendwer01 Jun 5, 2023
2ed1be6
Change Gregification -> GTCEu
Jun 18, 2023
fd4edf7
p u s h
Irgendwer01 Jul 23, 2023
c7637d3
Yeet sand drops
Irgendwer01 Jul 23, 2023
b862cb7
Upload
Irgendwer01 Jul 25, 2023
dc40f12
fixes
serenibyss Nov 25, 2023
5dc1af1
Merge branch 'master' into exnihilo
Irgendwer01 Dec 11, 2023
ec3c4ab
Merge branch 'master' into exnihilo
Irgendwer01 Dec 17, 2023
5cbe01c
Don't use deprecated stuff
Irgendwer01 Dec 17, 2023
5f51fd7
Fix added drops being cleared and continue at wrong material
Irgendwer01 Dec 17, 2023
7469e97
Port drop table from Gregification
Irgendwer01 Dec 18, 2023
6bbfaa3
Merge branch 'master' into exnihilo
Irgendwer01 Dec 18, 2023
27ec967
Squashed commit of the following:
Irgendwer01 Dec 4, 2024
eeac774
Merge branch 'master' into exnihilo
Irgendwer01 Dec 4, 2024
02d9916
Implement changes from GSECore
Irgendwer01 Dec 4, 2024
984dbb2
Remove Glowstone from sifting table
Irgendwer01 Dec 4, 2024
e5d2b27
2 -> 5% extra chance
Irgendwer01 Dec 4, 2024
8ed9e35
Remove hardcoded Forge Hammer and Extractor recipes
Irgendwer01 Dec 4, 2024
996457f
Move MeshRecipes content over to ExNihiloRecipes
Irgendwer01 Dec 4, 2024
66273cc
Oops
Irgendwer01 Dec 4, 2024
acaa2b1
Mirror Crucible Recipes to Extractor if enabled in config
Irgendwer01 Dec 4, 2024
c6c2b02
Mirror dirt sift table if all sieve drops are getting cleared
Irgendwer01 Dec 4, 2024
a732a89
Spotless
Irgendwer01 Dec 4, 2024
0434998
Merge branch 'master' into exnihilo
Irgendwer01 Mar 10, 2025
efdfb9f
Merge branch 'master' into exnihilo
Irgendwer01 Apr 27, 2025
f138cf7
Review
Irgendwer01 Apr 27, 2025
cf27de3
Merge remote-tracking branch 'origin/exnihilo' into exnihilo
Irgendwer01 Apr 27, 2025
f4bd8f3
Add compressor recipes for pebbles
Irgendwer01 Apr 27, 2025
669bb8a
Oops
Irgendwer01 Apr 27, 2025
0d30f6b
Add crushed stones recipes
Irgendwer01 Apr 27, 2025
56b52a0
Remove smelting handler + Implement suggestion
Irgendwer01 Apr 28, 2025
3015afd
Remove sieve_drops.json
Irgendwer01 Apr 28, 2025
e22326a
Double EUt per mesh tier
Irgendwer01 Apr 28, 2025
ed8ba6d
Why was this file not deleted?
Irgendwer01 Apr 28, 2025
00339a4
Merge branch 'master' into exnihilo
Irgendwer01 Apr 28, 2025
8245dc4
Merge branch 'master' into exnihilo
Irgendwer01 May 3, 2025
f6c5d72
Fix duplicate recipes not being handled properly
Irgendwer01 May 3, 2025
55a9b15
Merge branch 'master' into exnihilo
Irgendwer01 May 12, 2025
ff87277
Fix cobble oredict + add OrePrefix for these
Irgendwer01 May 12, 2025
c785487
Review + Spotless
Irgendwer01 May 12, 2025
f98b958
Remove duplicate
Irgendwer01 May 13, 2025
31ee164
Merge branch 'GregTechCEu:master' into exnihilo
Irgendwer01 Oct 4, 2025
d276d15
Review
Irgendwer01 Oct 5, 2025
5ad06be
Merge remote-tracking branch 'origin/exnihilo' into exnihilo
Irgendwer01 Oct 5, 2025
eaf0daa
No more underclocking button
Irgendwer01 Oct 5, 2025
15ec8a3
implementation -> compileOnly + re-arrange IDs and leave a comment fo…
Irgendwer01 Oct 5, 2025
4f3deb7
Merge branch 'GregTechCEu:master' into exnihilo
Irgendwer01 Nov 11, 2025
f4b0738
Fix JEI pages, compare Stacks properly & Spotless
Irgendwer01 Nov 12, 2025
4e84eaa
Fix Steam Sieve UI not opening
Irgendwer01 Nov 16, 2025
899b788
Actually only remove the output and not the whole Map Entry
Irgendwer01 Nov 24, 2025
81e506f
Merge branch 'GregTechCEu:master' into exnihilo
Irgendwer01 Nov 26, 2025
6694209
Merge branch 'GregTechCEu:master' into exnihilo
Irgendwer01 Dec 6, 2025
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
2 changes: 2 additions & 0 deletions dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ dependencies {
compileOnly rfg.deobf("curse.maven:chisel-235279:2915375") // Chisel 1.0.2.45
compileOnly rfg.deobf("curse.maven:littletiles-257818:4750222") // LittleTiles 1.5.82-1.12.2
compileOnly rfg.deobf("curse.maven:creativecore-257814:4722163") // Creative Core 1.10.71
compileOnly rfg.deobf("curse.maven:exnihilo-274456:2817545") // Ex Nihilo Creatio 0.4.7.2
compileOnly rfg.deobf("curse.maven:forgelin-248453:2785465") // Forgelin 1.8.4

// Mods with Soft compat but which have no need to be in code, such as isModLoaded() checks and getModItem() recipes.
// Uncomment any of these to test them in-game.
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/gregtech/GregTechMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
"after:appliedenergistics2;" +
"after:forestry;" + "after:extrabees;" + "after:extratrees;" + "after:genetics;" + "after:magicbees;" +
"after:jei@[4.15.0,);" + "after:crafttweaker@[4.1.20,);" + "after:groovyscript@[1.2.0,);" +
"after:theoneprobe;" + "after:hwyla;")
"after:theoneprobe;" + "after:hwyla;" + "after:exnihilocreatio;")
public class GregTechMod {

// Hold this so that we can reference non-interface methods without
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/gregtech/api/gui/GuiTextures.java
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,8 @@ public class GuiTextures {
.fullImage("textures/gui/progress_bar/progress_bar_replicator.png");
public static final TextureArea PROGRESS_BAR_SIFT = TextureArea
.fullImage("textures/gui/progress_bar/progress_bar_sift.png");
public static final SteamTexture PROGRESS_BAR_SIFT_STEAM = SteamTexture
.fullImage("textures/gui/progress_bar/progress_bar_sift_%s.png");
public static final TextureArea PROGRESS_BAR_SLICE = TextureArea
.fullImage("textures/gui/progress_bar/progress_bar_slice.png");
public static final SteamTexture PROGRESS_BAR_SOLAR_STEAM = SteamTexture
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/gregtech/api/unification/ore/OrePrefix.java
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,8 @@ public class OrePrefix {
// Prefix to determine which kind of Rock this is.
public static final OrePrefix stone = new OrePrefix("stone", -1, Materials.Stone, null, SELF_REFERENCING, null);

public static final OrePrefix cobble = new OrePrefix("cobble", -1, null, null, 0, null);

public static final OrePrefix frameGt = new OrePrefix("frameGt", M * 2, null, null, ENABLE_UNIFICATION,
material -> material.hasFlag(GENERATE_FRAME));

Expand Down
2 changes: 2 additions & 0 deletions src/main/java/gregtech/api/util/Mods.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ public enum Mods {
CraftTweaker(Names.CRAFT_TWEAKER),
EnderCore(Names.ENDER_CORE),
EnderIO(Names.ENDER_IO),
ExNihiloCreatio(Names.EX_NIHILO_CREATIO),
ExtraBees(Names.EXTRA_BEES),
ExtraTrees(Names.EXTRA_TREES),
ExtraUtilities2(Names.EXTRA_UTILITIES2),
Expand Down Expand Up @@ -156,6 +157,7 @@ public static class Names {
public static final String XAEROS_MINIMAP = "xaerominimap";
public static final String VINTAGIUM = "vintagium";
public static final String ALFHEIM = "alfheim";
public static final String EX_NIHILO_CREATIO = "exnihilocreatio";
}

private final String ID;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,8 @@ static void register() {

// Multiblock parts: 11000-12999
multiblockParts();

// Ex Nihilo integration: 13000-13014
}

/**
Expand Down
35 changes: 35 additions & 0 deletions src/main/java/gregtech/integration/exnihilo/ExNihiloConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package gregtech.integration.exnihilo;

import gregtech.api.GTValues;

import net.minecraftforge.common.config.Config;

import static net.minecraftforge.common.config.Config.Comment;
import static net.minecraftforge.common.config.Config.LangKey;
import static net.minecraftforge.common.config.Config.RequiresMcRestart;

@LangKey("gregtech.config.ex_nihilo")
@Config(modid = GTValues.MODID, name = GTValues.MODID + "/ex_nihilo", category = "Ex Nihilo")
public class ExNihiloConfig {

@Config.Comment({
"Override all Sifting Tables to drop excess outputs once GT drops have been added.",
"Default: true"
})
@RequiresMcRestart
public static boolean overrideAllSiftDrops = true;

@Comment({
"Replace Ex Nihilo Mesh recipes with GT-style recipes",
"Default: true"
})
@RequiresMcRestart
public static boolean harderMeshes = true;

@Comment({
"Mirror all Ex Nihilo Crucible recipes to the Fluid Extractor.",
"Default: true"
})
@RequiresMcRestart
public static boolean crucibleExtractorRecipes = true;
}
115 changes: 115 additions & 0 deletions src/main/java/gregtech/integration/exnihilo/ExNihiloModule.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package gregtech.integration.exnihilo;

import gregtech.api.GTValues;
import gregtech.api.modules.GregTechModule;
import gregtech.api.recipes.RecipeMap;
import gregtech.api.recipes.RecipeMapBuilder;
import gregtech.api.recipes.builders.SimpleRecipeBuilder;
import gregtech.api.unification.material.event.MaterialEvent;
import gregtech.api.unification.material.info.MaterialIconType;
import gregtech.api.unification.ore.OrePrefix;
import gregtech.api.util.Mods;
import gregtech.common.items.MetaItems;
import gregtech.integration.IntegrationModule;
import gregtech.integration.IntegrationSubmodule;
import gregtech.integration.exnihilo.items.ExNihiloPebble;
import gregtech.integration.exnihilo.metatileentities.MetaTileEntities;
import gregtech.integration.exnihilo.recipes.CraftingRecipes;
import gregtech.integration.exnihilo.recipes.MachineRecipes;
import gregtech.integration.exnihilo.recipes.SieveDrops;
import gregtech.integration.exnihilo.recipes.SieveRecipes;
import gregtech.integration.exnihilo.recipes.ui.SieveUI;
import gregtech.modules.GregTechModules;

import net.minecraft.init.SoundEvents;
import net.minecraft.item.crafting.IRecipe;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

import org.jetbrains.annotations.NotNull;

import java.util.Collections;
import java.util.List;

import static gregtech.api.unification.ore.OrePrefix.Conditions.hasOreProperty;
import static gregtech.api.unification.ore.OrePrefix.Flags.ENABLE_UNIFICATION;

@GregTechModule(
moduleID = GregTechModules.MODULE_EX_NIHILO,
containerID = GTValues.MODID,
modDependencies = Mods.Names.EX_NIHILO_CREATIO,
name = "GregTech Ex Nihilo Creatio Integration",
description = "Ex Nihilo Integration Module")
public class ExNihiloModule extends IntegrationSubmodule {

// Items
public static ExNihiloPebble pebbleItem;

// Recipe maps
public static final RecipeMap<SimpleRecipeBuilder> SIEVE_RECIPES = new RecipeMapBuilder<>("electric_sieve",
new SimpleRecipeBuilder().duration(100).EUt(4))
.itemInputs(2)
.itemOutputs(36)
.ui(SieveUI::new)
.sound(SoundEvents.BLOCK_SAND_PLACE)
.build();

// Ore prefixes
public static OrePrefix oreChunk;
public static OrePrefix oreEnderChunk;
public static OrePrefix oreNetherChunk;

// Icon Types
public static MaterialIconType oreChunkIcon;
public static MaterialIconType oreEnderChunkIcon;
public static MaterialIconType oreNetherChunkIcon;

@NotNull
@Override
public List<Class<?>> getEventBusSubscribers() {
return Collections.singletonList(ExNihiloModule.class);
}

@Override
public void preInit(@NotNull FMLPreInitializationEvent event) {
getLogger().info("Registering Ex Nihilo Compat Items, Blocks, and Machines");
pebbleItem = new ExNihiloPebble();
MetaTileEntities.registerMetaTileEntities();
}

// Has to be done in init phase because of ExNi registering outside the Registry event
@Override
public void init(@NotNull FMLInitializationEvent event) {
SieveDrops.registerSiftingRecipes();
MachineRecipes.mirrorExNihiloRecipes();
}

@SubscribeEvent()
public static void registerRecipes(RegistryEvent.Register<IRecipe> event) {
IntegrationModule.logger.info("Registering Ex Nihilo Compat Recipes");
CraftingRecipes.registerRecipes();
MachineRecipes.registerRecipes();
SieveRecipes.registerRecipes();
}

@SubscribeEvent(priority = EventPriority.LOW)
public static void registerMaterials(MaterialEvent event) {
oreChunkIcon = new MaterialIconType("oreChunk");
oreEnderChunkIcon = new MaterialIconType("oreEnderChunk");
oreNetherChunkIcon = new MaterialIconType("oreNetherChunk");

oreChunk = new OrePrefix("oreChunk", -1, null, oreChunkIcon, ENABLE_UNIFICATION, hasOreProperty);
oreEnderChunk = new OrePrefix("oreEnderChunk", -1, null, oreEnderChunkIcon, ENABLE_UNIFICATION, hasOreProperty);
oreNetherChunk = new OrePrefix("oreNetherChunk", -1, null, oreNetherChunkIcon, ENABLE_UNIFICATION,
hasOreProperty);

oreChunk.setAlternativeOreName(OrePrefix.ore.name());
oreEnderChunk.setAlternativeOreName(OrePrefix.oreEndstone.name());
oreNetherChunk.setAlternativeOreName(OrePrefix.oreNetherrack.name());

MetaItems.addOrePrefix(oreChunk, oreEnderChunk, oreNetherChunk);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
package gregtech.integration.exnihilo.items;

import gregtech.api.util.GTUtility;
import gregtech.integration.exnihilo.ExNihiloModule;

import net.minecraft.client.renderer.block.model.ModelBakery;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.*;
import net.minecraft.world.World;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

import exnihilocreatio.ExNihiloCreatio;
import exnihilocreatio.entities.ProjectileStone;
import exnihilocreatio.util.Data;
import exnihilocreatio.util.IHasModel;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class ExNihiloPebble extends Item implements IHasModel {

public ExNihiloPebble() {
setTranslationKey("gtPebble");
setRegistryName(GTUtility.gregtechId("pebble"));
setCreativeTab(ExNihiloCreatio.tabExNihilo);
setHasSubtypes(true);
Data.ITEMS.add(this);
}

@Override
@NotNull
public String getTranslationKey(@NotNull ItemStack stack) {
return String.format("%s.%s", getTranslationKey(), GTPebbles.VALUES[stack.getMetadata()].getName());
}

@Override
public void getSubItems(@Nullable CreativeTabs tab, @NotNull NonNullList<ItemStack> list) {
if (tab != null && isInCreativeTab(tab)) {
for (GTPebbles pebble : GTPebbles.VALUES) {
list.add(new ItemStack(ExNihiloModule.pebbleItem, 1, pebble.ordinal()));
}
}
}

@Override
@NotNull
public ActionResult<ItemStack> onItemRightClick(@NotNull World world, @NotNull EntityPlayer player,
@NotNull EnumHand hand) {
ItemStack stack = player.getHeldItem(hand);

if (!stack.isEmpty()) {
world.playSound(player, player.posX, player.posY, player.posZ,
SoundEvents.ENTITY_SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F,
0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));

if (!world.isRemote) {
ItemStack thrown = stack.copy();
thrown.setCount(1);

ProjectileStone projectile = new ProjectileStone(world, player);
projectile.setStack(thrown);
projectile.shoot(player, player.rotationPitch, player.rotationYaw, 0.0F, 1.5F, 0.5F);
world.spawnEntity(projectile);
}

if (!player.capabilities.isCreativeMode) {
stack.shrink(1);
}
return new ActionResult<>(EnumActionResult.SUCCESS, stack);
}
return new ActionResult<>(EnumActionResult.PASS, stack);
}

@Override
@SideOnly(Side.CLIENT)
public void initModel(ModelRegistryEvent e) {
ModelResourceLocation[] locations = new ModelResourceLocation[GTPebbles.VALUES.length];
for (GTPebbles pebble : GTPebbles.VALUES) {
locations[pebble.ordinal()] = new ModelResourceLocation(getRegistryName(),
String.format("type=%s", pebble.getName()));
}

ModelBakery.registerItemVariants(this, locations);
ModelLoader.setCustomMeshDefinition(this, stack -> locations[stack.getMetadata()]);
}

public enum GTPebbles implements IStringSerializable {

BASALT("basalt"),
BLACK_GRANITE("black_granite"),
MARBLE("marble"),
RED_GRANITE("red_granite");

private final String name;
public static final GTPebbles[] VALUES = values();

GTPebbles(String name) {
this.name = name;
}

@Override
@NotNull
public String getName() {
return this.name;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package gregtech.integration.exnihilo.metatileentities;

import gregtech.api.GTValues;

import net.minecraft.util.ResourceLocation;

import static gregtech.common.metatileentities.MetaTileEntities.getHighTier;
import static gregtech.common.metatileentities.MetaTileEntities.getMidTier;

public class MetaTileEntities {

// Machines
public static MetaTileEntitySteamSieve STEAM_SIEVE_BRONZE;
public static MetaTileEntitySteamSieve STEAM_SIEVE_STEEL;
public static MetaTileEntitySieve[] SIEVES = new MetaTileEntitySieve[GTValues.V.length - 1];

public static void registerMetaTileEntities() {
STEAM_SIEVE_BRONZE = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13000,
new MetaTileEntitySteamSieve(new ResourceLocation(GTValues.MODID, "sieve.steam"), false));
STEAM_SIEVE_STEEL = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13001,
new MetaTileEntitySteamSieve(new ResourceLocation(GTValues.MODID, "steam_sieve_steel"), true));

SIEVES[0] = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13002,
new MetaTileEntitySieve(new ResourceLocation(GTValues.MODID, "sieve.lv"), 1));
SIEVES[1] = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13003,
new MetaTileEntitySieve(new ResourceLocation(GTValues.MODID, "sieve.mv"), 2));
SIEVES[2] = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13004,
new MetaTileEntitySieve(new ResourceLocation(GTValues.MODID, "sieve.hv"), 3));
SIEVES[3] = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13005,
new MetaTileEntitySieve(new ResourceLocation(GTValues.MODID, "sieve.ev"), 4));
SIEVES[4] = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13006,
new MetaTileEntitySieve(new ResourceLocation(GTValues.MODID, "sieve.iv"), 5));
if (getMidTier("sieve")) {
SIEVES[5] = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13007,
new MetaTileEntitySieve(new ResourceLocation(GTValues.MODID, "sieve.luv"), 6));
SIEVES[6] = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13008,
new MetaTileEntitySieve(new ResourceLocation(GTValues.MODID, "sieve.zpm"), 7));
SIEVES[7] = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13009,
new MetaTileEntitySieve(new ResourceLocation(GTValues.MODID, "sieve.uv"), 8));
}
if (getHighTier("sieve")) {
SIEVES[8] = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13010,
new MetaTileEntitySieve(new ResourceLocation(GTValues.MODID, "sieve.uhv"), 9));
SIEVES[9] = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13011,
new MetaTileEntitySieve(new ResourceLocation(GTValues.MODID, "sieve.uev"), 10));
SIEVES[10] = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13012,
new MetaTileEntitySieve(new ResourceLocation(GTValues.MODID, "sieve.uiv"), 11));
SIEVES[11] = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13013,
new MetaTileEntitySieve(new ResourceLocation(GTValues.MODID, "sieve.uxv"), 12));
SIEVES[12] = gregtech.common.metatileentities.MetaTileEntities.registerMetaTileEntity(13014,
new MetaTileEntitySieve(new ResourceLocation(GTValues.MODID, "sieve.opv"), 13));
}
}
}
Loading
Loading