Merge branch '6.2.x' of github.com:BuildCraft/BuildCraft into 6.3.x

This commit is contained in:
asiekierka 2014-12-15 17:32:24 +01:00
commit bd52ca6981
34 changed files with 323 additions and 99 deletions

View file

@ -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";
}

View file

@ -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
*/

View file

@ -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.
*
* <p>
* Note that {@link IEnergyHandler} is an extension of this.
*
* @author King Lemming

View file

@ -4,7 +4,7 @@ import net.minecraft.item.ItemStack;
/**
* Implement this interface on Item classes that support external manipulation of their internal energy storages.
*
* <p>
* A reference implementation is provided {@link ItemEnergyContainer}.
*
* @author King Lemming

View file

@ -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.
*
* <p>
* 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);
}

View file

@ -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.
* <p>
* 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);
}

View file

@ -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.
* <p>
* 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);
}

View file

@ -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.<br>
* This is not to be implemented on TileEntities. This is for internal use only.
* <p>
* A reference implementation can be found at {@link EnergyStorage}.
*
* @author King Lemming

View file

@ -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) {

View file

@ -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]

View file

@ -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)

View file

@ -0,0 +1,2 @@
Additions:
* Updated to the new Redstone Flux API (asie)

View file

@ -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

View file

@ -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<? extends TileEntity> getPipeTile() {
Class<? extends TileEntity> tileClass;
if (Loader.isModLoaded("BuildCraft|Compat")) {
try {
tileClass = (Class<? extends TileEntity>) BCCompatHooks.class.getClassLoader().loadClass("buildcraft.transport.TileGenericPipeCompat");
} catch (Exception e) {
e.printStackTrace();
tileClass = TileGenericPipe.class;
}
} else {
tileClass = TileGenericPipe.class;
}
return tileClass;
}
}

View file

@ -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");

View file

@ -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;

View file

@ -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;
}
}

View file

@ -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;

View file

@ -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;

View file

@ -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);

View file

@ -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;

View file

@ -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;

View file

@ -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

View file

@ -149,6 +149,7 @@ public class CoreProxy implements ICoreProxy {
private WeakReference<EntityPlayer> 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<EntityPlayer>(player);

View file

@ -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;

View file

@ -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;

View file

@ -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));
}
}

View file

@ -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)) {

View file

@ -35,9 +35,7 @@ public class BlockMiningWell extends BlockBuildCraft {
setHardness(5F);
setResistance(10F);
// TODO: set proper sound
//setStepSound(soundStoneFootstep);
setStepSound(soundTypeStone);
}
@Override

View file

@ -43,8 +43,7 @@ public class BlockQuarry extends BlockBuildCraft {
setHardness(10F);
setResistance(10F);
// TODO: set proper sound
//setStepSound(soundAnvilFootstep);
setStepSound(soundTypeAnvil);
}
@Override

View file

@ -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()) {

View file

@ -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);
}

View file

@ -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() {

View file

@ -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");
}