From 8dd45ba6e659700e41c6dfb432372dad0b1859ea Mon Sep 17 00:00:00 2001 From: Technus Date: Sun, 9 Dec 2018 15:49:17 +0100 Subject: Also allow any number to be used while making ore dict things --- src/main/java/gregtech/common/GT_RecipeAdder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/gregtech/common') diff --git a/src/main/java/gregtech/common/GT_RecipeAdder.java b/src/main/java/gregtech/common/GT_RecipeAdder.java index d65d50c990..7d6f4fab30 100644 --- a/src/main/java/gregtech/common/GT_RecipeAdder.java +++ b/src/main/java/gregtech/common/GT_RecipeAdder.java @@ -1272,7 +1272,7 @@ public class GT_RecipeAdder implements IGT_RecipeAdder { List tList; if (objs.length >= 2 && !(tList = GT_OreDictUnificator.getOres(objs[0])).isEmpty()) { try { - int tAmount = (int) objs[1]; + int tAmount = ((Number) objs[1]).intValue(); List uList = new ArrayList<>(); for (ItemStack tStack : tList) { ItemStack uStack = GT_Utility.copyAmount(tAmount, tStack); -- cgit From 36f45528f2025e9e7f52fc806626034c45e3712d Mon Sep 17 00:00:00 2001 From: Dimach Date: Sun, 9 Dec 2018 18:39:06 +0300 Subject: cherry pick 0beea9037cd8ff7a899c14c53d6b9a381c22f42c Add volumetric flask. (#1500) --- src/main/java/gregtech/common/GT_Client.java | 1 + src/main/java/gregtech/common/GT_Network.java | 5 + src/main/java/gregtech/common/GT_Proxy.java | 9 +- .../common/gui/GT_ContainerVolumetricFlask.java | 20 ++ .../common/gui/GT_GUIContainerVolumetricFlask.java | 222 ++++++++++++++++ .../gregtech/common/items/GT_VolumetricFlask.java | 290 +++++++++++++++++++++ .../common/net/MessageSetFlaskCapacity.java | 42 +++ .../gregtech/common/render/GT_FlaskRenderer.java | 89 +++++++ 8 files changed, 676 insertions(+), 2 deletions(-) create mode 100644 src/main/java/gregtech/common/gui/GT_ContainerVolumetricFlask.java create mode 100644 src/main/java/gregtech/common/gui/GT_GUIContainerVolumetricFlask.java create mode 100644 src/main/java/gregtech/common/items/GT_VolumetricFlask.java create mode 100644 src/main/java/gregtech/common/net/MessageSetFlaskCapacity.java create mode 100644 src/main/java/gregtech/common/render/GT_FlaskRenderer.java (limited to 'src/main/java/gregtech/common') diff --git a/src/main/java/gregtech/common/GT_Client.java b/src/main/java/gregtech/common/GT_Client.java index 272a6bfa6e..1345042b45 100644 --- a/src/main/java/gregtech/common/GT_Client.java +++ b/src/main/java/gregtech/common/GT_Client.java @@ -308,6 +308,7 @@ public class GT_Client extends GT_Proxy new GT_MetaGenerated_Tool_Renderer(); new GT_Renderer_Entity_Arrow(GT_Entity_Arrow.class, "arrow"); new GT_Renderer_Entity_Arrow(GT_Entity_Arrow_Potion.class, "arrow_potions"); + new GT_FlaskRenderer(); } public void onPostLoad() { diff --git a/src/main/java/gregtech/common/GT_Network.java b/src/main/java/gregtech/common/GT_Network.java index 1371b6485c..79c13156d7 100644 --- a/src/main/java/gregtech/common/GT_Network.java +++ b/src/main/java/gregtech/common/GT_Network.java @@ -6,10 +6,12 @@ import cpw.mods.fml.common.network.FMLEmbeddedChannel; import cpw.mods.fml.common.network.FMLOutboundHandler; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.network.internal.FMLProxyPacket; +import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; import cpw.mods.fml.relauncher.Side; import gregtech.api.enums.GT_Values; import gregtech.api.net.*; import gregtech.common.blocks.GT_Packet_Ores; +import gregtech.common.net.MessageSetFlaskCapacity; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; @@ -31,8 +33,11 @@ public class GT_Network implements IGT_NetworkHandler { private final EnumMap mChannel; private final GT_Packet[] mSubChannels; + public final SimpleNetworkWrapper networkWrapper; public GT_Network() { + networkWrapper = NetworkRegistry.INSTANCE.newSimpleChannel("gregtech_network_wrapper"); + networkWrapper.registerMessage(MessageSetFlaskCapacity.Handler.class, MessageSetFlaskCapacity.class, 0, Side.SERVER); this.mChannel = NetworkRegistry.INSTANCE.newChannel("GregTech", new ChannelHandler[]{this, new HandlerShared()}); this.mSubChannels = new GT_Packet[]{new GT_Packet_TileEntity(), new GT_Packet_Sound(), new GT_Packet_Block_Event(), new GT_Packet_Ores(), new GT_Packet_Pollution()}; } diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java index bf79b49133..2486d4d241 100644 --- a/src/main/java/gregtech/common/GT_Proxy.java +++ b/src/main/java/gregtech/common/GT_Proxy.java @@ -26,6 +26,7 @@ import gregtech.api.net.GT_Packet_Pollution; import gregtech.api.objects.*; import gregtech.api.util.*; import gregtech.common.entities.GT_Entity_Arrow; +import gregtech.common.gui.GT_ContainerVolumetricFlask; import gregtech.common.items.GT_MetaGenerated_Tool_01; import gregtech.common.items.armor.ModularArmor_Item; import gregtech.common.items.armor.gui.*; @@ -1461,7 +1462,9 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler { return new ContainerElectricArmor1(aPlayer, new InventoryArmor(ModularArmor_Item.class, aPlayer.getCurrentEquippedItem())); case 2: return new ContainerElectricArmor1(aPlayer, new InventoryArmor(ModularArmor_Item.class, aPlayer.getCurrentEquippedItem())); - default: + case 10: + return new GT_ContainerVolumetricFlask(aPlayer.inventory); + default: return getRightItem(aPlayer, ID); } } @@ -1475,7 +1478,9 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler { return new ContainerElectricArmor1(aPlayer, new InventoryArmor(ModularArmor_Item.class, aPlayer.getEquipmentInSlot(tSlot))); case 2: return new ContainerElectricArmor1(aPlayer, new InventoryArmor(ModularArmor_Item.class, aPlayer.getEquipmentInSlot(tSlot))); - default: + case 10: + return new GT_ContainerVolumetricFlask(aPlayer.inventory); + default: return getRightItem(aPlayer, ID); } } diff --git a/src/main/java/gregtech/common/gui/GT_ContainerVolumetricFlask.java b/src/main/java/gregtech/common/gui/GT_ContainerVolumetricFlask.java new file mode 100644 index 0000000000..2f8fd2a356 --- /dev/null +++ b/src/main/java/gregtech/common/gui/GT_ContainerVolumetricFlask.java @@ -0,0 +1,20 @@ +package gregtech.common.gui; + +import gregtech.common.items.GT_VolumetricFlask; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; + +public final class GT_ContainerVolumetricFlask extends Container { + ItemStack flask; + + public GT_ContainerVolumetricFlask(InventoryPlayer inventoryPlayer) { + flask = inventoryPlayer.getCurrentItem(); + } + + @Override + public boolean canInteractWith(EntityPlayer p) { + return (flask != null) && (flask.stackSize > 0) && ((flask.getItem() instanceof GT_VolumetricFlask)); + } +} diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainerVolumetricFlask.java b/src/main/java/gregtech/common/gui/GT_GUIContainerVolumetricFlask.java new file mode 100644 index 0000000000..65b0676534 --- /dev/null +++ b/src/main/java/gregtech/common/gui/GT_GUIContainerVolumetricFlask.java @@ -0,0 +1,222 @@ +package gregtech.common.gui; + + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.GT_Values; +import gregtech.common.GT_Network; +import gregtech.common.items.GT_VolumetricFlask; +import gregtech.common.net.MessageSetFlaskCapacity; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +import java.text.DecimalFormat; +import java.text.ParseException; + +@SideOnly(Side.CLIENT) +public final class GT_GUIContainerVolumetricFlask extends GuiContainer { + private static final ResourceLocation BACKGROUND = new ResourceLocation("gregtech:textures/gui/VolumetricFlask.png"); + + private GuiIntegerBox amount; + private GuiButton apply; + private GuiButton plus1; + private GuiButton plus10; + private GuiButton plus100; + private GuiButton plus1000; + private GuiButton minus1; + private GuiButton minus10; + private GuiButton minus100; + private GuiButton minus1000; + private GT_ContainerVolumetricFlask container; + + public GT_GUIContainerVolumetricFlask(GT_ContainerVolumetricFlask container) { + super(container); + this.container = container; + } + + public void initGui() { + super.initGui(); + + buttonList.add(plus1 = new GuiButton(0, guiLeft + 20, guiTop + 26, 22, 20, "+1")); + buttonList.add(plus10 = new GuiButton(0, guiLeft + 48, guiTop + 26, 28, 20, "+10")); + buttonList.add(plus100 = new GuiButton(0, guiLeft + 82, guiTop + 26, 32, 20, "+100")); + buttonList.add(plus1000 = new GuiButton(0, guiLeft + 120, guiTop + 26, 38, 20, "+1000")); + + buttonList.add(minus1 = new GuiButton(0, guiLeft + 20, guiTop + 75, 22, 20, "-1")); + buttonList.add(minus10 = new GuiButton(0, guiLeft + 48, guiTop + 75, 28, 20, "-10")); + buttonList.add(minus100 = new GuiButton(0, guiLeft + 82, guiTop + 75, 32, 20, "-100")); + buttonList.add(minus1000 = new GuiButton(0, guiLeft + 120, guiTop + 75, 38, 20, "-1000")); + + buttonList.add(apply = new GuiButton(0, guiLeft + 128, guiTop + 51, 38, 20, "Accept")); + + amount = new GuiIntegerBox(fontRendererObj, guiLeft + 62, guiTop + 57, 59, fontRendererObj.FONT_HEIGHT, ((GT_VolumetricFlask) container.flask.getItem()).getMaxCapacity()); + amount.setEnableBackgroundDrawing(false); + amount.setMaxStringLength(16); + amount.setTextColor(16777215); + amount.setVisible(true); + amount.setFocused(true); + amount.setText("1"); + System.out.println(((GT_VolumetricFlask) container.flask.getItem()).getCapacity(container.flask)); + amount.setText(String.valueOf(((GT_VolumetricFlask) container.flask.getItem()).getCapacity(container.flask))); + } + + + protected final void drawGuiContainerBackgroundLayer(float f, int x, int y) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + mc.getTextureManager().bindTexture(BACKGROUND); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + try { + Long.parseLong(amount.getText()); + apply.enabled = (amount.getText().length() > 0); + } catch (NumberFormatException e) { + apply.enabled = false; + } + + amount.drawTextBox(); + } + + + protected void keyTyped(char character, int key) { + if (!checkHotbarKeys(key)) { + if (key == 28) + actionPerformed(apply); + if (((key == 211) || (key == 205) || (key == 203) || (key == 14) || (character == '-') || (Character.isDigit(character))) && (amount.textboxKeyTyped(character, key))) { + try { + String out = amount.getText(); + boolean fixed = false; + while ((out.startsWith("0")) && (out.length() > 1)) { + out = out.substring(1); + fixed = true; + } + if (fixed) { + amount.setText(out); + } + if (out.isEmpty()) { + out = "0"; + } + long result = Long.parseLong(out); + if (result < 0L) { + amount.setText("1"); + } + + } catch (NumberFormatException localNumberFormatException) { + } + } else { + super.keyTyped(character, key); + } + } + } + + protected void actionPerformed(GuiButton btn) { + try { + if (btn == apply) { + ((GT_Network) GT_Values.NW).networkWrapper.sendToServer(new MessageSetFlaskCapacity(Integer.parseInt(amount.getText()))); + mc.thePlayer.closeScreen(); + } + + } catch (NumberFormatException e) { + amount.setText("1"); + } + + boolean isPlus = (btn == plus1) || (btn == plus10) || (btn == plus100) || (btn == plus1000); + boolean isMinus = (btn == minus1) || (btn == minus10) || (btn == minus100) || (btn == minus1000); + + if ((isPlus) || (isMinus)) { + addQty(getQty(btn)); + } + } + + private void addQty(int i) { + try { + String out = amount.getText(); + + boolean fixed = false; + while ((out.startsWith("0")) && (out.length() > 1)) { + out = out.substring(1); + fixed = true; + } + + if (fixed) { + amount.setText(out); + } + if (out.isEmpty()) { + out = "0"; + } + long result = Integer.parseInt(out); + + if ((result == 1L) && (i > 1)) { + result = 0L; + } + result += i; + if (result < 1L) { + result = 1L; + } + out = Long.toString(result); + Integer.parseInt(out); + amount.setText(out); + } catch (NumberFormatException localNumberFormatException) { + } + } + + + protected int getQty(GuiButton btn) { + try { + DecimalFormat df = new DecimalFormat("+#;-#"); + return df.parse(btn.displayString).intValue(); + } catch (ParseException e) { + } + + return 0; + } + + public class GuiIntegerBox extends GuiTextField { + private final int maxValue; + + public GuiIntegerBox(FontRenderer fontRenderer, int x, int y, int width, int height) { + this(fontRenderer, x, y, width, height, Integer.MAX_VALUE); + } + + public GuiIntegerBox(FontRenderer fontRenderer, int x, int y, int width, int height, int maxValue) { + super(fontRenderer, x, y, width, height); + this.maxValue = maxValue; + } + + + public void writeText(String selectedText) { + String original = getText(); + super.writeText(selectedText); + + try { + int i = Integer.parseInt(getText()); + if (i > maxValue) { + setText(String.valueOf(maxValue)); + } else if (i < 0) { + setText("0"); + } + } catch (NumberFormatException e) { + setText(original); + } + } + + + public void setText(String s) { + try { + int i = Integer.parseInt(s); + if (i > maxValue) { + s = String.valueOf(maxValue); + } else if (i < 0) { + s = "0"; + } + } catch (NumberFormatException e) { + s = String.valueOf(maxValue); + } + super.setText(s); + } + } + +} \ No newline at end of file diff --git a/src/main/java/gregtech/common/items/GT_VolumetricFlask.java b/src/main/java/gregtech/common/items/GT_VolumetricFlask.java new file mode 100644 index 0000000000..a247b09df9 --- /dev/null +++ b/src/main/java/gregtech/common/items/GT_VolumetricFlask.java @@ -0,0 +1,290 @@ + +package gregtech.common.items; + +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.GT_Values; +import gregtech.api.items.GT_Generic_Item; +import ic2.core.util.LiquidUtil; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.MovingObjectPosition.MovingObjectType; +import net.minecraft.world.World; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.*; + +import java.util.List; + +import static gregtech.api.enums.GT_Values.RES_PATH_ITEM; +import static ic2.core.util.LiquidUtil.*; + + +public class GT_VolumetricFlask extends GT_Generic_Item implements IFluidContainerItem { + private final int maxCapacity; + @SideOnly(Side.CLIENT) + public IIcon iconWindow; + + public GT_VolumetricFlask(String unlocalized, String english, int maxCapacity) { + super(unlocalized, english, null); + this.maxCapacity = maxCapacity; + setMaxStackSize(16); + setNoRepair(); + if (Loader.isModLoaded("NotEnoughItems")) { + for (Fluid fluid : FluidRegistry.getRegisteredFluids().values()) { + if (fluid != null) { + ItemStack stack = new ItemStack(this); + setCapacity(stack, getMaxCapacity()); + fill(stack, new FluidStack(fluid, Integer.MAX_VALUE), true); + codechicken.nei.api.API.hideItem(stack); + } + } + } + } + + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if (!world.isRemote && isEmpty(stack) && getMovingObjectPositionFromPlayer(world, player, true) == null) + player.openGui(GT_Values.GT, 1010, world, 0, 0, 0); + return super.onItemRightClick(stack, world, player); + } + + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float xOffset, float yOffset, float zOffset) { + if (player instanceof FakePlayer) { + return false; + } + if (world.isRemote) + return false; + if (interactWithTank(stack, player, world, x, y, z, side)) { + return true; + } + MovingObjectPosition mop = getMovingObjectPositionFromPlayer(world, player, true); + if (mop == null) { + return false; + } + if (mop.typeOfHit == MovingObjectType.BLOCK) { + x = mop.blockX; + y = mop.blockY; + z = mop.blockZ; + if (!world.canMineBlock(player, x, y, z) || !player.canPlayerEdit(x, y, z, mop.sideHit, stack)) { + return false; + } + if (collectFluidBlock(stack, player, world, x, y, z)) { + return true; + } + ForgeDirection dir = ForgeDirection.VALID_DIRECTIONS[mop.sideHit]; + FluidStack fluidStack = drainContainerStack(stack, player, 1000, true); + if (placeFluid(fluidStack, world, x, y, z) || (player.canPlayerEdit(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, mop.sideHit, stack) && placeFluid(fluidStack, world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ))) { + if (!player.capabilities.isCreativeMode) + drainContainerStack(stack, player, 1000, false); + return true; + } + } + return false; + } + + public boolean isEmpty(ItemStack stack) { + return getFluid(stack) == null; + } + + public int getFreeSpace(ItemStack stack) { + int capacity = getCapacity(stack); + if (capacity > 0) { + FluidStack fluidStack = getFluid(stack); + return fluidStack == null ? capacity : capacity - fluidStack.amount; + } + return 0; + } + + public int getMaxCapacity() { + return this.maxCapacity; + } + + public int getCapacity(ItemStack stack) { + int capacity = 1000; + if (stack.hasTagCompound()) { + NBTTagCompound nbt = stack.getTagCompound(); + if (nbt.hasKey("Capacity", 3)) + capacity = nbt.getInteger("Capacity"); + } + return Math.min(getMaxCapacity(), capacity); + } + + @Override + public void registerIcons(IIconRegister aIconRegister) { + super.registerIcons(aIconRegister); + iconWindow = aIconRegister.registerIcon(RES_PATH_ITEM + "gt.Volumetric_Flask.window"); + } + + public void setCapacity(ItemStack stack, int capacity) { + capacity = Math.min(capacity, getMaxCapacity()); + NBTTagCompound nbt = stack.getTagCompound(); + if (nbt == null) { + stack.setTagCompound(nbt = new NBTTagCompound()); + } + nbt.setInteger("Capacity", capacity); + } + + public FluidStack getFluid(ItemStack stack) { + if (stack.hasTagCompound()) { + NBTTagCompound nbt = stack.getTagCompound(); + if (nbt.hasKey("Fluid", 10)) + return FluidStack.loadFluidStackFromNBT(nbt.getCompoundTag("Fluid")); + } + return null; + } + + public void setFluid(ItemStack stack, FluidStack fluidStack) { + boolean removeFluid = (fluidStack == null) || (fluidStack.amount <= 0); + NBTTagCompound nbt = stack.getTagCompound(); + if (nbt == null) { + if (removeFluid) + return; + stack.setTagCompound(nbt = new NBTTagCompound()); + } + if (removeFluid) { + nbt.removeTag("Fluid"); + if (nbt.hasNoTags()) { + stack.setTagCompound(null); + } + } else { + nbt.setTag("Fluid", fluidStack.writeToNBT(new NBTTagCompound())); + } + } + + public int fill(ItemStack stack, FluidStack resource, boolean doFill) { + if (stack.stackSize != 1) + return 0; + if ((resource == null) || (resource.amount <= 0)) { + return 0; + } + FluidStack fluidStack = getFluid(stack); + if (fluidStack == null) { + fluidStack = new FluidStack(resource, 0); + } else if (!fluidStack.isFluidEqual(resource)) { + return 0; + } + int amount = Math.min(getCapacity(stack) - fluidStack.amount, resource.amount); + if ((doFill) && (amount > 0)) { + fluidStack.amount += amount; + setFluid(stack, fluidStack); + } + return amount; + } + + public FluidStack drain(ItemStack stack, int maxDrain, boolean doDrain) { + if (stack.stackSize != 1) + return null; + FluidStack fluidStack = getFluid(stack); + if (fluidStack == null) + return null; + maxDrain = Math.min(fluidStack.amount, maxDrain); + if (doDrain) { + fluidStack.amount -= maxDrain; + setFluid(stack, fluidStack); + } + return new FluidStack(fluidStack, maxDrain); + } + + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List info, boolean b) { + super.addInformation(stack, player, info, b); + FluidStack fs = getFluid(stack); + if (fs != null) { + info.add(String.format("< %s, %d mB >", FluidRegistry.getFluidName(fs), fs.amount)); + } else { + info.add(String.format("< Empty, %d mB >", getCapacity(stack))); + } + info.add("Rightclick on air to set volume (only while empty)"); + } + + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs creativeTabs, List itemList) { + itemList.add(new ItemStack(this)); + for (Fluid fluid : FluidRegistry.getRegisteredFluids().values()) { + if (fluid != null) { + ItemStack stack = new ItemStack(this); + setCapacity(stack, getMaxCapacity()); + fill(stack, new FluidStack(fluid, Integer.MAX_VALUE), true); + itemList.add(stack); + } + } + } + + private boolean interactWithTank(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side) { + if (world.isRemote) { + return false; + } + TileEntity te = world.getTileEntity(x, y, z); + if (!(te instanceof IFluidHandler)) { + return false; + } + IFluidHandler handler = (IFluidHandler) te; + ForgeDirection dir = ForgeDirection.getOrientation(side); + FluidStack fs = this.getFluid(stack); + int capacity = getCapacity(stack); + if (fs != null && (!player.isSneaking() || fs.amount >= capacity)) { + int amount = handler.fill(dir, fs, false); + if (amount > 0) { + fs = LiquidUtil.drainContainerStack(stack, player, amount, false); + if (fs != null && fs.amount > 0) { + handler.fill(dir, fs, true); + } + } + } else { + int amount = fs == null ? capacity : capacity - fs.amount; + FluidStack input = handler.drain(dir, amount, false); + if (input != null && input.amount > 0) { + amount = LiquidUtil.fillContainerStack(stack, player, input, false); + if (amount > 0) { + handler.drain(dir, amount, true); + } + } + } + return true; + } + + private boolean collectFluidBlock(ItemStack stack, EntityPlayer player, World world, int x, int y, int z) { + Block block = world.getBlock(x, y, z); + if (block instanceof IFluidBlock) { + IFluidBlock liquid = (IFluidBlock) block; + if (liquid.canDrain(world, x, y, z)) { + FluidStack fluid = liquid.drain(world, x, y, z, false); + int amount = fillContainerStack(stack, player, fluid, true); + if (amount == fluid.amount) { + fillContainerStack(stack, player, fluid, false); + liquid.drain(world, x, y, z, true); + return true; + } + } + } else if (world.getBlockMetadata(x, y, z) == 0) { + FluidStack fluid = null; + if (block != Blocks.water && block != Blocks.flowing_water) { + if (block == Blocks.lava || block == Blocks.flowing_lava) { + fluid = new FluidStack(FluidRegistry.LAVA, 1000); + } + } else { + fluid = new FluidStack(FluidRegistry.WATER, 1000); + } + + if (fluid != null) { + int amount = fillContainerStack(stack, player, fluid, true); + if (amount == fluid.amount) { + fillContainerStack(stack, player, fluid, false); + world.setBlockToAir(x, y, z); + return true; + } + } + } + return false; + } +} \ No newline at end of file diff --git a/src/main/java/gregtech/common/net/MessageSetFlaskCapacity.java b/src/main/java/gregtech/common/net/MessageSetFlaskCapacity.java new file mode 100644 index 0000000000..c20b4002c3 --- /dev/null +++ b/src/main/java/gregtech/common/net/MessageSetFlaskCapacity.java @@ -0,0 +1,42 @@ +package gregtech.common.net; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import gregtech.common.items.GT_VolumetricFlask; +import io.netty.buffer.ByteBuf; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public final class MessageSetFlaskCapacity implements IMessage { + private int capacity; + + public MessageSetFlaskCapacity() { + } + + public MessageSetFlaskCapacity(int capacity) { + this.capacity = capacity; + } + + + public void fromBytes(ByteBuf buf) { + this.capacity = buf.readInt(); + } + + public void toBytes(ByteBuf buf) { + buf.writeInt(this.capacity); + } + + public static final class Handler + implements IMessageHandler { + public IMessage onMessage(MessageSetFlaskCapacity message, MessageContext ctx) { + ItemStack stack = ctx.getServerHandler().playerEntity.getHeldItem(); + if ((stack != null) && (stack.stackSize > 0)) { + Item item = stack.getItem(); + if ((item instanceof GT_VolumetricFlask)) + ((GT_VolumetricFlask) item).setCapacity(stack, message.capacity); + } + return null; + } + } +} \ No newline at end of file diff --git a/src/main/java/gregtech/common/render/GT_FlaskRenderer.java b/src/main/java/gregtech/common/render/GT_FlaskRenderer.java new file mode 100644 index 0000000000..8b1f505314 --- /dev/null +++ b/src/main/java/gregtech/common/render/GT_FlaskRenderer.java @@ -0,0 +1,89 @@ +package gregtech.common.render; + +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.common.items.GT_VolumetricFlask; +import ic2.core.util.DrawUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.MinecraftForgeClient; +import net.minecraftforge.fluids.FluidStack; +import org.lwjgl.opengl.GL11; + +@SideOnly(cpw.mods.fml.relauncher.Side.CLIENT) +public final class GT_FlaskRenderer implements net.minecraftforge.client.IItemRenderer { + public GT_FlaskRenderer() { + MinecraftForgeClient.registerItemRenderer(ItemList.VOLUMETRIC_FLASK.getItem(), this); + } + + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + return type != ItemRenderType.FIRST_PERSON_MAP; + } + + + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, IItemRenderer.ItemRendererHelper helper) { + return type == ItemRenderType.ENTITY; + } + + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + GT_VolumetricFlask cell = (GT_VolumetricFlask) item.getItem(); + IIcon icon = item.getIconIndex(); + GL11.glEnable(3042); + GL11.glEnable(3008); + if (type.equals(ItemRenderType.ENTITY)) { + GL11.glRotated(180.0D, 0.0D, 0.0D, 1.0D); + GL11.glRotated(90.0D, 0.0D, 1.0D, 0.0D); + GL11.glTranslated(-0.5D, -0.6D, 0.0D); + } else if (type.equals(ItemRenderType.EQUIPPED_FIRST_PERSON)) { + GL11.glTranslated(1.0D, 1.0D, 0.0D); + GL11.glRotated(180.0D, 0.0D, 0.0D, 1.0D); + } else if (type.equals(ItemRenderType.EQUIPPED)) { + GL11.glRotated(180.0D, 0.0D, 0.0D, 1.0D); + GL11.glTranslated(-1.0D, -1.0D, 0.0D); + } + + FluidStack fs = cell.getFluid(item); + if (fs != null) { + IIcon iconWindow = cell.iconWindow; + IIcon fluidicon = fs.getFluid().getIcon(fs); + int fluidColor = fs.getFluid().getColor(fs); + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + GL11.glBlendFunc(0, 1); + if (type.equals(ItemRenderType.INVENTORY)) { + DrawUtil.renderIcon(iconWindow, 16.0D, 0.0D, 0.0F, 0.0F, -1.0F); + } else { + DrawUtil.renderIcon(iconWindow, 1.0D, -0.001D, 0.0F, 0.0F, 1.0F); + DrawUtil.renderIcon(iconWindow, 1.0D, -0.0615D, 0.0F, 0.0F, -1.0F); + } + + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture); + GL11.glBlendFunc(770, 771); + GL11.glDepthFunc(514); + GL11.glColor3ub((byte) (fluidColor >> 16), (byte) (fluidColor >> 8), (byte) fluidColor); + if (type.equals(ItemRenderType.INVENTORY)) { + DrawUtil.renderIcon(fluidicon, 16.0D, 0.0D, 0.0F, 0.0F, -1.0F); + } else { + DrawUtil.renderIcon(fluidicon, 1.0D, -0.001D, 0.0F, 0.0F, 1.0F); + DrawUtil.renderIcon(fluidicon, 1.0D, -0.0615D, 0.0F, 0.0F, -1.0F); + } + + GL11.glColor3ub((byte) -1, (byte) -1, (byte) -1); + GL11.glDepthFunc(515); + } + + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + GL11.glBlendFunc(770, 771); + if (type.equals(ItemRenderType.INVENTORY)) { + DrawUtil.renderIcon(icon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F); + } else { + ItemRenderer.renderItemIn2D(Tessellator.instance, icon.getMaxU(), icon.getMinV(), icon.getMinU(), icon.getMaxV(), icon.getIconWidth(), icon.getIconHeight(), 0.0625F); + } + GL11.glDisable(3008); + GL11.glDisable(3042); + } +} \ No newline at end of file -- cgit From aa079e3a7186c0b731d03ba735bc7a02e053ef09 Mon Sep 17 00:00:00 2001 From: UhoMazino <32494642+UhoMazino@users.noreply.github.com> Date: Sun, 9 Dec 2018 18:43:20 +0300 Subject: Fix maintenance cover (#1496) * New public variable init Initiated new public variable which is calculate how much damage get turbine rotor per time, its needed to compare with actual rotor durability. * Fix cover logic Rewrited due a bug maintenance cover logic which is check turbine rotor needed maintenance or not. * Added&rewrited some features for need maintenance. Added new high accuracy mod for need maintenance cover which check rotor state. Fixed old version low accuracy mod. * redo older changes removed variable * fix some shit forgot brakets * Cleanup & reformat code thanks Dimach for help with that --- .../common/covers/GT_Cover_NeedMaintainance.java | 110 +++++++++++++-------- 1 file changed, 69 insertions(+), 41 deletions(-) (limited to 'src/main/java/gregtech/common') diff --git a/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java b/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java index e61324ff44..3316b204dc 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java @@ -7,13 +7,16 @@ import gregtech.api.items.GT_MetaGenerated_Tool; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; -import gregtech.common.items.GT_MetaGenerated_Tool_01; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; public class GT_Cover_NeedMaintainance extends GT_CoverBehavior { + private boolean isRotor(ItemStack aRotor) { + return !(aRotor == null || !(aRotor.getItem() instanceof GT_MetaGenerated_Tool) || aRotor.getItemDamage() < 170 || aRotor.getItemDamage() > 176); + } + public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) { boolean needsRepair = false; if (aTileEntity instanceof IGregTechTileEntity) { @@ -23,31 +26,24 @@ public class GT_Cover_NeedMaintainance extends GT_CoverBehavior { GT_MetaTileEntity_MultiBlockBase multi = (GT_MetaTileEntity_MultiBlockBase) mTileEntity; int ideal = multi.getIdealStatus(); int real = multi.getRepairStatus(); - if ((aCoverVariable == 0 || aCoverVariable == 1) && (ideal - real > 0)) { - needsRepair = true; - } - if ((aCoverVariable == 2 || aCoverVariable == 3) && (ideal - real > 1)) { - needsRepair = true; - } - if ((aCoverVariable == 4 || aCoverVariable == 5) && (ideal - real > 2)) { - needsRepair = true; - } - if ((aCoverVariable == 6 || aCoverVariable == 7) && (ideal - real > 3)) { - needsRepair = true; - } - if ((aCoverVariable == 8 || aCoverVariable == 9) && (ideal - real > 4)) { - needsRepair = true; - } - if(aCoverVariable == 10 || aCoverVariable == 11){ - if(multi.getRealInventory()[1]==null || multi.getRealInventory()[1].getItem()!=GT_MetaGenerated_Tool_01.INSTANCE && multi.getRealInventory()[1].getItemDamage()<170){needsRepair = true;} - else{ - ItemStack tTurbine = multi.getRealInventory()[1]; - long tMax = GT_MetaGenerated_Tool.getToolMaxDamage(tTurbine); - long tCur = GT_MetaGenerated_Tool.getToolDamage(tTurbine); - if(tCur < tMax*2/10) - needsRepair = true; - } - + ItemStack tRotor = multi.getRealInventory()[1]; + int coverVar = aCoverVariable >>> 1; + if (coverVar < 5) { + if (ideal - real > coverVar) + needsRepair = true; + } else if (coverVar == 5 || coverVar == 6) { + if (isRotor(tRotor)) { + long tMax = GT_MetaGenerated_Tool.getToolMaxDamage(tRotor); + long tCur = GT_MetaGenerated_Tool.getToolDamage(tRotor); + if (coverVar == 5) { + needsRepair = (tCur >= tMax * 8 / 10); + } else { + long mExpectedDamage = Math.round(Math.min(multi.mEUt / multi.damageFactorLow, Math.pow(multi.mEUt, multi.damageFactorHigh))); + needsRepair = tCur + mExpectedDamage * 2 >= tMax; + } + } else { + needsRepair = true; + } } } } @@ -61,21 +57,53 @@ public class GT_Cover_NeedMaintainance extends GT_CoverBehavior { } public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable = (aCoverVariable + (aPlayer.isSneaking()? -1 : 1)) % 12; - if(aCoverVariable <0){aCoverVariable = 11;} - switch(aCoverVariable) { - case 0: GT_Utility.sendChatToPlayer(aPlayer, trans("056", "Emit if 1 Maintenance Needed")); break; - case 1: GT_Utility.sendChatToPlayer(aPlayer, trans("057", "Emit if 1 Maintenance Needed(inverted)")); break; - case 2: GT_Utility.sendChatToPlayer(aPlayer, trans("058", "Emit if 2 Maintenance Needed")); break; - case 3: GT_Utility.sendChatToPlayer(aPlayer, trans("059", "Emit if 2 Maintenance Needed(inverted)")); break; - case 4: GT_Utility.sendChatToPlayer(aPlayer, trans("060", "Emit if 3 Maintenance Needed")); break; - case 5: GT_Utility.sendChatToPlayer(aPlayer, trans("061", "Emit if 3 Maintenance Needed(inverted)")); break; - case 6: GT_Utility.sendChatToPlayer(aPlayer, trans("062", "Emit if 4 Maintenance Needed")); break; - case 7: GT_Utility.sendChatToPlayer(aPlayer, trans("063", "Emit if 4 Maintenance Needed(inverted)")); break; - case 8: GT_Utility.sendChatToPlayer(aPlayer, trans("064", "Emit if 5 Maintenance Needed")); break; - case 9: GT_Utility.sendChatToPlayer(aPlayer, trans("065", "Emit if 5 Maintenance Needed(inverted)")); break; - case 10: GT_Utility.sendChatToPlayer(aPlayer, trans("066", "Emit if rotor needs maintenance")); break; - case 11: GT_Utility.sendChatToPlayer(aPlayer, trans("067", "Emit if rotor needs maintenance(inverted)")); break; + aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 14; + if (aCoverVariable < 0) { + aCoverVariable = 13; + } + switch (aCoverVariable) { + case 0: + GT_Utility.sendChatToPlayer(aPlayer, trans("056", "Emit if 1 Maintenance Needed")); + break; + case 1: + GT_Utility.sendChatToPlayer(aPlayer, trans("057", "Emit if 1 Maintenance Needed(inverted)")); + break; + case 2: + GT_Utility.sendChatToPlayer(aPlayer, trans("058", "Emit if 2 Maintenance Needed")); + break; + case 3: + GT_Utility.sendChatToPlayer(aPlayer, trans("059", "Emit if 2 Maintenance Needed(inverted)")); + break; + case 4: + GT_Utility.sendChatToPlayer(aPlayer, trans("060", "Emit if 3 Maintenance Needed")); + break; + case 5: + GT_Utility.sendChatToPlayer(aPlayer, trans("061", "Emit if 3 Maintenance Needed(inverted)")); + break; + case 6: + GT_Utility.sendChatToPlayer(aPlayer, trans("062", "Emit if 4 Maintenance Needed")); + break; + case 7: + GT_Utility.sendChatToPlayer(aPlayer, trans("063", "Emit if 4 Maintenance Needed(inverted)")); + break; + case 8: + GT_Utility.sendChatToPlayer(aPlayer, trans("064", "Emit if 5 Maintenance Needed")); + break; + case 9: + GT_Utility.sendChatToPlayer(aPlayer, trans("065", "Emit if 5 Maintenance Needed(inverted)")); + break; + case 10: + GT_Utility.sendChatToPlayer(aPlayer, trans("066", "Emit if rotor needs maintenance low accuracy mod")); + break; + case 11: + GT_Utility.sendChatToPlayer(aPlayer, trans("067", "Emit if rotor needs maintenance low accuracy mod(inverted)")); + break; + case 12: + GT_Utility.sendChatToPlayer(aPlayer, trans("068", "Emit if rotor needs maintenance high accuracy mod")); + break; + case 13: + GT_Utility.sendChatToPlayer(aPlayer, trans("069", "Emit if rotor needs maintenance high accuracy mod(inverted)")); + break; } return aCoverVariable; } -- cgit From 480408a7bfb63c176242172bab61a804105b440d Mon Sep 17 00:00:00 2001 From: YoungGT Date: Mon, 10 Dec 2018 07:16:02 +0800 Subject: cherry pick cd841ad39edfef8c4f32096416b0c68b98ccc96e Fix #1439 and #1456 (#1503) * Fix #1439 * Fix #1456 * mistake --- src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java | 4 ++-- src/main/java/gregtech/common/items/ItemComb.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src/main/java/gregtech/common') diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java index 042811eba5..d61e89dfac 100644 --- a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java +++ b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java @@ -347,10 +347,10 @@ public class GT_MetaGenerated_Item_01 extends GT_MetaGenerated_Item_X32 { addItemBehavior(32472, tBehaviour); addItemBehavior(32473, tBehaviour); - GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Phosphor, 1L), ItemList.Tool_Matches.get(1L, new Object[0]), 16, 16); GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Phosphorus, 1L), ItemList.Tool_Matches.get(1L, new Object[0]), 16, 16); - GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 4L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphor, 1L), ItemList.Tool_Matches.get(4L, new Object[0]), 64, 16); + GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.TricalciumPhosphate, 1L), ItemList.Tool_Matches.get(1L, new Object[0]), 16, 16); GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 4L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1L), ItemList.Tool_Matches.get(4L, new Object[0]), 64, 16); + GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 4L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1L), ItemList.Tool_Matches.get(4L, new Object[0]), 64, 16); GT_Values.RA.addBoxingRecipe(ItemList.Tool_Matches.get(16L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Paper, 1L), ItemList.Tool_MatchBox_Full.get(1L, new Object[0]), 64, 16); GT_Values.RA.addUnboxingRecipe(ItemList.Tool_MatchBox_Full.get(1L, new Object[0]), ItemList.Tool_Matches.get(16L, new Object[0]), null, 32, 16); diff --git a/src/main/java/gregtech/common/items/ItemComb.java b/src/main/java/gregtech/common/items/ItemComb.java index 91218763dd..fcf33eaa7d 100644 --- a/src/main/java/gregtech/common/items/ItemComb.java +++ b/src/main/java/gregtech/common/items/ItemComb.java @@ -210,7 +210,7 @@ public class ItemComb extends Item { addProcessLV(tComb, Materials.Talc, 90); addProcessLV(tComb, Materials.Apatite, 80); addProcessLV(tComb, Materials.Phosphate, 75); - addProcessLV(tComb, Materials.Phosphorus, 75); + addProcessLV(tComb, Materials.TricalciumPhosphate, 75); tComb = getStackForType(CombType.CERTUS); addProcessLV(tComb, Materials.CertusQuartz, 100); addProcessLV(tComb, Materials.Quartzite, 80); -- cgit From c48858a4fb345a663dfa6b0847eda18d9534a296 Mon Sep 17 00:00:00 2001 From: Dimach Date: Wed, 12 Dec 2018 10:06:55 +0200 Subject: Fix flask gui. --- src/main/java/gregtech/common/GT_Proxy.java | 4057 +++++++++++++-------------- 1 file changed, 2027 insertions(+), 2030 deletions(-) (limited to 'src/main/java/gregtech/common') diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java index 2486d4d241..20a936c761 100644 --- a/src/main/java/gregtech/common/GT_Proxy.java +++ b/src/main/java/gregtech/common/GT_Proxy.java @@ -1,2030 +1,2027 @@ -package gregtech.common; - -import cpw.mods.fml.common.*; -import cpw.mods.fml.common.eventhandler.Event.Result; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.TickEvent; -import cpw.mods.fml.common.network.FMLNetworkEvent; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.fml.common.network.NetworkRegistry; -import cpw.mods.fml.common.registry.GameRegistry; -import forestry.api.genetics.AlleleManager; -import forestry.apiculture.genetics.Bee; -import forestry.core.genetics.alleles.AlleleHelper; -import gregtech.api.GregTech_API; -import gregtech.api.enums.*; -import gregtech.api.enums.TC_Aspects.TC_AspectStack; -import gregtech.api.interfaces.IBlockOnWalkOver; -import gregtech.api.interfaces.IProjectileItem; -import gregtech.api.interfaces.internal.IGT_Mod; -import gregtech.api.interfaces.internal.IThaumcraftCompat; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.net.GT_Packet_Pollution; -import gregtech.api.objects.*; -import gregtech.api.util.*; -import gregtech.common.entities.GT_Entity_Arrow; -import gregtech.common.gui.GT_ContainerVolumetricFlask; -import gregtech.common.items.GT_MetaGenerated_Tool_01; -import gregtech.common.items.armor.ModularArmor_Item; -import gregtech.common.items.armor.gui.*; -import net.minecraft.block.Block; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.monster.EntityEnderman; -import net.minecraft.entity.monster.EntitySkeleton; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemBow; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.potion.Potion; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.DamageSource; -import net.minecraft.util.MathHelper; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.World; -import net.minecraft.world.WorldSettings.GameType; -import net.minecraft.world.gen.feature.WorldGenMinable; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.event.entity.EntityJoinWorldEvent; -import net.minecraftforge.event.entity.living.EnderTeleportEvent; -import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; -import net.minecraftforge.event.entity.player.ArrowLooseEvent; -import net.minecraftforge.event.entity.player.ArrowNockEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.event.terraingen.OreGenEvent; -import net.minecraftforge.event.world.BlockEvent; -import net.minecraftforge.event.world.ChunkDataEvent; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; -import net.minecraftforge.oredict.RecipeSorter; -import net.minecraftforge.oredict.ShapedOreRecipe; -import net.minecraftforge.oredict.ShapelessOreRecipe; -import org.apache.commons.lang3.text.WordUtils; - -import static gregtech.GT_Mod.GT_FML_LOGGER; - -import java.io.File; -import java.text.DateFormat; -import java.util.*; - -public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler { - private static final EnumSet PREVENTED_ORES = EnumSet.of(OreGenEvent.GenerateMinable.EventType.COAL, - new OreGenEvent.GenerateMinable.EventType[]{OreGenEvent.GenerateMinable.EventType.IRON, OreGenEvent.GenerateMinable.EventType.GOLD, - OreGenEvent.GenerateMinable.EventType.DIAMOND, OreGenEvent.GenerateMinable.EventType.REDSTONE, OreGenEvent.GenerateMinable.EventType.LAPIS, - OreGenEvent.GenerateMinable.EventType.QUARTZ}); - public final HashSet mRegisteredOres = new HashSet(10000); - public final ArrayList mSoundNames = new ArrayList(); - public final ArrayList mSoundItems = new ArrayList(); - public final ArrayList mSoundCounts = new ArrayList(); - private final Collection mEvents = new HashSet(); - private final Collection mIgnoredItems = new HashSet(Arrays.asList(new String[]{"itemGhastTear", "itemFlint", "itemClay", "itemBucketSaltWater", - "itemBucketFreshWater", "itemBucketWater", "itemRock", "itemReed", "itemArrow", "itemSaw", "itemKnife", "itemHammer", "itemChisel", "itemRubber", - "itemEssence", "itemIlluminatedPanel", "itemSkull", "itemRawRubber", "itemBacon", "itemJetpackAccelerator", "itemLazurite", "itemIridium", - "itemTear", "itemClaw", "itemFertilizer", "itemTar", "itemSlimeball", "itemCoke", "itemBeeswax", "itemBeeQueen", "itemForcicium", "itemForcillium", - "itemRoyalJelly", "itemHoneydew", "itemHoney", "itemPollen", "itemReedTypha", "itemSulfuricAcid", "itemPotash", "itemCompressedCarbon", - "itemBitumen", "itemBioFuel", "itemCokeSugar", "itemCokeCactus", "itemCharcoalSugar", "itemCharcoalCactus", "itemSludge", "itemEnrichedAlloy", - "itemQuicksilver", "itemMercury", "itemOsmium", "itemUltimateCircuit", "itemEnergizedStar", "itemAntimatterMolecule", "itemAntimatterGlob", - "itemCoal", "itemBoat", "itemHerbalMedicineCake", "itemCakeSponge", "itemFishandPumpkinCakeSponge", "itemSoulCleaver", "itemInstantCake", - "itemWhippingCream", "itemGlisteningWhippingCream", "itemCleaver", "itemHerbalMedicineWhippingCream", "itemStrangeWhippingCream", - "itemBlazeCleaver", "itemBakedCakeSponge", "itemMagmaCake", "itemGlisteningCake", "itemOgreCleaver", "itemFishandPumpkinCake", - "itemMagmaWhippingCream", "itemMultimeter", "itemSuperconductor"})); - private final Collection mIgnoredNames = new HashSet(Arrays.asList(new String[]{"grubBee", "chainLink", "candyCane", "bRedString", "bVial", - "bFlask", "anorthositeSmooth", "migmatiteSmooth", "slateSmooth", "travertineSmooth", "limestoneSmooth", "orthogneissSmooth", "marbleSmooth", - "honeyDrop", "lumpClay", "honeyEqualssugar", "flourEqualswheat", "bluestoneInsulated", "blockWaterstone", "blockSand", "blockTorch", - "blockPumpkin", "blockClothRock", "blockStainedHardenedClay", "blockQuartzPillar", "blockQuartzChiselled", "blockSpawner", "blockCloth", "mobHead", - "mobEgg", "enderFlower", "enderChest", "clayHardened", "dayGemMaterial", "nightGemMaterial", "snowLayer", "bPlaceholder", "hardenedClay", - "eternalLifeEssence", "sandstone", "wheatRice", "transdimBlock", "bambooBasket", "lexicaBotania", "livingwoodTwig", "redstoneCrystal", - "pestleAndMortar", "glowstone", "whiteStone", "stoneSlab", "transdimBlock", "clayBowl", "clayPlate", "ceramicBowl", "ceramicPlate", "ovenRack", - "clayCup", "ceramicCup", "batteryBox", "transmutationStone", "torchRedstoneActive", "coal", "charcoal", "cloth", "cobblestoneSlab", - "stoneBrickSlab", "cobblestoneWall", "stoneBrickWall", "cobblestoneStair", "stoneBrickStair", "blockCloud", "blockDirt", "blockTyrian", - "blockCarpet", "blockFft", "blockLavastone", "blockHolystone", "blockConcrete", "sunnariumPart", "brSmallMachineCyaniteProcessor", "meteoriteCoal", - "blockCobble", "pressOreProcessor", "crusherOreProcessor", "grinderOreProcessor", "blockRubber", "blockHoney", "blockHoneydew", "blockPeat", - "blockRadioactive", "blockSlime", "blockCocoa", "blockSugarCane", "blockLeather", "blockClayBrick", "solarPanelHV", "cableRedNet", "stoneBowl", - "crafterWood", "taintedSoil", "brickXyEngineering", "breederUranium", "wireMill", "chunkLazurite", "aluminumNatural", "aluminiumNatural", - "naturalAluminum", "naturalAluminium", "antimatterMilligram", "antimatterGram", "strangeMatter", "coalGenerator", "electricFurnace", - "unfinishedTank", "valvePart", "aquaRegia", "leatherSeal", "leatherSlimeSeal", "hambone", "slimeball", "clay", "enrichedUranium", "camoPaste", - "antiBlock", "burntQuartz", "salmonRaw", "blockHopper", "blockEnderObsidian", "blockIcestone", "blockMagicWood", "blockEnderCore", "blockHeeEndium", - "oreHeeEndPowder", "oreHeeStardust", "oreHeeIgneousRock", "oreHeeInstabilityOrb", "crystalPureFluix", "shardNether", "gemFluorite", - "stickObsidian", "caveCrystal", "shardCrystal", "dyeCrystal","shardFire","shardWater","shardAir","shardEarth","ingotRefinedIron","blockMarble","ingotUnstable"})); - private final Collection mInvalidNames = new HashSet(Arrays.asList(new String[]{"diamondShard", "redstoneRoot", "obsidianStick", "bloodstoneOre", - "universalCable", "bronzeTube", "ironTube", "netherTube", "obbyTube", "infiniteBattery", "eliteBattery", "advancedBattery", "10kEUStore", - "blueDye", "MonazitOre", "quartzCrystal", "whiteLuminiteCrystal", "darkStoneIngot", "invisiumIngot", "demoniteOrb", "enderGem", "starconiumGem", - "osmoniumIngot", "tapaziteGem", "zectiumIngot", "foolsRubyGem", "rubyGem", "meteoriteGem", "adamiteShard", "sapphireGem", "copperIngot", - "ironStick", "goldStick", "diamondStick", "reinforcedStick", "draconicStick", "emeraldStick", "copperStick", "tinStick", "silverStick", - "bronzeStick", "steelStick", "leadStick", "manyullynStick", "arditeStick", "cobaltStick", "aluminiumStick", "alumiteStick", "oilsandsOre", - "copperWire", "superconductorWire", "sulfuricAcid", "conveyorBelt", "ironWire", "aluminumWire", "aluminiumWire", "silverWire", "tinWire", - "dustSiliconSmall", "AluminumOre", "plateHeavyT2", "blockWool", "alloyPlateEnergizedHardened", "gasWood", "alloyPlateEnergized", "SilverOre", - "LeadOre", "TinOre", "CopperOre", "silverOre", "leadOre", "tinOre", "copperOre", "bauxiteOre", "HSLivingmetalIngot", "oilMoving", "oilStill", - "oilBucket", "petroleumOre", "dieselFuel", "diamondNugget", "planks", "wood", "stick", "sticks", "naquadah", "obsidianRod", "stoneRod", - "thaumiumRod", "steelRod", "netherrackRod", "woodRod", "ironRod", "cactusRod", "flintRod", "copperRod", "cobaltRod", "alumiteRod", "blueslimeRod", - "arditeRod", "manyullynRod", "bronzeRod", "boneRod", "slimeRod", "redalloyBundled", "bluestoneBundled", "infusedteslatiteInsulated", - "redalloyInsulated", "infusedteslatiteBundled"})); - private final DateFormat mDateFormat = DateFormat.getInstance(); - public ArrayList mBufferedPlayerActivity = new ArrayList(); - public boolean mHardcoreCables = false; - public boolean mDisableVanillaOres = true; - public boolean mHardMachineCasings = true; - public boolean mAllowSmallBoilerAutomation = false; - public boolean mNerfDustCrafting = true; - public boolean mSortToTheEnd = true; - public boolean mCraftingUnification = true; - public boolean mInventoryUnification = true; - public boolean mIncreaseDungeonLoot = true; - public boolean mAxeWhenAdventure = true; - public boolean mSurvivalIntoAdventure = false; - public boolean mNerfedWoodPlank = true; - public boolean mNerfedVanillaTools = true; - public boolean mHardRock = false; - public boolean mHungerEffect = true; - public boolean mOnline = true; - public boolean mIgnoreTcon = true; - public boolean mDisableIC2Cables = false; - public boolean mAchievements = true; - public boolean mAE2Integration = true; - public boolean mArcSmeltIntoAnnealed = true; - public boolean mMagneticraftRecipes = true; - public boolean mImmersiveEngineeringRecipes = true; - private boolean isFirstServerWorldTick = true; - private boolean mOreDictActivated = false; - public boolean mChangeHarvestLevels=false; - public boolean mNerfedCombs = true; - public boolean mNerfedCrops = true; - public boolean mGTBees = true; - public boolean mHideUnusedOres = true; - public boolean mHideRecyclingRecipes = true; - public boolean mPollution = true; - public boolean mExplosionItemDrop = false; - public int mSkeletonsShootGTArrows = 16; - public int mMaxEqualEntitiesAtOneSpot = 3; - public int mFlintChance = 30; - public int mItemDespawnTime = 6000; - public int mUpgradeCount = 4; - public int[] mHarvestLevel= new int[1000]; - public int mGraniteHavestLevel=3; - public int mMaxHarvestLevel=7; - public int mWireHeatingTicks = 4; - public int mPollutionSmogLimit = 550000; - public int mPollutionPoisonLimit = 750000; - public int mPollutionVegetationLimit = 1000000; - public int mPollutionSourRainLimit = 2000000; - public final GT_UO_DimensionList mUndergroundOil = new GT_UO_DimensionList(); - public int mTicksUntilNextCraftSound = 0; - public double mMagneticraftBonusOutputPercent = 100.0d; - private World mUniverse = null; - private final String aTextThermalExpansion = "ThermalExpansion"; - private final String aTextRailcraft = "Railcraft"; - private final String aTextTwilightForest = "TwilightForest"; - private final String aTextForestry = "Forestry"; - private final String aTextArsmagica2 = "arsmagica2"; - public boolean mTEMachineRecipes = false; - public boolean mEnableAllMaterials = false; - public boolean mEnableAllComponents = false; - public boolean mAddGTRecipesToIC2Machines = true; - public boolean mEnableCleanroom = true; - public boolean mLowGravProcessing = false; - public boolean mAprilFool = false; - public boolean mCropNeedBlock = true; - public boolean mDisableOldChemicalRecipes = false; - public boolean mAMHInteraction = true; - public boolean mForceFreeFace = true; - public boolean mBrickedBlastFurnace = true; - public boolean mEasierIVPlusCables = false; - public boolean mMixedOreOnlyYieldsTwoThirdsOfPureOre = false; - public boolean enableBlackGraniteOres = true; - public boolean enableRedGraniteOres = true; - public boolean enableMarbleOres = true; - public boolean enableBasaltOres = true; - public boolean gt6Pipe = true; - public boolean gt6Cable = true; - public boolean ic2EnergySourceCompat = true; - public boolean costlyCableConnection = false; - - public GT_Proxy() { - GameRegistry.registerFuelHandler(this); - MinecraftForge.EVENT_BUS.register(this); - MinecraftForge.ORE_GEN_BUS.register(this); - FMLCommonHandler.instance().bus().register(this); - GregTech_API.sThaumcraftCompat = (IThaumcraftCompat) GT_Utility.callConstructor("gregtech.common.GT_ThaumcraftCompat", 0, null, GT_Values.D1, - new Object[0]); - for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) { - onFluidContainerRegistration(new FluidContainerRegistry.FluidContainerRegisterEvent(tData)); - } - try { - for (String tOreName : OreDictionary.getOreNames()) { - ItemStack tOreStack; - for (Iterator i$ = OreDictionary.getOres(tOreName).iterator(); i$.hasNext(); registerOre(new OreDictionary.OreRegisterEvent(tOreName, tOreStack))) { - tOreStack = (ItemStack) i$.next(); - } - } - } catch (Throwable e) {e.printStackTrace(GT_Log.err);} - } - - private static final void registerRecipes(OreDictEventContainer aOre) { - if ((aOre.mEvent.Ore == null) || (aOre.mEvent.Ore.getItem() == null)) { - return; - } - if (aOre.mEvent.Ore.stackSize != 1) { - aOre.mEvent.Ore.stackSize = 1; - } - if (aOre.mPrefix != null) { - if (!aOre.mPrefix.isIgnored(aOre.mMaterial)) { - aOre.mPrefix.processOre(aOre.mMaterial == null ? Materials._NULL : aOre.mMaterial, aOre.mEvent.Name, aOre.mModID, - GT_Utility.copyAmount(1L, new Object[]{aOre.mEvent.Ore})); - } - } else { -// GT_FML_LOGGER.info("Thingy Name: "+ aOre.mEvent.Name+ " !!!Unknown 'Thingy' detected!!! This Object seems to probably not follow a valid OreDictionary Convention, or I missed a Convention. Please report to GregTech Intergalactical for additional compatiblity. This is not an Error, an Issue nor a Lag Source, it is just an Information, which you should pass to me."); - } - } - - public void onPreLoad() { - GT_Log.out.println("GT_Mod: Preload-Phase started!"); - GT_Log.ore.println("GT_Mod: Preload-Phase started!"); - - GregTech_API.sPreloadStarted = true; - this.mIgnoreTcon