diff options
Diffstat (limited to 'src')
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 |