aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/ThreadFakeWorldGenerator.java61
-rw-r--r--src/Java/gtPlusPlus/core/fluids/FluidFactory.java3
-rw-r--r--src/Java/gtPlusPlus/core/fluids/ItemGenericFluidBucket.java3
-rw-r--r--src/Java/gtPlusPlus/core/item/circuit/ItemAdvancedChip.java109
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java5
-rw-r--r--src/Java/gtPlusPlus/plugin/agrichem/item/algae/ItemBioChip.java108
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java14
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java73
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/helpers/treefarm/TreeGenerator.java3
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_EBF.java12
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java144
11 files changed, 319 insertions, 216 deletions
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ThreadFakeWorldGenerator.java b/src/Java/gtPlusPlus/api/objects/minecraft/ThreadFakeWorldGenerator.java
deleted file mode 100644
index b7462250b1..0000000000
--- a/src/Java/gtPlusPlus/api/objects/minecraft/ThreadFakeWorldGenerator.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package gtPlusPlus.api.objects.minecraft;
-
-import gtPlusPlus.xmod.gregtech.common.helpers.treefarm.TreeGenerator;
-
-public class ThreadFakeWorldGenerator extends Thread {
-
- public boolean canRun = true;
- public boolean isRunning = false;
-
- private static final long INIT_TIME;
- private static long internalTickCounter = 0;
-
- public TreeGenerator mGenerator;
-
- private static final ThreadFakeWorldGenerator mThread;
-
- static {
- mThread = new ThreadFakeWorldGenerator();
- INIT_TIME = (System.currentTimeMillis());
- }
-
- public ThreadFakeWorldGenerator() {
- setName("gtpp.handler.fakeworldtrees");
- start();
- }
-
- public static ThreadFakeWorldGenerator getInstance() {
- return mThread;
- }
-
- public static void stopThread() {
- mThread.canRun = false;
- }
-
-
- @Override
- public void run() {
-
- if (!isRunning) {
- isRunning = true;
- }
- else {
- return;
- }
-
- if (canRun){
- if (mGenerator == null) {
- mGenerator = new TreeGenerator();
- }
- }
-
- while (mGenerator == null) {
- if (mGenerator != null) {
- break;
- }
- }
- stopThread();
- }
-
-
-}
diff --git a/src/Java/gtPlusPlus/core/fluids/FluidFactory.java b/src/Java/gtPlusPlus/core/fluids/FluidFactory.java
index dffd7f55e9..da23824c78 100644
--- a/src/Java/gtPlusPlus/core/fluids/FluidFactory.java
+++ b/src/Java/gtPlusPlus/core/fluids/FluidFactory.java
@@ -3,6 +3,7 @@ package gtPlusPlus.core.fluids;
import java.util.LinkedHashMap;
import java.util.Map;
+import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.Event.Result;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.registry.GameRegistry;
@@ -122,7 +123,7 @@ public class FluidFactory {
try {
throw new GregtechException("Cannot generate Fluid Packages outside of Pre-Init!");
} catch (GregtechException e) {
- System.exit(0);
+ FMLCommonHandler.instance().exitJava(0, true);
}
}
diff --git a/src/Java/gtPlusPlus/core/fluids/ItemGenericFluidBucket.java b/src/Java/gtPlusPlus/core/fluids/ItemGenericFluidBucket.java
index d41fccb3ed..680068402b 100644
--- a/src/Java/gtPlusPlus/core/fluids/ItemGenericFluidBucket.java
+++ b/src/Java/gtPlusPlus/core/fluids/ItemGenericFluidBucket.java
@@ -5,6 +5,7 @@ import java.util.List;
import java.util.Map;
import cpw.mods.fml.common.eventhandler.Event;
+import cpw.mods.fml.common.FMLCommonHandler;
import gtPlusPlus.api.objects.GregtechException;
import gtPlusPlus.api.objects.data.AutoMap;
import gtPlusPlus.core.lib.CORE;
@@ -44,7 +45,7 @@ public class ItemGenericFluidBucket extends ItemBucket {
try {
throw new GregtechException(""+aID+" is already registered! Unable to register fluid: "+FluidFactory.mMetaToFluidMap.get(aID).getLocalizedName());
} catch (GregtechException e) {
- System.exit(0);
+ FMLCommonHandler.instance().exitJava(0, true);
}
}
mInternalFluidCache.put(FluidFactory.mMetaToBlockMap.get(aID));
diff --git a/src/Java/gtPlusPlus/core/item/circuit/ItemAdvancedChip.java b/src/Java/gtPlusPlus/core/item/circuit/ItemAdvancedChip.java
index c375c32952..17321a0c45 100644
--- a/src/Java/gtPlusPlus/core/item/circuit/ItemAdvancedChip.java
+++ b/src/Java/gtPlusPlus/core/item/circuit/ItemAdvancedChip.java
@@ -1,22 +1,38 @@
package gtPlusPlus.core.item.circuit;
-import java.util.List;
+import java.util.*;
+import java.util.function.BiFunction;
+import java.util.function.Predicate;
+import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.registry.GameRegistry;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.gui.GT_GUIDialogSelectItem;
+import gregtech.api.interfaces.INetworkUpdatableItem;
+import gregtech.api.net.GT_Packet_UpdateItem;
+import gregtech.api.objects.XSTR;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
-import net.minecraft.util.IIcon;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.*;
import net.minecraft.world.World;
+import net.minecraftforge.common.util.Constants;
+import net.minecraftforge.common.util.FakePlayer;
+import org.apache.commons.lang3.tuple.Pair;
-public class ItemAdvancedChip extends Item {
-
+public class ItemAdvancedChip extends Item implements INetworkUpdatableItem {
+ private static final List<ItemStack> ALL_VARIANTS = new ArrayList<>();
protected IIcon base;
public ItemAdvancedChip() {
@@ -26,6 +42,11 @@ public class ItemAdvancedChip extends Item {
this.setMaxDamage(0);
this.setUnlocalizedName("T3RecipeSelector");
GameRegistry.registerItem(this, this.getUnlocalizedName());
+ ALL_VARIANTS.add(new ItemStack(this, 0, 0));
+ for (int i = 1; i <= 24; i++) {
+ ItemStack aStack = new ItemStack(this, 0, i);
+ ALL_VARIANTS.add(aStack);
+ }
}
@Override
@@ -52,6 +73,8 @@ public class ItemAdvancedChip extends Item {
public void addInformation(ItemStack aStack, EntityPlayer p_77624_2_, List aList, boolean p_77624_4_) {
try {
aList.add("Configuration == "+aStack.getItemDamage());
+ aList.add(GT_LanguageManager.addStringLocalization(new StringBuilder().append(getUnlocalizedName()).append(".tooltip.0").toString(), "Right click to reconfigure"));
+ aList.add(GT_LanguageManager.addStringLocalization(new StringBuilder().append(getUnlocalizedName()).append(".tooltip.1").toString(), "Needs a screwdriver or circuit programming tool"));
}
catch (Throwable t) {
t.printStackTrace();
@@ -133,6 +156,82 @@ public class ItemAdvancedChip extends Item {
public String getUnlocalizedName(ItemStack stack) {
return super.getUnlocalizedName();
}
-
+ @Override
+ public boolean receive(ItemStack stack, EntityPlayerMP player, NBTTagCompound tag) {
+ int meta = tag.hasKey("meta", Constants.NBT.TAG_BYTE) ? tag.getByte("meta") : -1;
+ if (meta < 0 || meta > 24)
+ return true;
+
+ if (!player.capabilities.isCreativeMode) {
+ Pair<Integer, BiFunction<ItemStack, EntityPlayerMP, ItemStack>> toolIndex = findConfiguratorInInv(player);
+ if (toolIndex == null) return true;
+
+ ItemStack[] mainInventory = player.inventory.mainInventory;
+ mainInventory[toolIndex.getKey()] = toolIndex.getValue().apply(mainInventory[toolIndex.getKey()], player);
+ }
+ stack.setItemDamage(meta);
+
+ return true;
+ }
+
+ @Override
+ public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float xOffset, float yOffset, float zOffset) {
+ // nothing on server side or fake player
+ if (player instanceof FakePlayer || !world.isRemote) return false;
+ // check if any screwdriver
+ ItemStack configuratorStack;
+ if (player.capabilities.isCreativeMode) {
+ configuratorStack = null;
+ } else {
+ Pair<Integer, ?> configurator = findConfiguratorInInv(player);
+ if (configurator == null) {
+ int count;
+ try {
+ count = Integer.parseInt(StatCollector.translateToLocal("GT5U.item.programmed_circuit.no_screwdriver.count"));
+ } catch (NumberFormatException e) {
+ player.addChatComponentMessage(new ChatComponentText("Error in translation GT5U.item.programmed_circuit.no_screwdriver.count: " + e.getMessage()));
+ count = 1;
+ }
+ player.addChatComponentMessage(new ChatComponentTranslation("GT5U.item.programmed_circuit.no_screwdriver." + XSTR.XSTR_INSTANCE.nextInt(count)));
+ return false;
+ }
+ configuratorStack = player.inventory.mainInventory[configurator.getKey()];
+ }
+ openSelectorGui(configuratorStack, stack.getItemDamage());
+ return true;
+ }
+
+ private void openSelectorGui(ItemStack configurator, int meta) {
+ FMLCommonHandler.instance().showGuiScreen(new GT_GUIDialogSelectItem(
+ StatCollector.translateToLocal("GT5U.item.programmed_circuit.select.header"),
+ configurator,
+ null,
+ ItemAdvancedChip::onConfigured,
+ ALL_VARIANTS,
+ meta,
+ true
+ ));
+ }
+
+ private static void onConfigured(ItemStack stack) {
+ NBTTagCompound tag = new NBTTagCompound();
+ tag.setByte("meta", (byte) stack.getItemDamage());
+ GT_Values.NW.sendToServer(new GT_Packet_UpdateItem(tag));
+ }
+
+ private static Pair<Integer, BiFunction<ItemStack, EntityPlayerMP, ItemStack>> findConfiguratorInInv(EntityPlayer player) {
+ ItemStack[] mainInventory = player.inventory.mainInventory;
+ for (int j = 0, mainInventoryLength = mainInventory.length; j < mainInventoryLength; j++) {
+ ItemStack toolStack = mainInventory[j];
+
+ if (!GT_Utility.isStackValid(toolStack))
+ continue;
+
+ for (Map.Entry<Predicate<ItemStack>, BiFunction<ItemStack, EntityPlayerMP, ItemStack>> p : GregTech_API.sCircuitProgrammerList.entrySet())
+ if (p.getKey().test(toolStack))
+ return Pair.of(j, p.getValue());
+ }
+ return null;
+ }
}
diff --git a/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java
index a20678c354..df64017ac0 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java
@@ -5,6 +5,7 @@ import java.util.Iterator;
import java.util.List;
import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.common.FMLCommonHandler;
import gregtech.api.enums.Materials;
import gregtech.api.objects.ItemData;
import gregtech.api.util.*;
@@ -46,7 +47,7 @@ public static int mInvalidID = 1;
Logger.RECIPE(ReflectionUtils.getMethodName(7));
Logger.RECIPE(ReflectionUtils.getMethodName(8));
Logger.RECIPE(ReflectionUtils.getMethodName(9));
- System.exit(1);
+ FMLCommonHandler.instance().exitJava(1, true);
}*/
if (resultItem == null){
@@ -356,7 +357,7 @@ public static int mInvalidID = 1;
Logger.RECIPE(ReflectionUtils.getMethodName(7));
Logger.RECIPE(ReflectionUtils.getMethodName(8));
Logger.RECIPE(ReflectionUtils.getMethodName(9));
- System.exit(1);
+ FMLCommonHandler.instance().exitJava(1, true);
}
diff --git a/src/Java/gtPlusPlus/plugin/agrichem/item/algae/ItemBioChip.java b/src/Java/gtPlusPlus/plugin/agrichem/item/algae/ItemBioChip.java
index 5ecfbbabe9..f876839f5f 100644
--- a/src/Java/gtPlusPlus/plugin/agrichem/item/algae/ItemBioChip.java
+++ b/src/Java/gtPlusPlus/plugin/agrichem/item/algae/ItemBioChip.java
@@ -1,21 +1,38 @@
package gtPlusPlus.plugin.agrichem.item.algae;
-import java.util.List;
+import java.util.*;
+import java.util.function.BiFunction;
+import java.util.function.Predicate;
+import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.registry.GameRegistry;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.gui.GT_GUIDialogSelectItem;
+import gregtech.api.interfaces.INetworkUpdatableItem;
+import gregtech.api.net.GT_Packet_UpdateItem;
+import gregtech.api.objects.XSTR;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
-import net.minecraft.util.IIcon;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.*;
import net.minecraft.world.World;
+import net.minecraftforge.common.util.Constants;
+import net.minecraftforge.common.util.FakePlayer;
+import org.apache.commons.lang3.tuple.Pair;
-public class ItemBioChip extends Item {
+public class ItemBioChip extends Item implements INetworkUpdatableItem {
+ private static final List<ItemStack> ALL_VARIANTS = new ArrayList<>();
protected IIcon base;
@@ -26,6 +43,11 @@ public class ItemBioChip extends Item {
this.setMaxDamage(0);
this.setUnlocalizedName("BioRecipeSelector");
GameRegistry.registerItem(this, this.getUnlocalizedName());
+ ALL_VARIANTS.add(new ItemStack(this, 0, 0));
+ for (int i = 1; i <= 24; i++) {
+ ItemStack aStack = new ItemStack(this, 0, i);
+ ALL_VARIANTS.add(aStack);
+ }
}
@Override
@@ -52,6 +74,8 @@ public class ItemBioChip extends Item {
public void addInformation(ItemStack aStack, EntityPlayer p_77624_2_, List aList, boolean p_77624_4_) {
try {
aList.add("Configuration == "+aStack.getItemDamage());
+ aList.add(GT_LanguageManager.addStringLocalization(new StringBuilder().append(getUnlocalizedName()).append(".tooltip.0").toString(), "Right click to reconfigure"));
+ aList.add(GT_LanguageManager.addStringLocalization(new StringBuilder().append(getUnlocalizedName()).append(".tooltip.1").toString(), "Needs a screwdriver or circuit programming tool"));
}
catch (Throwable t) {
t.printStackTrace();
@@ -133,6 +157,82 @@ public class ItemBioChip extends Item {
public String getUnlocalizedName(ItemStack stack) {
return super.getUnlocalizedName();
}
-
+ @Override
+ public boolean receive(ItemStack stack, EntityPlayerMP player, NBTTagCompound tag) {
+ int meta = tag.hasKey("meta", Constants.NBT.TAG_BYTE) ? tag.getByte("meta") : -1;
+ if (meta < 0 || meta > 24)
+ return true;
+
+ if (!player.capabilities.isCreativeMode) {
+ Pair<Integer, BiFunction<ItemStack, EntityPlayerMP, ItemStack>> toolIndex = findConfiguratorInInv(player);
+ if (toolIndex == null) return true;
+
+ ItemStack[] mainInventory = player.inventory.mainInventory;
+ mainInventory[toolIndex.getKey()] = toolIndex.getValue().apply(mainInventory[toolIndex.getKey()], player);
+ }
+ stack.setItemDamage(meta);
+
+ return true;
+ }
+
+ @Override
+ public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float xOffset, float yOffset, float zOffset) {
+ // nothing on server side or fake player
+ if (player instanceof FakePlayer || !world.isRemote) return false;
+ // check if any screwdriver
+ ItemStack configuratorStack;
+ if (player.capabilities.isCreativeMode) {
+ configuratorStack = null;
+ } else {
+ Pair<Integer, ?> configurator = findConfiguratorInInv(player);
+ if (configurator == null) {
+ int count;
+ try {
+ count = Integer.parseInt(StatCollector.translateToLocal("GT5U.item.programmed_circuit.no_screwdriver.count"));
+ } catch (NumberFormatException e) {
+ player.addChatComponentMessage(new ChatComponentText("Error in translation GT5U.item.programmed_circuit.no_screwdriver.count: " + e.getMessage()));
+ count = 1;
+ }
+ player.addChatComponentMessage(new ChatComponentTranslation("GT5U.item.programmed_circuit.no_screwdriver." + XSTR.XSTR_INSTANCE.nextInt(count)));
+ return false;
+ }
+ configuratorStack = player.inventory.mainInventory[configurator.getKey()];
+ }
+ openSelectorGui(configuratorStack, stack.getItemDamage());
+ return true;
+ }
+
+ private void openSelectorGui(ItemStack configurator, int meta) {
+ FMLCommonHandler.instance().showGuiScreen(new GT_GUIDialogSelectItem(
+ StatCollector.translateToLocal("GT5U.item.programmed_circuit.select.header"),
+ configurator,
+ null,
+ ItemBioChip::onConfigured,
+ ALL_VARIANTS,
+ meta,
+ true
+ ));
+ }
+
+ private static void onConfigured(ItemStack stack) {
+ NBTTagCompound tag = new NBTTagCompound();
+ tag.setByte("meta", (byte) stack.getItemDamage());
+ GT_Values.NW.sendToServer(new GT_Packet_UpdateItem(tag));
+ }
+
+ private static Pair<Integer, BiFunction<ItemStack, EntityPlayerMP, ItemStack>> findConfiguratorInInv(EntityPlayer player) {
+ ItemStack[] mainInventory = player.inventory.mainInventory;
+ for (int j = 0, mainInventoryLength = mainInventory.length; j < mainInventoryLength; j++) {
+ ItemStack toolStack = mainInventory[j];
+
+ if (!GT_Utility.isStackValid(toolStack))
+ continue;
+
+ for (Map.Entry<Predicate<ItemStack>, BiFunction<ItemStack, EntityPlayerMP, ItemStack>> p : GregTech_API.sCircuitProgrammerList.entrySet())
+ if (p.getKey().test(toolStack))
+ return Pair.of(j, p.getValue());
+ }
+ return null;
+ }
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java b/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java
index f623fe7405..a375f77cda 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java
@@ -8,6 +8,7 @@ import java.util.Collection;
import java.util.List;
import cpw.mods.fml.common.event.FMLLoadCompleteEvent;
+import gregtech.api.GregTech_API;
import gregtech.api.enums.ItemList;
import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
@@ -40,6 +41,7 @@ import gtPlusPlus.core.util.reflect.AddGregtechRecipe;
import gtPlusPlus.core.util.reflect.ReflectionUtils;
import gtPlusPlus.everglades.gen.gt.WorldGen_GT;
import gtPlusPlus.xmod.gregtech.api.enums.CustomOrePrefix;
+import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials;
import gtPlusPlus.xmod.gregtech.api.util.GTPP_Config;
import gtPlusPlus.xmod.gregtech.api.world.GTPP_Worldgen;
@@ -141,6 +143,18 @@ public class HANDLER_GT {
//Register some custom recipe maps for any enabled multiblocks.
//MultiblockRecipeMapHandler.run();
+
+ if (GregtechItemList.Circuit_BioRecipeSelector.hasBeenSet()) {
+ for (int i = 1; i <= 24; i++) {
+ GregTech_API.registerConfigurationCircuit(CI.getNumberedBioCircuit(i), 0);
+ }
+ }
+
+ if (GregtechItemList.Circuit_T3RecipeSelector.hasBeenSet()) {
+ for (int i = 1; i <= 24; i++) {
+ GregTech_API.registerConfigurationCircuit(CI.getNumberedAdvancedCircuit(i), 3);
+ }
+ }
}
public static void onLoadComplete(FMLLoadCompleteEvent event) {
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java
index c728c5d8e8..2ff2712952 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/TreeFarmHelper.java
@@ -15,6 +15,7 @@ import cpw.mods.fml.common.eventhandler.Event.Result;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
+import gregtech.api.enums.*;
import net.minecraft.block.Block;
import net.minecraft.block.BlockAir;
import net.minecraft.block.IGrowable;
@@ -28,8 +29,6 @@ import net.minecraft.server.MinecraftServer;
import net.minecraft.world.ChunkPosition;
import net.minecraft.world.World;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.enums.Textures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.items.GT_MetaGenerated_Tool;
@@ -54,12 +53,14 @@ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.BonemealEvent;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.oredict.OreDictionary;
public class TreeFarmHelper {
public static final FluidStack fertT1 = FluidUtils.getFluidStack("fluid.fertiliser", 3);
public static final FluidStack fertT2 = FluidUtils.getFluidStack("fluid.un18fertiliser", 2);
public static final FluidStack fertT3 = FluidUtils.getFluidStack("fluid.un32fertiliser", 1);
+ private static final int sawOreId = OreDictionary.getOreID(ToolDictNames.craftingToolSaw.name());
public static ITexture[][][] getTextureSet() {
final ITexture[][][] rTextures = new ITexture[10][17][];
@@ -287,73 +288,26 @@ public class TreeFarmHelper {
return SAWTOOL.NONE;
}
- public static boolean isCorrectPart(final ItemStack aStack) {
+ public static ToolType getPartType(final ItemStack aStack) {
if (aStack != null){
//Utils.LOG_WARNING("Found "+aStack.getDisplayName()+" in the GUI slot.");
- if (aStack.getItem() instanceof MetaGeneratedGregtechItems) {
+ if (aStack.getItem() == MetaGeneratedGregtechItems.INSTANCE) {
int aDmg = aStack.getItemDamage();
if (aDmg >= 32120 && aDmg <= 32128) {
- return true;
- }
- else if (aStack.getUnlocalizedName().toLowerCase().contains("mu-metaitem")) {
- String[] aData = aStack.getUnlocalizedName().toLowerCase().split("//.");
- if (aData != null && aData.length > 0) {
- for (String s : aData) {
- if (s.contains("32120")) {
- return true;
- }
- else if (s.contains("32122")) {
- return true;
- }
- else if (s.contains("32124")) {
- return true;
- }
- else if (s.contains("32126")) {
- return true;
- }
- else if (s.contains("32128")) {
- return true;
- }
- else {
- Logger.INFO("bad Tool in Slot 1");
- return false;
- }
- }
- }
+ return ToolType.Unbreakable;
}
Logger.INFO("bad Tool in Slot 2 | "+aStack.getUnlocalizedName().toLowerCase() + " | "+aDmg);
- return false;
+ return null;
}
- if ((aStack.getItem() instanceof GT_MetaGenerated_Item_02) || (aStack.getItem() instanceof GT_MetaGenerated_Tool)){
- if (OrePrefixes.craftingTool.contains(aStack)){
- if (aStack.getDisplayName().toLowerCase().contains("saw") || aStack.getDisplayName().toLowerCase().contains("gt.metatool.01")){
- if (aStack.getItemDamage() == 10){
- return true;
- }
- else if (aStack.getItemDamage() == 140 || aStack.getDisplayName().toLowerCase().contains("gt.metatool.01.140")){
- return true;
- }
- else if (aStack.getItemDamage() == 110 || aStack.getDisplayName().toLowerCase().contains("gt.metatool.01.110")){
- return true;
- }
- else if (aStack.getItemDamage() == 112 || aStack.getDisplayName().toLowerCase().contains("gt.metatool.01.112")){
- return true;
- }
- else if (aStack.getItemDamage() == 114 || aStack.getDisplayName().toLowerCase().contains("gt.metatool.01.114")){
- return true;
- }
- else {
- Logger.INFO("bad Tool in Slot 3");
- return false;
- }
- }
- }
+ if (aStack.getItem() instanceof GT_MetaGenerated_Tool) {
+ if (Arrays.stream(OreDictionary.getOreIDs(aStack)).anyMatch(i -> i == sawOreId))
+ return ToolType.Breakable;
}
}
Logger.INFO("bad Tool in Slot 4");
- return false;
+ return null;
}
public static boolean isHumusLoaded = false;
@@ -716,7 +670,10 @@ public class TreeFarmHelper {
}
-
+ public enum ToolType {
+ Unbreakable,
+ Breakable
+ }
/**
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/treefarm/TreeGenerator.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/treefarm/TreeGenerator.java
index b94ebf2918..bb40c9b379 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/treefarm/TreeGenerator.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/treefarm/TreeGenerator.java
@@ -35,14 +35,13 @@ public class TreeGenerator {
}
public AutoMap<ItemStack> generateOutput(int aTreeSize){
- AutoMap<ItemStack> aTemp = new AutoMap<ItemStack>();
AutoMap<ItemStack> aOutputMap = mTreeData.getOutputFromTree();
if (aOutputMap != null && aOutputMap.size() > 0) {
Logger.WARNING("Valid tree data output");
return aOutputMap;
}
Logger.WARNING("Invalid tree data output");
- return aTemp;
+ return new AutoMap<ItemStack>();
}
public static class FakeTreeInFakeWorldGenerator extends WorldGenAbstractTree
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_EBF.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_EBF.java
index 5715db32ac..098642978d 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_EBF.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_EBF.java
@@ -332,7 +332,7 @@ public class GregtechMetaTileEntity_Adv_EBF extends GregtechMeta_MultiBlockBase
aSpeedBonusPercent = Math.max(-99, aSpeedBonusPercent);
float tTimeFactor = 100.0f / (100.0f + aSpeedBonusPercent);
this.mMaxProgresstime = (int) (tRecipe.mDuration * tTimeFactor);
- int rInt = 2;
+ int tHalfHeatCapacityDivTiers = tHeatCapacityDivTiers / 2;
this.mEUt = (int) Math.ceil(tTotalEUt);
@@ -346,7 +346,15 @@ public class GregtechMetaTileEntity_Adv_EBF extends GregtechMeta_MultiBlockBase
} else {
while (this.mEUt <= gregtech.api.enums.GT_Values.V[(tTier - 1)]) {
this.mEUt *= 4;
- this.mMaxProgresstime /= (tHeatCapacityDivTiers >= rInt ? 4 : 2);
+ if (tHalfHeatCapacityDivTiers > 0) {
+ this.mMaxProgresstime = mMaxProgresstime / 4;
+ tHalfHeatCapacityDivTiers--;
+ } else {
+ this.mMaxProgresstime = mMaxProgresstime / 2;
+ }
+ if (this.mMaxProgresstime <= 1) {
+ break;
+ }
}
}
if (this.mEUt > 0) {
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java
index 8ab6aa5472..4fd39740a1 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java
@@ -1,28 +1,20 @@
package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
+import codechicken.nei.ItemStackMap;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import gregtech.api.enums.Materials;
import gregtech.api.enums.TAE;
import gregtech.api.enums.Textures;
-import gregtech.api.interfaces.IIconContainer;
-import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.*;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.items.GT_MetaGenerated_Tool;
import gregtech.api.metatileentity.implementations.*;
-import gregtech.api.objects.GT_RenderedTexture;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
-import gregtech.api.util.GT_Recipe;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.render.TextureFactory;
+import gregtech.api.util.*;
import gtPlusPlus.api.objects.data.AutoMap;
-import gtPlusPlus.api.objects.minecraft.ThreadFakeWorldGenerator;
import gtPlusPlus.core.block.ModBlocks;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.math.MathUtils;
@@ -46,51 +38,30 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase
private IStructureDefinition<GregtechMetaTileEntityTreeFarm> STRUCTURE_DEFINITION = null;
static {
- mTreeData = new TreeGenerator();
+ new Thread("GTPP-TreeDataWorker") {
+ @Override
+ public void run() {
+ mTreeData = new TreeGenerator();
+ }
+ }.start();
}
+ private static ItemStack aLeaves;
+
public GregtechMetaTileEntityTreeFarm(final int aID, final String aName, final String aNameRegional) {
super(aID, aName, aNameRegional);
CASING_TEXTURE_ID = TAE.getIndexFromPage(1, 15);
mCasingName = ItemUtils.getLocalizedNameOfBlock(ModBlocks.blockCasings2Misc, 15);
}
- /*
- * Static thread for Fake World Handling
- */
-
-
- private static ScheduledExecutorService executor;
- private static ThreadFakeWorldGenerator aThread;
-
public GregtechMetaTileEntityTreeFarm(final String aName) {
super(aName);
CASING_TEXTURE_ID = TAE.getIndexFromPage(1, 15);
mCasingName = ItemUtils.getLocalizedNameOfBlock(ModBlocks.blockCasings2Misc, 15);
-
- if (executor == null || mTreeData == null) {
- if (executor == null) {
- executor = Executors.newScheduledThreadPool(10);
- }
- if (executor != null) {
- if (aThread == null) {
- aThread = new ThreadFakeWorldGenerator();
- executor.scheduleAtFixedRate(aThread, 0, 1, TimeUnit.SECONDS);
- while (aThread.mGenerator == null) {
- if (aThread.mGenerator != null) {
- break;
- }
- }
- if (aThread.mGenerator != null) {
- mTreeData = aThread.mGenerator;
- }
- }
- }
- }
}
public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) {
- return (IMetaTileEntity) new GregtechMetaTileEntityTreeFarm(this.mName);
+ return new GregtechMetaTileEntityTreeFarm(this.mName);
}
@Override
@@ -126,7 +97,7 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase
final byte aColorIndex, final boolean aActive, final boolean aRedstone) {
if (aSide == aFacing) {
return new ITexture[]{Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID),
- new GT_RenderedTexture((IIconContainer) (aActive ? TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active : TexturesGtBlock.Overlay_Machine_Controller_Advanced))};
+ TextureFactory.of(aActive ? TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active : TexturesGtBlock.Overlay_Machine_Controller_Advanced)};
}
return new ITexture[]{Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID)};
}
@@ -151,16 +122,20 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase
}
public boolean isCorrectMachinePart(final ItemStack aStack) {
- return TreeFarmHelper.isCorrectPart(aStack);
- //return true;
+ // is correct part && either not powered tool or have enough power
+ return TreeFarmHelper.getPartType(aStack) != null && !GT_ModHandler.isElectricItem(aStack) || GT_ModHandler.canUseElectricItem(aStack, 1);
}
-// public boolean isFacingValid(final byte aFacing) {
-// return aFacing > 1;
-// }
-
public boolean checkRecipe(final ItemStack aStack) {
-
+ if (mTreeData == null)
+ // not finished somehow
+ return false;
+ if (aStack == null && !replaceTool())
+ // no tool
+ return false;
+ if (!isCorrectMachinePart(aStack))
+ // not a tool
+ return false;
if (mTreeData != null) {
long tVoltage = getMaxInputVoltage();
@@ -189,35 +164,44 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase
int aChance = MathUtils.randInt(0, 10);
- AutoMap<ItemStack> aOutputs = new AutoMap<ItemStack>();
try {
if (aChance < 8) {
+ ItemStackMap<Integer> allOutputs = new ItemStackMap<>();
+ if (aLeaves == null)
+ aLeaves = ItemUtils.getSimpleStack(Blocks.leaves);
//1% Chance per Tick
for (int u = 0; u < (Math.max(4, (MathUtils.randInt((3 * tTier), 100) * tTier * tTier) / 14)); u++) {
- aOutputs = mTreeData.generateOutput(0);
+ AutoMap<ItemStack> aOutputs = mTreeData.generateOutput(0);
if (aOutputs.size() > 0) {
-
- ItemStack aLeaves = ItemUtils.getSimpleStack(Blocks.leaves);
-
for (ItemStack aOutputItemStack : aOutputs) {
if (!GT_Utility.areStacksEqual(aLeaves, aOutputItemStack)) {
- this.addOutput(aOutputItemStack);
+ Integer oldStackSize = allOutputs.get(aOutputItemStack);
+ int oldStackSizeUnboxed = oldStackSize == null ? 0 : oldStackSize;
+ allOutputs.put(aOutputItemStack, oldStackSizeUnboxed + aOutputItemStack.stackSize);
}
}
- this.updateSlots();
}
}
+ mOutputItems = allOutputs.entries().stream()
+ .map(e -> {
+ e.key.stackSize = e.value;
+ return e.key;
+ }).toArray(ItemStack[]::new);
}
} catch (Throwable t) {
- t.printStackTrace();
+ t.printStackTrace(GT_Log.err);
}
return true;
} else {
return false;
}
- //return this.checkRecipeGeneric(4, 100, 100);
+ }
+
+ @Override
+ public boolean checkHatch() {
+ return super.checkHatch() && mEnergyHatches.size() == 1;
}
@Override
@@ -294,7 +278,7 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase
for (GT_MetaTileEntity_Hatch_InputBus mInputBus : this.mInputBusses) {
for (int i = 0; i < mInputBus.mInventory.length; i++) {
ItemStack uStack = mInputBus.mInventory[i];
- if (uStack != null && TreeFarmHelper.isCorrectPart(uStack)) {
+ if (uStack != null && TreeFarmHelper.getPartType(uStack) != null) {
this.setGUIItemStack(uStack);
return true;
}
@@ -316,29 +300,29 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase
}
@Override
+ public boolean doRandomMaintenanceDamage() {
+ ItemStack tSaw = mInventory[1];
+ if (!isCorrectMachinePart(tSaw) || getRepairStatus() == 0) {
+ stopMachine();
+ return false;
+ }
+ if (CORE.RANDOM.nextInt(200) == 0) {
+ if (!tryDamageTool(tSaw)) {
+ if (tSaw.getItem().isDamageable())
+ addOutput(tSaw);
+ this.mInventory[1] = null;
+ if (!replaceTool())
+ this.getBaseMetaTileEntity().disableWorking();
+ tryDamageTool(tSaw);
+ }
+ }
+ return super.doRandomMaintenanceDamage();
+ }
+
+ @Override
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
super.onPostTick(aBaseMetaTileEntity, aTick);
replaceTool();
- ItemStack invItem = this.mInventory[1];
- if (invItem != null && aTick % 200 == 0 && this.getBaseMetaTileEntity().isServerSide() && isCorrectMachinePart(invItem)) {
-
- if (!tryDamageTool(invItem)) {
- if (!invItem.getItem().isDamageable()) { //item durability is <= 0
- this.mInventory[1] = null;
- if (!replaceTool()) {
- this.getBaseMetaTileEntity().disableWorking();
- }
- tryDamageTool(invItem);
- } else {
- addOutput(invItem);
- this.mInventory[1] = null;
- if (!replaceTool()) {
- this.getBaseMetaTileEntity().disableWorking();
- }
- tryDamageTool(invItem);
- }
- }
- }
}
@Override