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 87762012..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.4" +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/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/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 9971fd5f..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.4 +1.7.10:BuildCraft:6.2.6 diff --git a/common/buildcraft/BCCompatHooks.java b/common/buildcraft/BCCompatHooks.java new file mode 100644 index 00000000..ae3b683a --- /dev/null +++ b/common/buildcraft/BCCompatHooks.java @@ -0,0 +1,54 @@ +/** + * 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 final class BCCompatHooks { + private 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/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/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; } } 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/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/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/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/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/core/utils/FluidUtils.java b/common/buildcraft/core/utils/FluidUtils.java index 8ac31e44..5b539120 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,22 +14,29 @@ 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)) { + return FluidContainerRegistry.getFluidForFilledItem(stack); + } else if (stack.getItem() instanceof ItemBlock) { + Block b = Block.getBlockFromItem(stack.getItem()); + if (b != null && b instanceof IFluidBlock && ((IFluidBlock) b).getFluid() != null) { + return new FluidStack(((IFluidBlock) b).getFluid(), 1000); } - } else if (FluidContainerRegistry.isFilledContainer(stack) && - FluidContainerRegistry.getFluidForFilledItem(stack) != null) { - return FluidContainerRegistry.getFluidForFilledItem(stack).getFluid(); } } return null; } + public static Fluid getFluidFromItemStack(ItemStack stack) { + 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)); } } 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 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/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); } 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() { 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"); }