aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorJakub <53441451+kuba6000@users.noreply.github.com>2022-12-15 16:53:12 +0100
committerGitHub <noreply@github.com>2022-12-15 16:53:12 +0100
commit8a581938862a4d612f510a8afed88727a34c3916 (patch)
tree0307ca87f3c06bbeda6d699aabbc2247b6f38efb /src/main/java
parent24a9953b153529191c855af0ae2d10f35844095f (diff)
downloadGT5-Unofficial-8a581938862a4d612f510a8afed88727a34c3916.tar.gz
GT5-Unofficial-8a581938862a4d612f510a8afed88727a34c3916.tar.bz2
GT5-Unofficial-8a581938862a4d612f510a8afed88727a34c3916.zip
MODULAR UI (#34)
* MODULAR UUUUUUUUIIIIIIIIIII * Tea * Add recipe to ULTIMATE TEA * Stupid MT Scripts. I hate it * Yeet * More TEA * Add blocks * More Modular UIs * Textures * Fix custom UI containers * Texture, tooltip * UI with tabs * ButtonWidget * fix * Fix * Texture * Color is fixed * More UI work * Modular UI is hard dependency now * Spotless * Simplify * Format numbers * A * Update TeaAcceptorTile.java * Shadow is fixed, lets gooooo * hardness * Mixins mixins mixins * Tab icons * Fix crash * Shop concept * Bump ModularUI * Bump Modular UI * Nooooooooooo * GREY -> GRAY * Bump ModularUI * Bump GT5 * EEC with MUI test * Include incomplete structure * REFLECTIONS !! * Just use slot filter * Update pos when needed * Update GT_MetaTileEntity_ExtremeExterminationChamber.java * Spawner status * Nice toggle button * Send messages * Next toggle button * Start work on IAADDS * Scrollable inventory test * Draw queen slots * Fix * Update dependencies.gradle * Use sync widget * Add button to enable/disable working * Configuration in Mega Apiary * Refactor a bit * Update ModularUI * Bump ModularUI * Bump GT5 * Fix build * Update dependencies.gradle * Update build.gradle * Update dependencies.gradle * spotless * Begin working on configuration window * Update dependencies.gradle * Deprecated * Update dependencies.gradle * Optimize bee storage rendering (2 fps -> 100 fps) * Make Mega Apiary storage GUI usable * Configuration window looks ok * Color is fixed * TC research * Disable for now * Finish tea command * ok * Fix * Update en_US.lang * ZzZ * Stuff changed
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/kubatech/CommonProxy.java20
-rw-r--r--src/main/java/kubatech/api/LoaderReference.java2
-rw-r--r--src/main/java/kubatech/api/enums/ItemList.java3
-rw-r--r--src/main/java/kubatech/api/helpers/ReflectionHelper.java34
-rw-r--r--src/main/java/kubatech/api/network/CustomTileEntityPacket.java6
-rw-r--r--src/main/java/kubatech/api/network/LoadConfigPacket.java3
-rw-r--r--src/main/java/kubatech/commands/CommandHandler.java2
-rw-r--r--src/main/java/kubatech/commands/CommandTea.java109
-rw-r--r--src/main/java/kubatech/kubatech.java8
-rw-r--r--src/main/java/kubatech/loaders/BlockLoader.java24
-rw-r--r--src/main/java/kubatech/loaders/ItemLoader.java6
-rw-r--r--src/main/java/kubatech/loaders/RecipeLoader.java20
-rw-r--r--src/main/java/kubatech/loaders/TCLoader.java125
-rw-r--r--src/main/java/kubatech/loaders/block/BlockProxy.java76
-rw-r--r--src/main/java/kubatech/loaders/block/IProxyTileEntityProvider.java8
-rw-r--r--src/main/java/kubatech/loaders/block/KubaBlock.java187
-rw-r--r--src/main/java/kubatech/loaders/block/KubaItemBlock.java37
-rw-r--r--src/main/java/kubatech/loaders/block/blocks/TeaAcceptor.java42
-rw-r--r--src/main/java/kubatech/loaders/item/IItemProxyGUI.java9
-rw-r--r--src/main/java/kubatech/loaders/item/ItemProxy.java31
-rw-r--r--src/main/java/kubatech/loaders/item/KubaItems.java6
-rw-r--r--src/main/java/kubatech/loaders/item/items/TeaCollection.java42
-rw-r--r--src/main/java/kubatech/loaders/item/items/TeaUltimate.java160
-rw-r--r--src/main/java/kubatech/mixin/Mixin.java3
-rw-r--r--src/main/java/kubatech/mixin/mixins/minecraft/WorldMixin.java21
-rw-r--r--src/main/java/kubatech/savedata/PlayerData.java26
-rw-r--r--src/main/java/kubatech/savedata/PlayerDataManager.java71
-rw-r--r--src/main/java/kubatech/tileentity/TeaAcceptorTile.java183
-rw-r--r--src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java199
-rw-r--r--src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java331
30 files changed, 1744 insertions, 50 deletions
diff --git a/src/main/java/kubatech/CommonProxy.java b/src/main/java/kubatech/CommonProxy.java
index ccd4949137..f34ce3216a 100644
--- a/src/main/java/kubatech/CommonProxy.java
+++ b/src/main/java/kubatech/CommonProxy.java
@@ -19,15 +19,21 @@
package kubatech;
-import static kubatech.loaders.ItemLoader.RegisterItems;
+import static kubatech.loaders.BlockLoader.registerBlocks;
+import static kubatech.loaders.ItemLoader.registerItems;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.event.*;
+import kubatech.api.LoaderReference;
import kubatech.commands.CommandConfig;
import kubatech.commands.CommandHandler;
import kubatech.commands.CommandHelp;
+import kubatech.commands.CommandTea;
import kubatech.config.Config;
import kubatech.loaders.RecipeLoader;
+import kubatech.loaders.TCLoader;
+import kubatech.savedata.PlayerDataManager;
+import net.minecraftforge.common.MinecraftForge;
public class CommonProxy {
@@ -37,22 +43,28 @@ public class CommonProxy {
Config.init(event.getModConfigurationDirectory());
Config.synchronizeConfiguration();
FMLCommonHandler.instance().bus().register(new FMLEventHandler());
- RegisterItems();
- RecipeLoader.addRecipes();
+ MinecraftForge.EVENT_BUS.register(new PlayerDataManager());
+ registerItems();
+ registerBlocks();
+ if (LoaderReference.Thaumcraft) TCLoader.load();
}
public void init(FMLInitializationEvent event) {}
- public void postInit(FMLPostInitializationEvent event) {}
+ public void postInit(FMLPostInitializationEvent event) {
+ RecipeLoader.addRecipes();
+ }
public void serverAboutToStart(FMLServerAboutToStartEvent event) {}
public void serverStarting(FMLServerStartingEvent event) {
RecipeLoader.addRecipesLate();
+ if (LoaderReference.Thaumcraft) TCLoader.lateLoad();
CommandHandler cmd = new CommandHandler();
cmd.addCommand(new CommandHelp());
cmd.addCommand(new CommandConfig());
// cmd.addCommand(new CommandBees());
+ cmd.addCommand(new CommandTea());
event.registerServerCommand(cmd);
}
diff --git a/src/main/java/kubatech/api/LoaderReference.java b/src/main/java/kubatech/api/LoaderReference.java
index b9e76a9a30..3215fa1b21 100644
--- a/src/main/java/kubatech/api/LoaderReference.java
+++ b/src/main/java/kubatech/api/LoaderReference.java
@@ -15,4 +15,6 @@ public class LoaderReference {
public static final boolean HarvestCraft = Loader.isModLoaded("harvestcraft");
public static final boolean TwilightForest = Loader.isModLoaded("TwilightForest");
public static final boolean Forestry = Loader.isModLoaded("Forestry");
+ public static final boolean DraconicEvolution = Loader.isModLoaded("DraconicEvolution");
+ public static final boolean Avaritia = Loader.isModLoaded("Avaritia");
}
diff --git a/src/main/java/kubatech/api/enums/ItemList.java b/src/main/java/kubatech/api/enums/ItemList.java
index b37bd86c1c..00334d848e 100644
--- a/src/main/java/kubatech/api/enums/ItemList.java
+++ b/src/main/java/kubatech/api/enums/ItemList.java
@@ -52,7 +52,8 @@ public enum ItemList implements IItemContainer {
FermentedTeaLeaf,
BruisedTeaLeaf,
PartiallyOxidizedTeaLeaf,
- ;
+ TeaAcceptorResearchNote,
+ TeaAcceptor;
private ItemStack mStack;
private boolean mHasNotBeenSet = true;
diff --git a/src/main/java/kubatech/api/helpers/ReflectionHelper.java b/src/main/java/kubatech/api/helpers/ReflectionHelper.java
index 1d7449afc4..7b02fe6c82 100644
--- a/src/main/java/kubatech/api/helpers/ReflectionHelper.java
+++ b/src/main/java/kubatech/api/helpers/ReflectionHelper.java
@@ -45,6 +45,7 @@ public class ReflectionHelper {
boolean exceptionDetected = false;
Field f = null;
do {
+ exceptionDetected = false;
try {
f = cl.getDeclaredField(fieldName);
f.setAccessible(true);
@@ -61,6 +62,38 @@ public class ReflectionHelper {
}
}
+ public static <T> boolean setField(Object obj, String fieldName, T value) {
+ Class<?> cl = obj.getClass();
+ String clName = cl.getName();
+ HashMap<String, Field> classmap = classes.computeIfAbsent(clName, s -> new _FieldsMethods()).fields;
+ try {
+ if (classmap.containsKey(fieldName)) {
+ Field f = classmap.get(fieldName);
+ if (f == null) return false;
+ f.set(obj, value);
+ return true;
+ }
+ boolean exceptionDetected = false;
+ Field f = null;
+ do {
+ exceptionDetected = false;
+ try {
+ f = cl.getDeclaredField(fieldName);
+ f.setAccessible(true);
+ } catch (Exception ex) {
+ exceptionDetected = true;
+ cl = cl.getSuperclass();
+ }
+ } while (exceptionDetected && !cl.equals(Object.class));
+ classmap.put(fieldName, f);
+ if (f == null) return false;
+ f.set(obj, value);
+ return true;
+ } catch (Exception ex) {
+ return false;
+ }
+ }
+
public static <T> T getField(Object obj, String fieldName) {
return getField(obj, fieldName, null);
}
@@ -87,6 +120,7 @@ public class ReflectionHelper {
boolean exceptionDetected = false;
Method m = null;
do {
+ exceptionDetected = false;
try {
m = cl.getDeclaredMethod(methodName, argsTypes);
m.setAccessible(true);
diff --git a/src/main/java/kubatech/api/network/CustomTileEntityPacket.java b/src/main/java/kubatech/api/network/CustomTileEntityPacket.java
index b81bbb0337..11fb4f848f 100644
--- a/src/main/java/kubatech/api/network/CustomTileEntityPacket.java
+++ b/src/main/java/kubatech/api/network/CustomTileEntityPacket.java
@@ -128,7 +128,11 @@ public class CustomTileEntityPacket implements IMessage {
@Override
public IMessage onMessage(CustomTileEntityPacket message, MessageContext ctx) {
if (!ModUtils.isClientSided) return null;
- World w = Minecraft.getMinecraft().thePlayer.getEntityWorld();
+ Minecraft mc = Minecraft.getMinecraft();
+ if (mc == null) return null;
+ if (mc.thePlayer == null) return null;
+ World w = mc.thePlayer.getEntityWorld();
+ if (w == null) return null;
if (message.w != w.provider.dimensionId) return null;
TileEntity e = w.getTileEntity(message.x, message.y, message.z);
if (e == null || e.isInvalid()) return null;
diff --git a/src/main/java/kubatech/api/network/LoadConfigPacket.java b/src/main/java/kubatech/api/network/LoadConfigPacket.java
index defb139151..03602e89f1 100644
--- a/src/main/java/kubatech/api/network/LoadConfigPacket.java
+++ b/src/main/java/kubatech/api/network/LoadConfigPacket.java
@@ -26,10 +26,12 @@ import io.netty.buffer.ByteBuf;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.HashSet;
+import kubatech.api.LoaderReference;
import kubatech.config.Config;
import kubatech.config.OverridesConfig;
import kubatech.kubatech;
import kubatech.loaders.MobRecipeLoader;
+import kubatech.loaders.TCLoader;
public class LoadConfigPacket implements IMessage {
@@ -85,6 +87,7 @@ public class LoadConfigPacket implements IMessage {
public IMessage onMessage(LoadConfigPacket message, MessageContext ctx) {
kubatech.info("Received Mob Handler config, parsing");
MobRecipeLoader.processMobRecipeMap(message.mobsToLoad, message.mobsOverrides);
+ if (LoaderReference.Thaumcraft) TCLoader.lateLoad();
return null;
}
}
diff --git a/src/main/java/kubatech/commands/CommandHandler.java b/src/main/java/kubatech/commands/CommandHandler.java
index d1822a1ff8..dfa612fcce 100644
--- a/src/main/java/kubatech/commands/CommandHandler.java
+++ b/src/main/java/kubatech/commands/CommandHandler.java
@@ -61,7 +61,7 @@ public class CommandHandler extends CommandBase {
}
}
- private static final ArrayList<String> aliases = new ArrayList<>(Collections.singleton("kt"));
+ private static final List<String> aliases = Collections.singletonList("kt");
public static final HashMap<String, ICommand> commands = new HashMap<>();
@Override
diff --git a/src/main/java/kubatech/commands/CommandTea.java b/src/main/java/kubatech/commands/CommandTea.java
new file mode 100644
index 0000000000..187b21c789
--- /dev/null
+++ b/src/main/java/kubatech/commands/CommandTea.java
@@ -0,0 +1,109 @@
+package kubatech.commands;
+
+import static kubatech.commands.CommandTea.Translations.*;
+
+import kubatech.savedata.PlayerData;
+import kubatech.savedata.PlayerDataManager;
+import net.minecraft.command.CommandBase;
+import net.minecraft.command.ICommandSender;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.StatCollector;
+
+public class CommandTea extends CommandBase {
+ enum Translations {
+ INVALID_OPTION,
+ PLAYER_NOT_FOUND,
+ SUCCESS_GET,
+ SUCCESS_SET,
+ SUCCESS_ADD,
+ USAGE,
+ ;
+ final String key;
+
+ Translations() {
+ key = "command.tea." + this.name().toLowerCase();
+ }
+
+ public String get() {
+ return StatCollector.translateToLocal(key);
+ }
+
+ public String get(Object... args) {
+ return StatCollector.translateToLocalFormatted(key, args);
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ @Override
+ public String toString() {
+ return get();
+ }
+ }
+
+ @Override
+ public String getCommandName() {
+ return "tea";
+ }
+
+ @Override
+ public String getCommandUsage(ICommandSender p_71518_1_) {
+ return "tea " + USAGE.get();
+ }
+
+ @Override
+ public int getRequiredPermissionLevel() {
+ return 4;
+ }
+
+ @Override
+ public void processCommand(ICommandSender p_71515_1_, String[] p_71515_2_) {
+ if (p_71515_2_.length < 2) {
+ p_71515_1_.addChatMessage(new ChatComponentText(INVALID_OPTION.get()));
+ return;
+ }
+ PlayerData playerData = PlayerDataManager.getPlayer(p_71515_2_[0]);
+ if (playerData == null) {
+ p_71515_1_.addChatMessage(new ChatComponentText(PLAYER_NOT_FOUND.get()));
+ return;
+ }
+ if (!p_71515_2_[1].equalsIgnoreCase("get") && p_71515_2_.length < 3) {
+ p_71515_1_.addChatMessage(new ChatComponentText(INVALID_OPTION.get()));
+ return;
+ }
+ switch (p_71515_2_[1].toLowerCase()) {
+ case "get":
+ p_71515_1_.addChatMessage(new ChatComponentText(SUCCESS_GET.get(p_71515_2_[0], playerData.teaAmount)));
+ break;
+ case "set": {
+ long tea;
+ try {
+ tea = Long.parseLong(p_71515_2_[2]);
+ } catch (NumberFormatException ex) {
+ p_71515_1_.addChatMessage(new ChatComponentText(INVALID_OPTION.get()));
+ return;
+ }
+ playerData.teaAmount = tea;
+ playerData.markDirty();
+ p_71515_1_.addChatMessage(new ChatComponentText(SUCCESS_SET.get(p_71515_2_[0], playerData.teaAmount)));
+ break;
+ }
+ case "add": {
+ long tea;
+ try {
+ tea = Long.parseLong(p_71515_2_[2]);
+ } catch (NumberFormatException ex) {
+ p_71515_1_.addChatMessage(new ChatComponentText(INVALID_OPTION.get()));
+ return;
+ }
+ playerData.teaAmount += tea;
+ playerData.markDirty();
+ p_71515_1_.addChatMessage(new ChatComponentText(SUCCESS_ADD.get(p_71515_2_[0], playerData.teaAmount)));
+ break;
+ }
+ default:
+ break;
+ }
+ }
+}
diff --git a/src/main/java/kubatech/kubatech.java b/src/main/java/kubatech/kubatech.java
index ca4d06320f..740699aa34 100644
--- a/src/main/java/kubatech/kubatech.java
+++ b/src/main/java/kubatech/kubatech.java
@@ -42,9 +42,11 @@ import org.apache.logging.log4j.Logger;
version = Tags.VERSION,
name = Tags.MODNAME,
acceptedMinecraftVersions = "[1.7.10]",
- dependencies = "required-after:gregtech; " + "required-after:gtnhmixins@[2.0.1,); " + "after:EnderIO; "
- + "after:AWWayofTime; " + "after:ExtraUtilities; " + "after: InfernalMobs; " + "after: Thaumcraft; "
- + "after: MineTweaker3; " + "after: miscutils; " + "after: harvestcraft; " + "after: Forestry; ")
+ dependencies = "required-after: gregtech; " + "required-after: gtnhmixins@[2.0.1,); "
+ + "required-after: modularui; " + "after: EnderIO; "
+ + "after: AWWayofTime; " + "after: ExtraUtilities; " + "after: InfernalMobs; " + "after: Thaumcraft; "
+ + "after: MineTweaker3; " + "after: miscutils; " + "after: harvestcraft; " + "after: Forestry; "
+ + "after: DraconicEvolution; " + "after: Avaritia; " + " after: dreamcraft; ")
public class kubatech {
public static kubatech instance = null;
diff --git a/src/main/java/kubatech/loaders/BlockLoader.java b/src/main/java/kubatech/loaders/BlockLoader.java
new file mode 100644
index 0000000000..55e97badc6
--- /dev/null
+++ b/src/main/java/kubatech/loaders/BlockLoader.java
@@ -0,0 +1,24 @@
+package kubatech.loaders;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import kubatech.api.enums.ItemList;
+import kubatech.loaders.block.KubaBlock;
+import kubatech.loaders.block.KubaItemBlock;
+import kubatech.loaders.block.blocks.TeaAcceptor;
+import kubatech.tileentity.TeaAcceptorTile;
+import net.minecraft.block.material.Material;
+import net.minecraft.item.ItemBlock;
+
+public class BlockLoader {
+
+ public static final KubaBlock kubaBlock = new KubaBlock(Material.anvil);
+ public static final ItemBlock kubaItemBlock = new KubaItemBlock(kubaBlock);
+
+ public static void registerBlocks() {
+ GameRegistry.registerTileEntity(TeaAcceptorTile.class, "KT_TeaAcceptor");
+ GameRegistry.registerBlock(kubaBlock, null, "kubablocks");
+ GameRegistry.registerItem(kubaItemBlock, "kubablocks");
+
+ ItemList.TeaAcceptor.set(kubaBlock.registerProxyBlock(new TeaAcceptor()));
+ }
+}
diff --git a/src/main/java/kubatech/loaders/ItemLoader.java b/src/main/java/kubatech/loaders/ItemLoader.java
index 7df248da60..8db9c9f15f 100644
--- a/src/main/java/kubatech/loaders/ItemLoader.java
+++ b/src/main/java/kubatech/loaders/ItemLoader.java
@@ -22,6 +22,7 @@ package kubatech.loaders;
import static kubatech.api.enums.ItemList.*;
import cpw.mods.fml.common.registry.GameRegistry;
+import kubatech.loaders.item.ItemProxy;
import kubatech.loaders.item.KubaItems;
import kubatech.loaders.item.items.Tea;
import kubatech.loaders.item.items.TeaCollection;
@@ -31,7 +32,7 @@ import kubatech.loaders.item.items.TeaUltimate;
public class ItemLoader {
public static final KubaItems kubaitems = new KubaItems();
- public static void RegisterItems() {
+ public static void registerItems() {
GameRegistry.registerItem(kubaitems, "kubaitems");
// DON'T EVER CHANGE ORDER IN HERE, ADD NEW ITEMS ON BOTTOM
@@ -75,5 +76,8 @@ public class ItemLoader {
FermentedTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("fermented_tea_leaf")));
BruisedTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("bruised_tea_leaf")));
PartiallyOxidizedTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("partially_oxidized_tea_leaf")));
+
+ TeaAcceptorResearchNote.set(
+ kubaitems.registerProxyItem(new ItemProxy("tea_acceptor_research_note", "research_note")));
}
}
diff --git a/src/main/java/kubatech/loaders/RecipeLoader.java b/src/main/java/kubatech/loaders/RecipeLoader.java
index 2b7fe77719..7bbaaf17e7 100644
--- a/src/main/java/kubatech/loaders/RecipeLoader.java
+++ b/src/main/java/kubatech/loaders/RecipeLoader.java
@@ -21,6 +21,7 @@ package kubatech.loaders;
import static kubatech.api.enums.ItemList.*;
+import com.dreammaster.gthandler.CustomItemList;
import cpw.mods.fml.common.registry.GameRegistry;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Materials;
@@ -270,5 +271,24 @@ public class RecipeLoader {
GameRegistry.addSmelting(WhiteTeaLeaf.get(1), WhiteTea.get(1), 10);
GameRegistry.addSmelting(YellowTeaLeaf.get(1), YellowTea.get(1), 10);
}
+ if (LoaderReference.Avaritia && LoaderReference.GTNHCoreMod) {
+ GT_Values.RA.addAssemblylineRecipe(
+ TeaAcceptorResearchNote.get(1),
+ 10000,
+ new Object[] {
+ LegendaryUltimateTea.get(0),
+ GameRegistry.findItemStack("Avaritia", "Neutronium_Compressor", 1),
+ gregtech.api.enums.ItemList.Quantum_Tank_EV.get(1),
+ CustomItemList.FluidExtractorUHV.get(10),
+ new Object[] {OrePrefixes.circuit.get(Materials.SuperconductorUHV), 4L},
+ new Object[] {OrePrefixes.circuit.get(Materials.SuperconductorUHV), 4L},
+ new Object[] {OrePrefixes.circuit.get(Materials.SuperconductorUHV), 4L},
+ new Object[] {OrePrefixes.circuit.get(Materials.SuperconductorUHV), 4L},
+ },
+ new FluidStack[] {FluidRegistry.getFluidStack("molten.indalloy140", 28800)},
+ TeaAcceptor.get(1),
+ 6000,
+ 2_048_000);
+ }
}
}
diff --git a/src/main/java/kubatech/loaders/TCLoader.java b/src/main/java/kubatech/loaders/TCLoader.java
new file mode 100644
index 0000000000..3c4980f251
--- /dev/null
+++ b/src/main/java/kubatech/loaders/TCLoader.java
@@ -0,0 +1,125 @@
+package kubatech.loaders;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.stream.Collectors;
+import kubatech.api.LoaderReference;
+import kubatech.api.enums.ItemList;
+import kubatech.api.utils.ItemID;
+import kubatech.loaders.item.items.TeaUltimate;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+import thaumcraft.api.ThaumcraftApi;
+import thaumcraft.api.ThaumcraftApiHelper;
+import thaumcraft.api.aspects.Aspect;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.api.crafting.InfusionRecipe;
+import thaumcraft.api.research.ResearchCategories;
+import thaumcraft.api.research.ResearchItem;
+import thaumcraft.api.research.ResearchPage;
+
+public class TCLoader {
+ private static boolean lateLoaded = false;
+
+ public static void load() {}
+
+ public static void lateLoad() {
+ if (lateLoaded) return;
+ lateLoaded = true;
+ if (!LoaderReference.GTNHCoreMod || !LoaderReference.DraconicEvolution) return;
+
+ final ItemStack[] components = new ItemStack[] {
+ // ItemList.LegendaryBlackTea.get(1),
+ // ItemList.LegendaryButterflyTea.get(1),
+ // ItemList.LegendaryEarlGrayTea.get(1),
+ ItemList.LegendaryGreenTea.get(1), // EIG
+ // ItemList.LegendaryLemonTea.get(1),
+ // ItemList.LegendaryMilkTea.get(1),
+ // ItemList.LegendaryOolongTea.get(1),
+ ItemList.LegendaryPeppermintTea.get(1), // HTGR
+ ItemList.LegendaryPuerhTea.get(1), // EEC
+ // ItemList.LegendaryRedTea.get(1),
+ // ItemList.LegendaryWhiteTea.get(1),
+ ItemList.LegendaryYellowTea.get(1), // IApiary
+ ItemList.BlackTea.get(1),
+ ItemList.EarlGrayTea.get(1),
+ ItemList.GreenTea.get(1),
+ ItemList.LemonTea.get(1),
+ ItemList.MilkTea.get(1),
+ ItemList.OolongTea.get(1),
+ ItemList.PeppermintTea.get(1),
+ ItemList.PuerhTea.get(1),
+ ItemList.WhiteTea.get(1),
+ ItemList.YellowTea.get(1)
+ };
+
+ final HashSet<ItemID> componentsHashed = Arrays.stream(components)
+ .map(stack -> ItemID.create_NoCopy(stack, true, false, true))
+ .collect(Collectors.toCollection(HashSet::new));
+
+ InfusionRecipe ultimateTeaRecipe;
+ //noinspection unchecked
+ ThaumcraftApi.getCraftingRecipes()
+ .add(
+ ultimateTeaRecipe =
+ new InfusionRecipe(
+ "KT_UltimateTea",
+ ItemList.LegendaryUltimateTea.get(1),
+ 10,
+ new AspectList()
+ .add(Aspect.MAGIC, 100)
+ .add(Aspect.HEAL, 100)
+ .add(Aspect.PLANT, 100)
+ .add(Aspect.EXCHANGE, 100),
+ GameRegistry.findItemStack("DraconicEvolution", "dezilsMarshmallow", 1),
+ components) {
+ @Override
+ public boolean matches(
+ ArrayList<ItemStack> input,
+ ItemStack central,
+ World world,
+ EntityPlayer player) {
+ if (!central.isItemEqual(getRecipeInput())) return false;
+ if (!ThaumcraftApiHelper.isResearchComplete(
+ player.getCommandSenderName(), this.research)) return false;
+ if (componentsHashed.size() > input.size()) return false;
+ HashSet<ItemID> hashedInputs = input.stream()
+ .map(stack -> ItemID.create_NoCopy(stack, true, false, true))
+ .collect(Collectors.toCollection(HashSet::new));
+ return hashedInputs.containsAll(componentsHashed);
+ }
+ });
+ ResearchItem research =
+ new ResearchItem(
+ "KT_UltimateTea",
+ "NEWHORIZONS",
+ new AspectList()
+ .add(Aspect.MAGIC, 1)
+ .add(Aspect.HEAL, 1)
+ .add(Aspect.PLANT, 1)
+ .add(Aspect.EXCHANGE, 1),
+ -2,
+ 4,
+ 2,
+ ItemList.LegendaryUltimateTea.get(1)) {
+ @Override
+ public String getName() {
+ return TeaUltimate.getUltimateTeaDisplayName(super.getName());
+ }
+ };
+ research.setPages(
+ new ResearchPage("KT.research.ultimatetea") {
+ @Override
+ public String getTranslatedText() {
+ return TeaUltimate.getUltimateTeaDisplayName(super.getTranslatedText());
+ }
+ },
+ new ResearchPage(ultimateTeaRecipe));
+ research.setParents("INFUSION", "DEZILSMARSHMALLOW");
+ ThaumcraftApi.addWarpToResearch("KT_UltimateTea", 20);
+ ResearchCategories.addResearch(research);
+ }
+}
diff --git a/src/main/java/kubatech/loaders/block/BlockProxy.java b/src/main/java/kubatech/loaders/block/BlockProxy.java
new file mode 100644
index 0000000000..1c06fd50d9
--- /dev/null
+++ b/src/main/java/kubatech/loaders/block/BlockProxy.java
@@ -0,0 +1,76 @@
+package kubatech.loaders.block;
+
+import static kubatech.loaders.block.KubaBlock.defaultTileEntityUI;
+
+import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI;
+import java.util.List;
+import kubatech.Tags;
+import net.minecraft.block.material.Material;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.World;
+
+public class BlockProxy {
+
+ private final String unlocalizedName;
+ private final String texturepath;
+ private IIcon icon;
+
+ public BlockProxy(String unlocalizedName, String texture) {
+ this.unlocalizedName = "kubablock." + unlocalizedName;
+ texturepath = Tags.MODID + ":" + texture;
+ }
+
+ public void itemInit(int ID) {}
+
+ public boolean onActivated(World world, int x, int y, int z, EntityPlayer player) {
+ if (this instanceof IProxyTileEntityProvider) {
+ TileEntity te = world.getTileEntity(x, y, z);
+ if (te instanceof ITileWithModularUI) {
+ if (world.isRemote) return true;
+ if (te instanceof KubaBlock.IModularUIProvider)
+ ((KubaBlock.IModularUIProvider) te).getUI().open(player, world, x, y, z);
+ else defaultTileEntityUI.open(player, world, x, y, z);
+ return true;
+ }
+ }<