From afe5e4efa5c30ee19ba1c1a806aca86a9a9b9ecd Mon Sep 17 00:00:00 2001 From: asiekierka Date: Sat, 13 Dec 2014 16:56:01 +0100 Subject: [PATCH 01/12] improve FluidUtils for BuildCraftCompat needs --- common/buildcraft/core/utils/FluidUtils.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/common/buildcraft/core/utils/FluidUtils.java b/common/buildcraft/core/utils/FluidUtils.java index 8ac31e44..658cb6ac 100644 --- a/common/buildcraft/core/utils/FluidUtils.java +++ b/common/buildcraft/core/utils/FluidUtils.java @@ -1,8 +1,12 @@ package buildcraft.core.utils; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidBlock; import net.minecraftforge.fluids.IFluidContainerItem; public final class FluidUtils { @@ -10,21 +14,30 @@ public final class FluidUtils { } - public static Fluid getFluidFromItemStack(ItemStack stack) { + public static FluidStack getFluidStackFromItemStack(ItemStack stack) { if (stack != null) { if (stack.getItem() instanceof IFluidContainerItem) { IFluidContainerItem ctr = (IFluidContainerItem) stack.getItem(); if (ctr.getFluid(stack) != null) { - return ctr.getFluid(stack).getFluid(); + return ctr.getFluid(stack); } } else if (FluidContainerRegistry.isFilledContainer(stack) && FluidContainerRegistry.getFluidForFilledItem(stack) != null) { - return FluidContainerRegistry.getFluidForFilledItem(stack).getFluid(); + return FluidContainerRegistry.getFluidForFilledItem(stack); + } else if (stack.getItem() instanceof ItemBlock) { + Block b = Block.getBlockFromItem(stack.getItem()); + if (b instanceof IFluidBlock) { + return new FluidStack(((IFluidBlock) b).getFluid(), 1000); + } } } return null; } + public static Fluid getFluidFromItemStack(ItemStack stack) { + return getFluidStackFromItemStack(stack).getFluid(); + } + public static boolean isFluidContainer(ItemStack stack) { return stack.getItem() instanceof IFluidContainerItem || FluidContainerRegistry.isFilledContainer(stack); } From 76c57b11b686d9c2b282ee15ab59aac8057c0c47 Mon Sep 17 00:00:00 2001 From: asiekierka Date: Sat, 13 Dec 2014 19:08:30 +0100 Subject: [PATCH 02/12] fix BuildCraftCompat pipe override --- common/buildcraft/BCCompatHooks.java | 50 +++++++++++++++++++ common/buildcraft/BuildCraftTransport.java | 13 +---- .../buildcraft/transport/TransportProxy.java | 3 +- 3 files changed, 54 insertions(+), 12 deletions(-) create mode 100644 common/buildcraft/BCCompatHooks.java diff --git a/common/buildcraft/BCCompatHooks.java b/common/buildcraft/BCCompatHooks.java new file mode 100644 index 00000000..453d494c --- /dev/null +++ b/common/buildcraft/BCCompatHooks.java @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft; + +import net.minecraft.tileentity.TileEntity; +import cpw.mods.fml.common.Loader; +import buildcraft.transport.BlockGenericPipe; +import buildcraft.transport.TileGenericPipe; + +public class BCCompatHooks { + public static BlockGenericPipe createPipeBlock() { + BlockGenericPipe genericPipeBlock; + + if (Loader.isModLoaded("BuildCraft|Compat")) { + try { + genericPipeBlock = (BlockGenericPipe) BCCompatHooks.class.getClassLoader().loadClass("buildcraft.transport.BlockGenericPipeCompat").newInstance(); + } catch (Exception e) { + e.printStackTrace(); + genericPipeBlock = new BlockGenericPipe(); + } + } else { + genericPipeBlock = new BlockGenericPipe(); + } + + return genericPipeBlock; + } + + public static Class getPipeTile() { + Class tileClass; + + if (Loader.isModLoaded("BuildCraft|Compat")) { + try { + tileClass = (Class) BCCompatHooks.class.getClassLoader().loadClass("buildcraft.transport.TileGenericPipeCompat"); + } catch (Exception e) { + e.printStackTrace(); + tileClass = TileGenericPipe.class; + } + } else { + tileClass = TileGenericPipe.class; + } + + return tileClass; + } +} diff --git a/common/buildcraft/BuildCraftTransport.java b/common/buildcraft/BuildCraftTransport.java index 77e7103f..66c12257 100644 --- a/common/buildcraft/BuildCraftTransport.java +++ b/common/buildcraft/BuildCraftTransport.java @@ -366,17 +366,8 @@ public class BuildCraftTransport extends BuildCraftMod { pipeWaterproof.setUnlocalizedName("pipeWaterproof"); CoreProxy.proxy.registerItem(pipeWaterproof); - if (Loader.isModLoaded("BuildCraft|Compat")) { - try { - genericPipeBlock = (BlockGenericPipe) this.getClass().getClassLoader().loadClass("buildcraft.transport.BlockGenericPipeCompat").newInstance(); - } catch (Exception e) { - e.printStackTrace(); - genericPipeBlock = new BlockGenericPipe(); - } - } else { - genericPipeBlock = new BlockGenericPipe(); - } - + genericPipeBlock = BCCompatHooks.createPipeBlock(); + CoreProxy.proxy.registerBlock(genericPipeBlock.setBlockName("pipeBlock"), ItemBlock.class); pipeItemsWood = buildPipe(PipeItemsWood.class, "Wooden Transport Pipe", CreativeTabBuildCraft.PIPES, "plankWood", Blocks.glass, "plankWood"); diff --git a/common/buildcraft/transport/TransportProxy.java b/common/buildcraft/transport/TransportProxy.java index 566a660c..7b52eaeb 100644 --- a/common/buildcraft/transport/TransportProxy.java +++ b/common/buildcraft/transport/TransportProxy.java @@ -11,6 +11,7 @@ package buildcraft.transport; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.registry.GameRegistry; +import buildcraft.BCCompatHooks; import buildcraft.BuildCraftTransport; public class TransportProxy { @@ -21,7 +22,7 @@ public class TransportProxy { public void registerTileEntities() { // The first name here is the current TE name; the remaining names are old names used for backwards compatibility - GameRegistry.registerTileEntityWithAlternatives(TileGenericPipe.class, "net.minecraft.src.buildcraft.transport.GenericPipe", "net.minecraft.src.buildcraft.GenericPipe", "net.minecraft.src.buildcraft.transport.TileGenericPipe"); + GameRegistry.registerTileEntityWithAlternatives(BCCompatHooks.getPipeTile(), "net.minecraft.src.buildcraft.transport.GenericPipe", "net.minecraft.src.buildcraft.GenericPipe", "net.minecraft.src.buildcraft.transport.TileGenericPipe"); GameRegistry.registerTileEntity(TileFilteredBuffer.class, "net.minecraft.src.buildcraft.transport.TileFilteredBuffer"); } From 9883e790c47a3d7eaaa29be953519363a7655314 Mon Sep 17 00:00:00 2001 From: asiekierka Date: Sat, 13 Dec 2014 19:32:16 +0100 Subject: [PATCH 03/12] fix blueprints over ~32k not working (#2289) --- .../builders/TileBlueprintLibrary.java | 60 +++++++++++++++---- 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/common/buildcraft/builders/TileBlueprintLibrary.java b/common/buildcraft/builders/TileBlueprintLibrary.java index 571ca8ec..66d89b3e 100644 --- a/common/buildcraft/builders/TileBlueprintLibrary.java +++ b/common/buildcraft/builders/TileBlueprintLibrary.java @@ -39,6 +39,7 @@ import buildcraft.core.utils.Utils; */ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory, ICommandReceiver { private static final int PROGRESS_TIME = 100; + private static final int CHUNK_SIZE = 16384; public SimpleInventory inv = new SimpleInventory(4, "Blueprint Library", 1); @@ -54,6 +55,9 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory, public int pageId = 0; + private BlueprintId blueprintDownloadId; + private byte[] blueprintDownload; + public TileBlueprintLibrary() { } @@ -261,16 +265,35 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory, if ("requestSelectedBlueprint".equals(command)) { if (isOutputConsistent()) { if (selected > -1 && selected < currentPage.size()) { + // Work around 32k max limit on client->server final BlueprintBase bpt = BuildCraftBuilders.clientDB .load(currentPage.get(selected)); + final byte[] bptData = bpt.getData(); + final int chunks = (bptData.length + CHUNK_SIZE - 1) / CHUNK_SIZE; - BuildCraftCore.instance.sendToServer(new PacketCommand(this, "uploadBlueprintToServer", + BuildCraftCore.instance.sendToServer(new PacketCommand(this, "uploadServerBegin", new CommandWriter() { - public void write(ByteBuf data) { - bpt.id.writeData(data); - Utils.writeByteArray(data, bpt.getData()); - } - })); + public void write(ByteBuf data) { + bpt.id.writeData(data); + data.writeShort(chunks); + } + })); + + for (int i = 0; i < chunks; i++) { + final int chunk = i; + final int start = CHUNK_SIZE * chunk; + final int length = Math.min(CHUNK_SIZE, bptData.length - start); + BuildCraftCore.instance.sendToServer(new PacketCommand(this, "uploadServerChunk", + new CommandWriter() { + public void write(ByteBuf data) { + data.writeShort(chunk); + data.writeShort(length); + data.writeBytes(bptData, start, length); + } + })); + } + + BuildCraftCore.instance.sendToServer(new PacketCommand(this, "uploadServerEnd", null)); } else { BuildCraftCore.instance.sendToServer(new PacketCommand(this, "uploadNothingToServer", null)); } @@ -298,15 +321,24 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory, setInventorySlotContents(2, null); downloadingPlayer = null; - } else if ("uploadBlueprintToServer".equals(command)) { - BlueprintId id = new BlueprintId(); - id.readData(stream); - byte[] data = Utils.readByteArray(stream); + } else if ("uploadServerBegin".equals(command)) { + blueprintDownloadId = new BlueprintId(); + blueprintDownloadId.readData(stream); + blueprintDownload = new byte[CHUNK_SIZE * stream.readUnsignedShort()]; + } else if ("uploadServerChunk".equals(command)) { + int start = stream.readUnsignedShort() * CHUNK_SIZE; + int length = stream.readUnsignedShort(); + if (blueprintDownload != null) { + stream.readBytes(blueprintDownload, start, length); + } else { + stream.skipBytes(length); + } + } else if ("uploadServerEnd".equals(command)) { try { - NBTTagCompound nbt = CompressedStreamTools.func_152457_a(data, NBTSizeTracker.field_152451_a); + NBTTagCompound nbt = CompressedStreamTools.func_152457_a(blueprintDownload, NBTSizeTracker.field_152451_a); BlueprintBase bpt = BlueprintBase.loadBluePrint(nbt); - bpt.setData(data); - bpt.id = id; + bpt.setData(blueprintDownload); + bpt.id = blueprintDownloadId; BuildCraftBuilders.serverDB.add(bpt); setInventorySlotContents(3, bpt.getStack()); @@ -315,6 +347,8 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory, e.printStackTrace(); } + blueprintDownloadId = null; + blueprintDownload = null; downloadingPlayer = null; } } From 516c680b91dc386c7c18d116701af55fbb97480f Mon Sep 17 00:00:00 2001 From: asiekierka Date: Sun, 14 Dec 2014 16:05:23 +0100 Subject: [PATCH 04/12] fix two minor bugs and restore block step sounds --- common/buildcraft/core/BlockSpring.java | 4 +--- .../buildcraft/core/blueprints/RecursiveBlueprintBuilder.java | 2 +- common/buildcraft/core/proxy/CoreProxy.java | 1 + common/buildcraft/core/utils/WorldPropertyIsLeaf.java | 2 +- common/buildcraft/factory/BlockMiningWell.java | 4 +--- common/buildcraft/factory/BlockQuarry.java | 3 +-- 6 files changed, 6 insertions(+), 10 deletions(-) diff --git a/common/buildcraft/core/BlockSpring.java b/common/buildcraft/core/BlockSpring.java index 997c0f87..95ff6306 100644 --- a/common/buildcraft/core/BlockSpring.java +++ b/common/buildcraft/core/BlockSpring.java @@ -53,9 +53,7 @@ public class BlockSpring extends Block { super(Material.rock); setBlockUnbreakable(); setResistance(6000000.0F); - - // TODO: set proper sound - //setStepSound(soundStoneFootstep); + setStepSound(soundTypeStone); disableStats(); setTickRandomly(true); diff --git a/common/buildcraft/core/blueprints/RecursiveBlueprintBuilder.java b/common/buildcraft/core/blueprints/RecursiveBlueprintBuilder.java index ff338dd9..59b71070 100755 --- a/common/buildcraft/core/blueprints/RecursiveBlueprintBuilder.java +++ b/common/buildcraft/core/blueprints/RecursiveBlueprintBuilder.java @@ -42,7 +42,7 @@ public class RecursiveBlueprintBuilder { public BptBuilderBase nextBuilder() { if (!returnedThis) { - blueprint.adjustToWorld(world, x, y, x, dir); + blueprint.adjustToWorld(world, x, y, z, dir); returnedThis = true; diff --git a/common/buildcraft/core/proxy/CoreProxy.java b/common/buildcraft/core/proxy/CoreProxy.java index e17fd73e..5796234f 100644 --- a/common/buildcraft/core/proxy/CoreProxy.java +++ b/common/buildcraft/core/proxy/CoreProxy.java @@ -149,6 +149,7 @@ public class CoreProxy implements ICoreProxy { private WeakReference createNewPlayer(WorldServer world, int x, int y, int z) { EntityPlayer player = FakePlayerFactory.get(world, BuildCraftCore.gameProfile); + player.posX = x; player.posY = y; player.posZ = z; return new WeakReference(player); diff --git a/common/buildcraft/core/utils/WorldPropertyIsLeaf.java b/common/buildcraft/core/utils/WorldPropertyIsLeaf.java index 83095790..11d5454a 100755 --- a/common/buildcraft/core/utils/WorldPropertyIsLeaf.java +++ b/common/buildcraft/core/utils/WorldPropertyIsLeaf.java @@ -27,7 +27,7 @@ public class WorldPropertyIsLeaf extends WorldProperty { if (block == null) { return false; } else { - ItemStack stack = new ItemStack(block); + ItemStack stack = new ItemStack(block, 1, meta); if (stack.getItem() != null) { for (int id : OreDictionary.getOreIDs(stack)) { diff --git a/common/buildcraft/factory/BlockMiningWell.java b/common/buildcraft/factory/BlockMiningWell.java index 6677681e..2b18183f 100644 --- a/common/buildcraft/factory/BlockMiningWell.java +++ b/common/buildcraft/factory/BlockMiningWell.java @@ -35,9 +35,7 @@ public class BlockMiningWell extends BlockBuildCraft { setHardness(5F); setResistance(10F); - - // TODO: set proper sound - //setStepSound(soundStoneFootstep); + setStepSound(soundTypeStone); } @Override diff --git a/common/buildcraft/factory/BlockQuarry.java b/common/buildcraft/factory/BlockQuarry.java index 60e152a3..1b6cd195 100644 --- a/common/buildcraft/factory/BlockQuarry.java +++ b/common/buildcraft/factory/BlockQuarry.java @@ -43,8 +43,7 @@ public class BlockQuarry extends BlockBuildCraft { setHardness(10F); setResistance(10F); - // TODO: set proper sound - //setStepSound(soundAnvilFootstep); + setStepSound(soundTypeAnvil); } @Override From 3913cb0f7c9b34d1a833ef2991dc1ed6d0ee64ea Mon Sep 17 00:00:00 2001 From: Hea3veN Date: Sun, 14 Dec 2014 10:09:16 -0300 Subject: [PATCH 05/12] allow robots to break blocks with hardness 0, fix #2198 --- common/buildcraft/core/robots/AIRobotBreak.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/common/buildcraft/core/robots/AIRobotBreak.java b/common/buildcraft/core/robots/AIRobotBreak.java index 3e1da4d1..bb4e53e3 100644 --- a/common/buildcraft/core/robots/AIRobotBreak.java +++ b/common/buildcraft/core/robots/AIRobotBreak.java @@ -55,14 +55,13 @@ public class AIRobotBreak extends AIRobot { @Override public void update() { - if (hardness == 0) { - // defensive code - terminate(); - return; + if (hardness != 0) { + blockDamage += speed / hardness / 30F; + } else { + // Instantly break the block + blockDamage = 1.1F; } - blockDamage += speed / hardness / 30F; - if (blockDamage > 1.0F) { robot.worldObj.destroyBlockInWorldPartially(robot.getEntityId(), blockToBreak.x, blockToBreak.y, blockToBreak.z, -1); From c4385cbbc8683831efb64581b0ebd9adbfe7f424 Mon Sep 17 00:00:00 2001 From: ganymedes01 Date: Mon, 8 Dec 2014 18:48:44 -0200 Subject: [PATCH 06/12] Various small rendering tweaks to robots See #2279 for details --- .../buildcraft/core/render/RenderRobot.java | 133 ++---------------- 1 file changed, 8 insertions(+), 125 deletions(-) diff --git a/common/buildcraft/core/render/RenderRobot.java b/common/buildcraft/core/render/RenderRobot.java index f36fafa1..c850d60a 100644 --- a/common/buildcraft/core/render/RenderRobot.java +++ b/common/buildcraft/core/render/RenderRobot.java @@ -12,23 +12,17 @@ import java.util.Date; import org.lwjgl.opengl.GL11; -import net.minecraft.block.Block; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; -import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; -import net.minecraft.init.Items; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.client.MinecraftForgeClient; import buildcraft.BuildCraftSilicon; import buildcraft.core.EntityLaser; @@ -72,7 +66,6 @@ public class RenderRobot extends Render implements IItemRenderer { private void doRender(EntityRobot robot, double x, double y, double z, float f, float f1) { GL11.glPushMatrix(); - GL11.glDisable(GL11.GL_LIGHTING); GL11.glTranslated(x, y, z); try { @@ -80,7 +73,6 @@ public class RenderRobot extends Render implements IItemRenderer { } catch (Exception e) { e.printStackTrace(); // TODO: Figure out why the NPE inside Minecraft happens. - GL11.glEnable(GL11.GL_LIGHTING); GL11.glPopMatrix(); return; } @@ -166,7 +158,6 @@ public class RenderRobot extends Render implements IItemRenderer { } - GL11.glEnable(GL11.GL_LIGHTING); GL11.glPopMatrix(); } @@ -182,144 +173,36 @@ public class RenderRobot extends Render implements IItemRenderer { } @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, - ItemRendererHelper helper) { - - if (helper == ItemRendererHelper.BLOCK_3D) { - return true; - } else { - return helper == ItemRendererHelper.INVENTORY_BLOCK; - } + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return true; } @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { - if (RenderManager.instance == null - || RenderManager.instance.renderEngine == null) { + if (RenderManager.instance == null || RenderManager.instance.renderEngine == null) { return; } - RenderBlocks renderBlocks = (RenderBlocks) data[0]; - GL11.glPushMatrix(); - GL11.glDisable(GL11.GL_LIGHTING); if (item.getItem() == BuildCraftSilicon.robotItem) { ItemRobot robot = (ItemRobot) item.getItem(); RenderManager.instance.renderEngine.bindTexture(robot.getTextureRobot(item)); } - float factor = (float) (1.0 / 16.0); - if (type == ItemRenderType.EQUIPPED_FIRST_PERSON) { - GL11.glTranslated(0.25F, 0.5F, 0); + GL11.glTranslated(-0.0, 1.0, 0.7); + } else if (type == ItemRenderType.ENTITY) { + GL11.glScaled(0.6, 0.6, 0.6); + } else if (type == ItemRenderType.INVENTORY) { + GL11.glScaled(1.5, 1.5, 1.5); } box.render(1F / 16F); - GL11.glEnable(GL11.GL_LIGHTING); GL11.glPopMatrix(); } - /** - * This is a refactor from the code of RenderPlayer. - */ - public void doRenderItemAtHand(EntityRobot robot, ItemStack currentItem) { - ItemStack itemstack1 = currentItem; - float f3, f5; - - if (itemstack1 != null) { - GL11.glPushMatrix(); - // this.modelBipedMain.bipedRightArm.postRender(0.0625F); - GL11.glTranslatef(-0.0625F, 0.4375F, 0.0625F); - - // if (par1AbstractClientPlayer.fishEntity != null) - // { - // itemstack1 = new ItemStack(Items.stick); - // } - - EnumAction enumaction = EnumAction.none; - - // if (par1AbstractClientPlayer.getItemInUseCount() > 0) - // { - // enumaction = itemstack1.getItemUseAction(); - // } - - IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(itemstack1, ItemRenderType.EQUIPPED); - boolean is3D = customRenderer != null && customRenderer.shouldUseRenderHelper(ItemRenderType.EQUIPPED, - itemstack1, - ItemRendererHelper.BLOCK_3D); - - if (is3D || itemstack1.getItem() instanceof ItemBlock - && RenderBlocks.renderItemIn3d(Block.getBlockFromItem(itemstack1.getItem()).getRenderType())) { - f3 = 0.5F; - GL11.glTranslatef(0.0F, 0.1875F, -0.3125F); - f3 *= 0.75F; - GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F); - GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); - GL11.glScalef(-f3, -f3, f3); - } else if (itemstack1.getItem() == Items.bow) { - f3 = 0.625F; - GL11.glTranslatef(0.0F, 0.125F, 0.3125F); - GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F); - GL11.glScalef(f3, -f3, f3); - GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F); - GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); - } else if (itemstack1.getItem().isFull3D()) { - f3 = 0.625F; - - if (itemstack1.getItem().shouldRotateAroundWhenRendering()) { - GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(0.0F, -0.125F, 0.0F); - } - - /* - * if (par1AbstractClientPlayer.getItemInUseCount() > 0 && - * enumaction == EnumAction.block) { GL11.glTranslatef(0.05F, - * 0.0F, -0.1F); GL11.glRotatef(-50.0F, 0.0F, 1.0F, 0.0F); - * GL11.glRotatef(-10.0F, 1.0F, 0.0F, 0.0F); - * GL11.glRotatef(-60.0F, 0.0F, 0.0F, 1.0F); } - */ - - GL11.glTranslatef(0.0F, 0.1875F, 0.0F); - GL11.glScalef(f3, -f3, f3); - GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F); - GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); - } else { - f3 = 0.375F; - GL11.glTranslatef(0.25F, 0.1875F, -0.1875F); - GL11.glScalef(f3, f3, f3); - GL11.glRotatef(60.0F, 0.0F, 0.0F, 1.0F); - GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F); - GL11.glRotatef(20.0F, 0.0F, 0.0F, 1.0F); - } - - float f4; - int k; - float f12; - - if (itemstack1.getItem().requiresMultipleRenderPasses()) { - for (k = 0; k < itemstack1.getItem().getRenderPasses(itemstack1.getItemDamage()); ++k) { - int i = itemstack1.getItem().getColorFromItemStack(itemstack1, k); - f12 = (i >> 16 & 255) / 255.0F; - f4 = (i >> 8 & 255) / 255.0F; - f5 = (i & 255) / 255.0F; - GL11.glColor4f(f12, f4, f5, 1.0F); - this.renderManager.itemRenderer.renderItem(robot, itemstack1, k); - } - } else { - k = itemstack1.getItem().getColorFromItemStack(itemstack1, 0); - float f11 = (k >> 16 & 255) / 255.0F; - f12 = (k >> 8 & 255) / 255.0F; - f4 = (k & 255) / 255.0F; - GL11.glColor4f(f11, f12, f4, 1.0F); - this.renderManager.itemRenderer.renderItem(robot, itemstack1, 0); - } - - GL11.glPopMatrix(); - } - } - private void doRenderItem(ItemStack stack, float light) { float renderScale = 0.5f; GL11.glPushMatrix(); From a6e9c4865d2597b74178e595810416645a6a2d6f Mon Sep 17 00:00:00 2001 From: ganymedes01 Date: Wed, 10 Dec 2014 18:29:58 -0200 Subject: [PATCH 07/12] Made robot lights shiny --- .../textures/entities/robot_overlay.png | Bin 0 -> 200 bytes .../buildcraft/core/render/RenderRobot.java | 79 +++++++++--------- 2 files changed, 40 insertions(+), 39 deletions(-) create mode 100644 buildcraft_resources/assets/buildcraft/textures/entities/robot_overlay.png diff --git a/buildcraft_resources/assets/buildcraft/textures/entities/robot_overlay.png b/buildcraft_resources/assets/buildcraft/textures/entities/robot_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..5003031bc4a06e6211b845aad2551e0c94a5661d GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQfx`y?k)`fL2$v|<&%LToCO|{ z#S9F5hd`K7RKu$QD9B#o>FdgVkB39lNPNPpMK(a8P)`@fkc@k8FKy&(a1dZQ@SJ;t zeYf#dwHz;l+Ur+b3?{PAJvnXfiyJ`=%a^GnXa9W5eC%4#Hr-_m2iQ|3jIPg$tL6VH oHLX_vb>SVk{dbvxCNiwIW<2%F&};IQL_ZMM)78&qol`;+0K(WqN&o-= literal 0 HcmV?d00001 diff --git a/common/buildcraft/core/render/RenderRobot.java b/common/buildcraft/core/render/RenderRobot.java index c850d60a..0dfe8f6b 100644 --- a/common/buildcraft/core/render/RenderRobot.java +++ b/common/buildcraft/core/render/RenderRobot.java @@ -14,23 +14,27 @@ import org.lwjgl.opengl.GL11; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; - import net.minecraftforge.client.IItemRenderer; - import buildcraft.BuildCraftSilicon; +import buildcraft.core.DefaultProps; import buildcraft.core.EntityLaser; import buildcraft.core.ItemRobot; import buildcraft.core.robots.EntityRobot; public class RenderRobot extends Render implements IItemRenderer { + private static final ResourceLocation overlay = new ResourceLocation("buildcraft", + DefaultProps.TEXTURE_PATH_ENTITIES + "/robot_overlay.png"); + private final EntityItem dummyEntityItem = new EntityItem(null); private final RenderItem customRenderItem; @@ -61,50 +65,38 @@ public class RenderRobot extends Render implements IItemRenderer { @Override public void doRender(Entity entity, double x, double y, double z, float f, float f1) { - doRender((EntityRobot) entity, x, y, z, f, f1); + doRender((EntityRobot) entity, x, y, z); } - private void doRender(EntityRobot robot, double x, double y, double z, float f, float f1) { + private void doRender(EntityRobot robot, double x, double y, double z) { GL11.glPushMatrix(); GL11.glTranslated(x, y, z); - - try { - renderManager.renderEngine.bindTexture(robot.getTexture()); - } catch (Exception e) { - e.printStackTrace(); - // TODO: Figure out why the NPE inside Minecraft happens. - GL11.glPopMatrix(); - return; - } - float factor = (float) (1.0 / 16.0); - - box.render(factor); if (robot.getStackInSlot(0) != null) { GL11.glPushMatrix(); GL11.glTranslatef(-0.125F, 0, -0.125F); - doRenderItem(robot.getStackInSlot(0), 1.0F); + doRenderItem(robot.getStackInSlot(0)); GL11.glPopMatrix(); } if (robot.getStackInSlot(1) != null) { GL11.glPushMatrix(); GL11.glTranslatef(+0.125F, 0, -0.125F); - doRenderItem(robot.getStackInSlot(1), 1.0F); + doRenderItem(robot.getStackInSlot(1)); GL11.glPopMatrix(); } if (robot.getStackInSlot(2) != null) { GL11.glPushMatrix(); GL11.glTranslatef(+0.125F, 0, +0.125F); - doRenderItem(robot.getStackInSlot(2), 1.0F); + doRenderItem(robot.getStackInSlot(2)); GL11.glPopMatrix(); } if (robot.getStackInSlot(3) != null) { GL11.glPushMatrix(); GL11.glTranslatef(-0.125F, 0, +0.125F); - doRenderItem(robot.getStackInSlot(3), 1.0F); + doRenderItem(robot.getStackInSlot(3)); GL11.glPopMatrix(); } @@ -129,22 +121,15 @@ public class RenderRobot extends Render implements IItemRenderer { if (itemstack1.getItem().requiresMultipleRenderPasses()) { for (int k = 0; k < itemstack1.getItem().getRenderPasses(itemstack1.getItemDamage()); ++k) { - int i = itemstack1.getItem().getColorFromItemStack(itemstack1, k); - float f12 = (i >> 16 & 255) / 255.0F; - float f4 = (i >> 8 & 255) / 255.0F; - float f5 = (i & 255) / 255.0F; - GL11.glColor4f(f12, f4, f5, 1.0F); + RenderUtils.setGLColorFromInt(itemstack1.getItem().getColorFromItemStack(itemstack1, k)); this.renderManager.itemRenderer.renderItem(robot, itemstack1, k); } } else { - int k = itemstack1.getItem().getColorFromItemStack(itemstack1, 0); - float f11 = (k >> 16 & 255) / 255.0F; - float f12 = (k >> 8 & 255) / 255.0F; - float f4 = (k & 255) / 255.0F; - GL11.glColor4f(f11, f12, f4, 1.0F); + RenderUtils.setGLColorFromInt(itemstack1.getItem().getColorFromItemStack(itemstack1, 0)); this.renderManager.itemRenderer.renderItem(robot, itemstack1, 0); } + GL11.glColor3f(1, 1, 1); GL11.glPopMatrix(); } @@ -154,12 +139,14 @@ public class RenderRobot extends Render implements IItemRenderer { robot.laser.head.z = robot.posZ; RenderLaser.doRenderLaser(renderManager.renderEngine, robot.laser, EntityLaser.LASER_TEXTURES [1]); - } else { - } + if (robot.getTexture() != null) { + renderManager.renderEngine.bindTexture(robot.getTexture()); + doRenderRobot(1F / 16F, renderManager.renderEngine); + } + GL11.glPopMatrix(); - } @Override @@ -191,19 +178,19 @@ public class RenderRobot extends Render implements IItemRenderer { } if (type == ItemRenderType.EQUIPPED_FIRST_PERSON) { - GL11.glTranslated(-0.0, 1.0, 0.7); + GL11.glTranslated(0.0, 1.0, 0.7); } else if (type == ItemRenderType.ENTITY) { GL11.glScaled(0.6, 0.6, 0.6); } else if (type == ItemRenderType.INVENTORY) { GL11.glScaled(1.5, 1.5, 1.5); } - - box.render(1F / 16F); - + + doRenderRobot(1F / 16F, RenderManager.instance.renderEngine); + GL11.glPopMatrix(); } - private void doRenderItem(ItemStack stack, float light) { + private void doRenderItem(ItemStack stack) { float renderScale = 0.5f; GL11.glPushMatrix(); GL11.glTranslatef(0, 0.28F, 0); @@ -212,7 +199,21 @@ public class RenderRobot extends Render implements IItemRenderer { customRenderItem.doRender(dummyEntityItem, 0, 0, 0, 0, 0); GL11.glPopMatrix(); - } + + private void doRenderRobot(float factor, TextureManager texManager) { + box.render(factor); + GL11.glPushMatrix(); + texManager.bindTexture(overlay); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); + GL11.glDepthMask(true); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 61680 % 65536, 61680 / 65536); + box.render(factor); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glPopMatrix(); + } } From 279372f6720eb3fde120ccf8102ae88196c48099 Mon Sep 17 00:00:00 2001 From: ganymedes01 Date: Thu, 11 Dec 2014 12:22:44 -0200 Subject: [PATCH 08/12] Disable lighting when rendering the shiny overlay --- common/buildcraft/core/render/RenderRobot.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/buildcraft/core/render/RenderRobot.java b/common/buildcraft/core/render/RenderRobot.java index 0dfe8f6b..9892ca0f 100644 --- a/common/buildcraft/core/render/RenderRobot.java +++ b/common/buildcraft/core/render/RenderRobot.java @@ -208,12 +208,14 @@ public class RenderRobot extends Render implements IItemRenderer { texManager.bindTexture(overlay); GL11.glEnable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_LIGHTING); GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); GL11.glDepthMask(true); OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 61680 % 65536, 61680 / 65536); box.render(factor); GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_LIGHTING); GL11.glPopMatrix(); } } From 87fffc2456b22a8072e387ee37a6130acf8ceda2 Mon Sep 17 00:00:00 2001 From: asiekierka Date: Sun, 14 Dec 2014 17:03:02 +0100 Subject: [PATCH 09/12] BuildCraft 6.2.5 --- build.gradle | 2 +- buildcraft_resources/changelog/6.2.5 | 24 +++++++++++++++++++ buildcraft_resources/versions.txt | 2 +- common/buildcraft/BCCompatHooks.java | 6 ++++- .../builders/HeuristicBlockDetection.java | 2 -- .../builders/gui/GuiBlueprintLibrary.java | 1 - .../commander/ContainerZonePlan.java | 5 ---- .../core/blueprints/SchematicRegistry.java | 1 - common/buildcraft/core/gui/GuiList.java | 12 ++++------ common/buildcraft/factory/BlockTank.java | 4 ++-- .../buildcraft/transport/TileGenericPipe.java | 3 +-- 11 files changed, 39 insertions(+), 23 deletions(-) create mode 100644 buildcraft_resources/changelog/6.2.5 diff --git a/build.gradle b/build.gradle index 87762012..3428b8c5 100755 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ apply plugin: 'forge' // adds the forge dependency apply plugin: 'maven' // for uploading to a maven repo apply plugin: 'checkstyle' -version = "6.2.4" +version = "6.2.5" group= "com.mod-buildcraft" archivesBaseName = "buildcraft" // the name that all artifacts will use as a base. artifacts names follow this pattern: [baseName]-[appendix]-[version]-[classifier].[extension] diff --git a/buildcraft_resources/changelog/6.2.5 b/buildcraft_resources/changelog/6.2.5 new file mode 100644 index 00000000..bffff51f --- /dev/null +++ b/buildcraft_resources/changelog/6.2.5 @@ -0,0 +1,24 @@ +Additions: +* [#2288] Heavily optimized Zone Planners (both in CPU and network usage) (asie) +* [#2270] Blueprint Libraries now refresh on GUI open (asie) +* Pipes can now be colored with any tool implementing the Forge recolourBlock API, for example IC2 Painters or AE2 Color Applicators (asie) +* Pipes can now have their color bleached with a water bucket (asie) +* List buttons now have descriptive tooltips (asie) +* Huge improvements to Robot rendering, especially at night (ganymedes01) +* Translation updates: German (Vexatos), Slovak (leSamo) + +Bugfixes: +* [#2298] Lists do not save settings (asie) +* [#2295] The Tank runs the onBlockActivated() also on the client side (asie) +* [#2289] Blueprints over ~32k do not work (asie) +* [#2243] Builder excavation broken (asie) +* Fluid blocks not autodetected correctly by Builder (asie) +* IFluidContainerItem logic broken (asie) +* Invalid coordinates for FakePlayers (asie) +* Mining Well, Quarry and Spring sounds not restored since 4.2.2 (asie) +* Minor blueprint bug (asie) + +Misc: +* Better color choice for Blueprint Library GUI (asie) +* Further preparations for BuildCraftCompat (asie) +* More detailed builder error messages (asie) diff --git a/buildcraft_resources/versions.txt b/buildcraft_resources/versions.txt index 9971fd5f..44734993 100755 --- a/buildcraft_resources/versions.txt +++ b/buildcraft_resources/versions.txt @@ -1,3 +1,3 @@ 1.6.4:BuildCraft:4.2.2 1.7.2:BuildCraft:6.0.16 -1.7.10:BuildCraft:6.2.4 +1.7.10:BuildCraft:6.2.5 diff --git a/common/buildcraft/BCCompatHooks.java b/common/buildcraft/BCCompatHooks.java index 453d494c..ae3b683a 100644 --- a/common/buildcraft/BCCompatHooks.java +++ b/common/buildcraft/BCCompatHooks.java @@ -13,7 +13,11 @@ import cpw.mods.fml.common.Loader; import buildcraft.transport.BlockGenericPipe; import buildcraft.transport.TileGenericPipe; -public class BCCompatHooks { +public final class BCCompatHooks { + private BCCompatHooks() { + + } + public static BlockGenericPipe createPipeBlock() { BlockGenericPipe genericPipeBlock; diff --git a/common/buildcraft/builders/HeuristicBlockDetection.java b/common/buildcraft/builders/HeuristicBlockDetection.java index db1a8c88..6acba8ee 100644 --- a/common/buildcraft/builders/HeuristicBlockDetection.java +++ b/common/buildcraft/builders/HeuristicBlockDetection.java @@ -5,8 +5,6 @@ import java.util.Iterator; import net.minecraft.block.Block; import net.minecraft.init.Blocks; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidBlock; import buildcraft.api.blueprints.SchematicBlock; diff --git a/common/buildcraft/builders/gui/GuiBlueprintLibrary.java b/common/buildcraft/builders/gui/GuiBlueprintLibrary.java index 993c8ff3..b79369ef 100644 --- a/common/buildcraft/builders/gui/GuiBlueprintLibrary.java +++ b/common/buildcraft/builders/gui/GuiBlueprintLibrary.java @@ -15,7 +15,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; import buildcraft.BuildCraftBuilders; -import buildcraft.BuildCraftCore; import buildcraft.builders.TileBlueprintLibrary; import buildcraft.builders.blueprints.BlueprintId; import buildcraft.builders.blueprints.BlueprintId.Kind; diff --git a/common/buildcraft/commander/ContainerZonePlan.java b/common/buildcraft/commander/ContainerZonePlan.java index 3fe56482..0ba49dce 100755 --- a/common/buildcraft/commander/ContainerZonePlan.java +++ b/common/buildcraft/commander/ContainerZonePlan.java @@ -8,11 +8,6 @@ */ package buildcraft.commander; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.IntBuffer; -import java.util.zip.Deflater; -import java.util.zip.Inflater; import io.netty.buffer.ByteBuf; import net.minecraft.block.material.MapColor; import net.minecraft.entity.player.EntityPlayer; diff --git a/common/buildcraft/core/blueprints/SchematicRegistry.java b/common/buildcraft/core/blueprints/SchematicRegistry.java index 521b5a07..45e72692 100644 --- a/common/buildcraft/core/blueprints/SchematicRegistry.java +++ b/common/buildcraft/core/blueprints/SchematicRegistry.java @@ -15,7 +15,6 @@ import java.util.HashSet; import net.minecraft.block.Block; import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Property; import buildcraft.api.blueprints.ISchematicRegistry; diff --git a/common/buildcraft/core/gui/GuiList.java b/common/buildcraft/core/gui/GuiList.java index ad6da86b..1a36b363 100755 --- a/common/buildcraft/core/gui/GuiList.java +++ b/common/buildcraft/core/gui/GuiList.java @@ -10,7 +10,6 @@ package buildcraft.core.gui; import net.minecraft.client.gui.GuiTextField; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -79,11 +78,6 @@ public class GuiList extends GuiAdvancedInterface { public int kind; private String desc; - @Override - public String getDescription() { - return desc; - } - public Button(GuiAdvancedInterface gui, int x, int y, int iLine, int iKind, String iDesc) { super(gui, x, y); @@ -92,6 +86,10 @@ public class GuiList extends GuiAdvancedInterface { desc = iDesc; } + @Override + public String getDescription() { + return desc; + } } public GuiList(EntityPlayer iPlayer) { @@ -176,7 +174,7 @@ public class GuiList extends GuiAdvancedInterface { private boolean isCarryingList() { ItemStack stack = mc.thePlayer.inventory.getItemStack(); - return (stack != null && stack.getItem() != null && stack.getItem() instanceof ItemList); + return stack != null && stack.getItem() != null && stack.getItem() instanceof ItemList; } @Override diff --git a/common/buildcraft/factory/BlockTank.java b/common/buildcraft/factory/BlockTank.java index 2214befe..5ca3ddb4 100644 --- a/common/buildcraft/factory/BlockTank.java +++ b/common/buildcraft/factory/BlockTank.java @@ -158,8 +158,8 @@ public class BlockTank extends BlockBuildCraft { IFluidContainerItem container = (IFluidContainerItem) current.getItem(); FluidStack liquid = container.getFluid(current); FluidStack tankLiquid = tank.getTankInfo(ForgeDirection.UNKNOWN)[0].fluid; - boolean mustDrain = (liquid == null || liquid.amount == 0); - boolean mustFill = (tankLiquid == null || tankLiquid.amount == 0); + boolean mustDrain = liquid == null || liquid.amount == 0; + boolean mustFill = tankLiquid == null || tankLiquid.amount == 0; if (mustDrain && mustFill) { // Both are empty, do nothing } else if (mustDrain || !entityplayer.isSneaking()) { diff --git a/common/buildcraft/transport/TileGenericPipe.java b/common/buildcraft/transport/TileGenericPipe.java index 55793e9e..71dd0980 100644 --- a/common/buildcraft/transport/TileGenericPipe.java +++ b/common/buildcraft/transport/TileGenericPipe.java @@ -53,7 +53,6 @@ import buildcraft.core.network.IGuiReturnHandler; import buildcraft.core.network.ISyncedTile; import buildcraft.core.network.PacketTileState; import buildcraft.core.robots.DockingStation; -import buildcraft.core.utils.ColorUtils; import buildcraft.core.utils.Utils; import buildcraft.transport.ItemFacade.FacadeState; import buildcraft.transport.gates.GateFactory; @@ -427,7 +426,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, } public int getItemMetadata() { - return (getColor() >= 0 ? (1 + getColor()) : 0); + return getColor() >= 0 ? (1 + getColor()) : 0; } public int getColor() { From fba2a37941676704622471adb13f268ce95fa02a Mon Sep 17 00:00:00 2001 From: asiekierka Date: Sun, 14 Dec 2014 22:25:56 +0100 Subject: [PATCH 10/12] BuildCraft 6.2.6, update RF API --- api/cofh/api/CoFHAPIProps.java | 2 +- api/cofh/api/energy/EnergyStorage.java | 4 +- api/cofh/api/energy/IEnergyConnection.java | 2 +- api/cofh/api/energy/IEnergyContainerItem.java | 2 +- api/cofh/api/energy/IEnergyHandler.java | 23 +++++++---- api/cofh/api/energy/IEnergyProvider.java | 38 +++++++++++++++++++ api/cofh/api/energy/IEnergyReceiver.java | 38 +++++++++++++++++++ api/cofh/api/energy/IEnergyStorage.java | 5 ++- api/cofh/api/energy/TileEnergyHandler.java | 9 +++-- build.gradle | 2 +- .../statements/DefaultTriggerProvider.java | 13 +++++-- .../core/statements/TriggerEnergy.java | 35 ++++++++++------- .../transport/PipeTransportPower.java | 22 ++++++++++- 13 files changed, 159 insertions(+), 36 deletions(-) create mode 100644 api/cofh/api/energy/IEnergyProvider.java create mode 100644 api/cofh/api/energy/IEnergyReceiver.java diff --git a/api/cofh/api/CoFHAPIProps.java b/api/cofh/api/CoFHAPIProps.java index be48ec3d..22096377 100644 --- a/api/cofh/api/CoFHAPIProps.java +++ b/api/cofh/api/CoFHAPIProps.java @@ -6,6 +6,6 @@ public class CoFHAPIProps { } - public static final String VERSION = "1.7.10R1.0.0"; + public static final String VERSION = "1.7.10R1.0.1"; } diff --git a/api/cofh/api/energy/EnergyStorage.java b/api/cofh/api/energy/EnergyStorage.java index b3383aeb..1674c189 100644 --- a/api/cofh/api/energy/EnergyStorage.java +++ b/api/cofh/api/energy/EnergyStorage.java @@ -87,8 +87,8 @@ public class EnergyStorage implements IEnergyStorage { } /** - * This function is included to allow for server -> client sync. Do not call this externally to the containing Tile Entity, as not all IEnergyHandlers are - * guaranteed to have it. + * This function is included to allow for server -> client sync. Do not call this externally to the containing Tile Entity, as not all IEnergyHandlers + * are guaranteed to have it. * * @param energy */ diff --git a/api/cofh/api/energy/IEnergyConnection.java b/api/cofh/api/energy/IEnergyConnection.java index 63faffb9..79bdf77a 100644 --- a/api/cofh/api/energy/IEnergyConnection.java +++ b/api/cofh/api/energy/IEnergyConnection.java @@ -5,7 +5,7 @@ import net.minecraftforge.common.util.ForgeDirection; /** * Implement this interface on TileEntities which should connect to energy transportation blocks. This is intended for blocks which generate energy but do not * accept it; otherwise just use IEnergyHandler. - * + *

* Note that {@link IEnergyHandler} is an extension of this. * * @author King Lemming diff --git a/api/cofh/api/energy/IEnergyContainerItem.java b/api/cofh/api/energy/IEnergyContainerItem.java index 0bcfda60..c28455b1 100644 --- a/api/cofh/api/energy/IEnergyContainerItem.java +++ b/api/cofh/api/energy/IEnergyContainerItem.java @@ -4,7 +4,7 @@ import net.minecraft.item.ItemStack; /** * Implement this interface on Item classes that support external manipulation of their internal energy storages. - * + *

* A reference implementation is provided {@link ItemEnergyContainer}. * * @author King Lemming diff --git a/api/cofh/api/energy/IEnergyHandler.java b/api/cofh/api/energy/IEnergyHandler.java index 3df31234..22f2dbc6 100644 --- a/api/cofh/api/energy/IEnergyHandler.java +++ b/api/cofh/api/energy/IEnergyHandler.java @@ -4,17 +4,19 @@ import net.minecraftforge.common.util.ForgeDirection; /** * Implement this interface on Tile Entities which should handle energy, generally storing it in one or more internal {@link IEnergyStorage} objects. - * + *

* A reference implementation is provided {@link TileEnergyHandler}. - * + * * @author King Lemming - * + * */ -public interface IEnergyHandler extends IEnergyConnection { +public interface IEnergyHandler extends IEnergyProvider, IEnergyReceiver { + + // merely a convenience interface (remove these methods in 1.8; provided here for back-compat via compiler doing things) /** - * Add energy to an IEnergyHandler, internal distribution is left entirely to the IEnergyHandler. - * + * Add energy to an IEnergyReceiver, internal distribution is left entirely to the IEnergyReceiver. + * * @param from * Orientation the energy is received from. * @param maxReceive @@ -23,11 +25,12 @@ public interface IEnergyHandler extends IEnergyConnection { * If TRUE, the charge will only be simulated. * @return Amount of energy that was (or would have been, if simulated) received. */ + @Override int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate); /** - * Remove energy from an IEnergyHandler, internal distribution is left entirely to the IEnergyHandler. - * + * Remove energy from an IEnergyProvider, internal distribution is left entirely to the IEnergyProvider. + * * @param from * Orientation the energy is extracted from. * @param maxExtract @@ -36,16 +39,20 @@ public interface IEnergyHandler extends IEnergyConnection { * If TRUE, the extraction will only be simulated. * @return Amount of energy that was (or would have been, if simulated) extracted. */ + @Override int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate); + /** * Returns the amount of energy currently stored. */ + @Override int getEnergyStored(ForgeDirection from); /** * Returns the maximum amount of energy that can be stored. */ + @Override int getMaxEnergyStored(ForgeDirection from); } diff --git a/api/cofh/api/energy/IEnergyProvider.java b/api/cofh/api/energy/IEnergyProvider.java new file mode 100644 index 00000000..05287b35 --- /dev/null +++ b/api/cofh/api/energy/IEnergyProvider.java @@ -0,0 +1,38 @@ +package cofh.api.energy; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Implement this interface on Tile Entities which should provide energy, generally storing it in one or more internal {@link IEnergyStorage} objects. + *

+ * A reference implementation is provided {@link TileEnergyHandler}. + * + * @author King Lemming + * + */ +public interface IEnergyProvider extends IEnergyConnection { + + /** + * Remove energy from an IEnergyProvider, internal distribution is left entirely to the IEnergyProvider. + * + * @param from + * Orientation the energy is extracted from. + * @param maxExtract + * Maximum amount of energy to extract. + * @param simulate + * If TRUE, the extraction will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) extracted. + */ + int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate); + + /** + * Returns the amount of energy currently stored. + */ + int getEnergyStored(ForgeDirection from); + + /** + * Returns the maximum amount of energy that can be stored. + */ + int getMaxEnergyStored(ForgeDirection from); + +} diff --git a/api/cofh/api/energy/IEnergyReceiver.java b/api/cofh/api/energy/IEnergyReceiver.java new file mode 100644 index 00000000..c726e09e --- /dev/null +++ b/api/cofh/api/energy/IEnergyReceiver.java @@ -0,0 +1,38 @@ +package cofh.api.energy; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Implement this interface on Tile Entities which should receive energy, generally storing it in one or more internal {@link IEnergyStorage} objects. + *

+ * A reference implementation is provided {@link TileEnergyHandler}. + * + * @author King Lemming + * + */ +public interface IEnergyReceiver extends IEnergyConnection { + + /** + * Add energy to an IEnergyReceiver, internal distribution is left entirely to the IEnergyReceiver. + * + * @param from + * Orientation the energy is received from. + * @param maxReceive + * Maximum amount of energy to receive. + * @param simulate + * If TRUE, the charge will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) received. + */ + int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate); + + /** + * Returns the amount of energy currently stored. + */ + int getEnergyStored(ForgeDirection from); + + /** + * Returns the maximum amount of energy that can be stored. + */ + int getMaxEnergyStored(ForgeDirection from); + +} diff --git a/api/cofh/api/energy/IEnergyStorage.java b/api/cofh/api/energy/IEnergyStorage.java index 1e84bc22..bc206560 100644 --- a/api/cofh/api/energy/IEnergyStorage.java +++ b/api/cofh/api/energy/IEnergyStorage.java @@ -1,8 +1,9 @@ package cofh.api.energy; /** - * An energy storage is the unit of interaction with Energy inventories. - * + * An energy storage is the unit of interaction with Energy inventories.
+ * This is not to be implemented on TileEntities. This is for internal use only. + *

* A reference implementation can be found at {@link EnergyStorage}. * * @author King Lemming diff --git a/api/cofh/api/energy/TileEnergyHandler.java b/api/cofh/api/energy/TileEnergyHandler.java index a7fabeb7..7cc655e9 100644 --- a/api/cofh/api/energy/TileEnergyHandler.java +++ b/api/cofh/api/energy/TileEnergyHandler.java @@ -6,9 +6,9 @@ import net.minecraftforge.common.util.ForgeDirection; /** * Reference implementation of {@link IEnergyHandler}. Use/extend this or implement your own. - * + * * @author King Lemming - * + * */ public class TileEnergyHandler extends TileEntity implements IEnergyHandler { @@ -28,25 +28,28 @@ public class TileEnergyHandler extends TileEntity implements IEnergyHandler { storage.writeToNBT(nbt); } - /* IEnergyHandler */ + /* IEnergyConnection */ @Override public boolean canConnectEnergy(ForgeDirection from) { return true; } + /* IEnergyReceiver */ @Override public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) { return storage.receiveEnergy(maxReceive, simulate); } + /* IEnergyProvider */ @Override public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) { return storage.extractEnergy(maxExtract, simulate); } + /* IEnergyReceiver and IEnergyProvider */ @Override public int getEnergyStored(ForgeDirection from) { diff --git a/build.gradle b/build.gradle index 3428b8c5..3207f5bb 100755 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ apply plugin: 'forge' // adds the forge dependency apply plugin: 'maven' // for uploading to a maven repo apply plugin: 'checkstyle' -version = "6.2.5" +version = "6.2.6" group= "com.mod-buildcraft" archivesBaseName = "buildcraft" // the name that all artifacts will use as a base. artifacts names follow this pattern: [baseName]-[appendix]-[version]-[classifier].[extension] diff --git a/common/buildcraft/core/statements/DefaultTriggerProvider.java b/common/buildcraft/core/statements/DefaultTriggerProvider.java index 8d581f3a..d1640eda 100644 --- a/common/buildcraft/core/statements/DefaultTriggerProvider.java +++ b/common/buildcraft/core/statements/DefaultTriggerProvider.java @@ -15,7 +15,10 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; +import cofh.api.energy.IEnergyConnection; import cofh.api.energy.IEnergyHandler; +import cofh.api.energy.IEnergyProvider; +import cofh.api.energy.IEnergyReceiver; import buildcraft.BuildCraftCore; import buildcraft.api.statements.IStatementContainer; import buildcraft.api.statements.ITriggerExternal; @@ -57,9 +60,13 @@ public class DefaultTriggerProvider implements ITriggerProvider { res.add(BuildCraftCore.triggerMachineInactive); } - if (tile instanceof IEnergyHandler && ((IEnergyHandler) tile).getMaxEnergyStored(side.getOpposite()) > 0) { - res.add((ITriggerExternal) BuildCraftCore.triggerEnergyHigh); - res.add((ITriggerExternal) BuildCraftCore.triggerEnergyLow); + if (tile instanceof IEnergyConnection && ((IEnergyConnection) tile).canConnectEnergy(side.getOpposite())) { + if ((tile instanceof IEnergyHandler && ((IEnergyHandler) tile).getMaxEnergyStored(side.getOpposite()) > 0) + || (tile instanceof IEnergyReceiver && ((IEnergyReceiver) tile).getMaxEnergyStored(side.getOpposite()) > 0) + || (tile instanceof IEnergyProvider && ((IEnergyProvider) tile).getMaxEnergyStored(side.getOpposite()) > 0)) { + res.add((ITriggerExternal) BuildCraftCore.triggerEnergyHigh); + res.add((ITriggerExternal) BuildCraftCore.triggerEnergyLow); + } } return res; diff --git a/common/buildcraft/core/statements/TriggerEnergy.java b/common/buildcraft/core/statements/TriggerEnergy.java index 50d9f487..a4527679 100644 --- a/common/buildcraft/core/statements/TriggerEnergy.java +++ b/common/buildcraft/core/statements/TriggerEnergy.java @@ -13,7 +13,10 @@ import net.minecraft.tileentity.TileEntity; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraftforge.common.util.ForgeDirection; +import cofh.api.energy.IEnergyConnection; import cofh.api.energy.IEnergyHandler; +import cofh.api.energy.IEnergyProvider; +import cofh.api.energy.IEnergyReceiver; import buildcraft.api.gates.IGate; import buildcraft.api.statements.IStatementContainer; import buildcraft.api.statements.IStatementParameter; @@ -36,13 +39,21 @@ public class TriggerEnergy extends BCStatement implements ITriggerInternal, ITri return StringUtils.localize("gate.trigger.machine.energyStored" + (high ? "High" : "Low")); } - private boolean isValidEnergyHandler(IEnergyHandler handler) { - return handler != null; - } + private boolean isTriggeredEnergyHandler(IEnergyConnection connection, ForgeDirection side) { + int energyStored, energyMaxStored; - private boolean isTriggeredEnergyHandler(IEnergyHandler handler, ForgeDirection side) { - int energyStored = handler.getEnergyStored(side); - int energyMaxStored = handler.getMaxEnergyStored(side); + if (connection instanceof IEnergyHandler) { + energyStored = ((IEnergyHandler) connection).getEnergyStored(side); + energyMaxStored = ((IEnergyHandler) connection).getMaxEnergyStored(side); + } else if (connection instanceof IEnergyProvider) { + energyStored = ((IEnergyProvider) connection).getEnergyStored(side); + energyMaxStored = ((IEnergyProvider) connection).getMaxEnergyStored(side); + } else if (connection instanceof IEnergyReceiver) { + energyStored = ((IEnergyReceiver) connection).getEnergyStored(side); + energyMaxStored = ((IEnergyReceiver) connection).getMaxEnergyStored(side); + } else { + return false; + } if (energyMaxStored > 0) { if (high) { @@ -58,9 +69,7 @@ public class TriggerEnergy extends BCStatement implements ITriggerInternal, ITri if (container instanceof IGate) { IGate gate = (IGate) container; if (gate.getPipe() instanceof IEnergyHandler) { - if (isValidEnergyHandler((IEnergyHandler) gate.getPipe())) { - return isTriggeredEnergyHandler((IEnergyHandler) gate.getPipe(), ForgeDirection.UNKNOWN); - } + return isTriggeredEnergyHandler((IEnergyHandler) gate.getPipe(), ForgeDirection.UNKNOWN); } } @@ -70,10 +79,10 @@ public class TriggerEnergy extends BCStatement implements ITriggerInternal, ITri @Override public boolean isTriggerActive(TileEntity tile, ForgeDirection side, IStatementContainer container, IStatementParameter[] parameters) { - if (tile instanceof IEnergyHandler) { - // Since we return false upon the trigger being invalid anyway, - // we can skip the isValidEnergyHandler(...) check. - return isTriggeredEnergyHandler((IEnergyHandler) tile, side.getOpposite()); + if (tile instanceof IEnergyHandler || tile instanceof IEnergyProvider || tile instanceof IEnergyReceiver) { + if (((IEnergyConnection) tile).canConnectEnergy(side.getOpposite())) { + return isTriggeredEnergyHandler((IEnergyConnection) tile, side.getOpposite()); + } } return false; diff --git a/common/buildcraft/transport/PipeTransportPower.java b/common/buildcraft/transport/PipeTransportPower.java index 97ca8233..fbc59c6e 100644 --- a/common/buildcraft/transport/PipeTransportPower.java +++ b/common/buildcraft/transport/PipeTransportPower.java @@ -17,6 +17,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import cofh.api.energy.IEnergyConnection; import cofh.api.energy.IEnergyHandler; +import cofh.api.energy.IEnergyReceiver; import buildcraft.BuildCraftCore; import buildcraft.BuildCraftTransport; import buildcraft.api.core.SafeTimeTracker; @@ -99,7 +100,7 @@ public class PipeTransportPower extends PipeTransport { // Disregard engines for this. return false; } - if (tile instanceof IEnergyHandler) { + if (tile instanceof IEnergyHandler || tile instanceof IEnergyReceiver) { IEnergyConnection handler = (IEnergyConnection) tile; if (handler.canConnectEnergy(side.getOpposite())) { return true; @@ -230,6 +231,16 @@ public class PipeTransportPower extends PipeTransport { } else if (tiles[out] instanceof IEnergyHandler) { IEnergyHandler handler = (IEnergyHandler) tiles[out]; + if (handler.canConnectEnergy(ForgeDirection.VALID_DIRECTIONS[out].getOpposite())) { + // Transmit power to an RF energy handler + + powerConsumed = handler.receiveEnergy(ForgeDirection.VALID_DIRECTIONS[out].getOpposite(), + powerConsumed, false); + tilePowered = true; + } + } else if (tiles[out] instanceof IEnergyReceiver) { + IEnergyReceiver handler = (IEnergyReceiver) tiles[out]; + if (handler.canConnectEnergy(ForgeDirection.VALID_DIRECTIONS[out].getOpposite())) { // Transmit power to an RF energy handler @@ -300,6 +311,15 @@ public class PipeTransportPower extends PipeTransport { if (handler.canConnectEnergy(dir.getOpposite())) { int request = handler.receiveEnergy(dir.getOpposite(), this.maxPower, true); + if (request > 0) { + requestEnergy(dir, request); + } + } + } else if (tile instanceof IEnergyReceiver) { + IEnergyReceiver handler = (IEnergyReceiver) tile; + if (handler.canConnectEnergy(dir.getOpposite())) { + int request = handler.receiveEnergy(dir.getOpposite(), this.maxPower, true); + if (request > 0) { requestEnergy(dir, request); } From ddf4c717dfb57c6e7ad20e01775dd263a0b78127 Mon Sep 17 00:00:00 2001 From: asiekierka Date: Sun, 14 Dec 2014 23:00:09 +0100 Subject: [PATCH 11/12] fix versions.txt --- buildcraft_resources/changelog/6.2.6 | 2 ++ buildcraft_resources/versions.txt | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 buildcraft_resources/changelog/6.2.6 diff --git a/buildcraft_resources/changelog/6.2.6 b/buildcraft_resources/changelog/6.2.6 new file mode 100644 index 00000000..82927c9b --- /dev/null +++ b/buildcraft_resources/changelog/6.2.6 @@ -0,0 +1,2 @@ +Additions: +* Updated to the new Redstone Flux API (asie) diff --git a/buildcraft_resources/versions.txt b/buildcraft_resources/versions.txt index 44734993..928bd2e1 100755 --- a/buildcraft_resources/versions.txt +++ b/buildcraft_resources/versions.txt @@ -1,3 +1,3 @@ 1.6.4:BuildCraft:4.2.2 1.7.2:BuildCraft:6.0.16 -1.7.10:BuildCraft:6.2.5 +1.7.10:BuildCraft:6.2.6 From 1d863e4718771227cbf3994418ba419c86e10c7e Mon Sep 17 00:00:00 2001 From: asiekierka Date: Sun, 14 Dec 2014 23:03:21 +0100 Subject: [PATCH 12/12] fix #2307 --- common/buildcraft/core/utils/FluidUtils.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/common/buildcraft/core/utils/FluidUtils.java b/common/buildcraft/core/utils/FluidUtils.java index 658cb6ac..5b539120 100644 --- a/common/buildcraft/core/utils/FluidUtils.java +++ b/common/buildcraft/core/utils/FluidUtils.java @@ -18,15 +18,12 @@ public final class FluidUtils { if (stack != null) { if (stack.getItem() instanceof IFluidContainerItem) { IFluidContainerItem ctr = (IFluidContainerItem) stack.getItem(); - if (ctr.getFluid(stack) != null) { - return ctr.getFluid(stack); - } - } else if (FluidContainerRegistry.isFilledContainer(stack) && - FluidContainerRegistry.getFluidForFilledItem(stack) != null) { + return ctr.getFluid(stack); + } else if (FluidContainerRegistry.isFilledContainer(stack)) { return FluidContainerRegistry.getFluidForFilledItem(stack); } else if (stack.getItem() instanceof ItemBlock) { Block b = Block.getBlockFromItem(stack.getItem()); - if (b instanceof IFluidBlock) { + if (b != null && b instanceof IFluidBlock && ((IFluidBlock) b).getFluid() != null) { return new FluidStack(((IFluidBlock) b).getFluid(), 1000); } } @@ -35,10 +32,11 @@ public final class FluidUtils { } public static Fluid getFluidFromItemStack(ItemStack stack) { - return getFluidStackFromItemStack(stack).getFluid(); + FluidStack fluidStack = getFluidStackFromItemStack(stack); + return fluidStack != null ? fluidStack.getFluid() : null; } public static boolean isFluidContainer(ItemStack stack) { - return stack.getItem() instanceof IFluidContainerItem || FluidContainerRegistry.isFilledContainer(stack); + return stack != null && stack.getItem() != null && (stack.getItem() instanceof IFluidContainerItem || FluidContainerRegistry.isFilledContainer(stack)); } }