Merge branch 'development' into 1.8

Conflicts:
	src/main/java/mekanism/client/ClientTickHandler.java
	src/main/java/mekanism/common/item/ItemConfigurator.java
	src/main/java/mekanism/common/tile/TileEntityElectricPump.java
	src/main/java/mekanism/generators/client/gui/GuiSolarGenerator.java
This commit is contained in:
Aidan Brady 2014-08-07 12:29:43 -04:00
commit 81d3d53d76
19 changed files with 459 additions and 196 deletions

View file

@ -0,0 +1,83 @@
package mekanism.api;
import net.minecraft.server.MinecraftServer;
public class Range4D
{
public int dimensionId;
public int xMin;
public int yMin;
public int zMin;
public int xMax;
public int yMax;
public int zMax;
public Range4D(int minX, int minY, int minZ, int maxX, int maxY, int maxZ, int dimension)
{
xMin = minX;
yMin = minY;
zMin = minZ;
xMax = maxX;
yMax = maxY;
zMax = maxZ;
dimensionId = dimension;
}
public Range4D(Chunk3D chunk)
{
xMin = chunk.xCoord*16;
yMin = 0;
zMin = chunk.zCoord*16;
xMax = xMin+16;
}
public static Range4D getLoadedChunks(MinecraftServer server)
{
int range = server.getConfigurationManager().getViewDistance();
return null;
}
@Override
public Range4D clone()
{
return new Range4D(xMin, yMin, zMin, xMax, yMax, zMax, dimensionId);
}
@Override
public String toString()
{
return "[Range4D: " + xMin + ", " + yMin + ", " + zMin + ", " + xMax + ", " + yMax + ", " + zMax + ", dim=" + dimensionId + "]";
}
@Override
public boolean equals(Object obj)
{
return obj instanceof Range4D &&
((Range4D)obj).xMin == xMin &&
((Range4D)obj).yMin == yMin &&
((Range4D)obj).zMin == zMin &&
((Range4D)obj).xMax == xMax &&
((Range4D)obj).yMax == yMax &&
((Range4D)obj).zMax == zMax &&
((Range4D)obj).dimensionId == dimensionId;
}
@Override
public int hashCode()
{
int code = 1;
code = 31 * code + xMin;
code = 31 * code + yMin;
code = 31 * code + zMin;
code = 31 * code + xMax;
code = 31 * code + yMax;
code = 31 * code + zMax;
code = 31 * code + dimensionId;
return code;
}
}

View file

@ -45,14 +45,12 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
public GasNetwork(IGridTransmitter<GasNetwork>... varPipes)
{
transmitters.addAll(Arrays.asList(varPipes));
updateCapacity();
register();
}
public GasNetwork(Collection<IGridTransmitter<GasNetwork>> collection)
{
transmitters.addAll(collection);
updateCapacity();
register();
}
@ -97,8 +95,6 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
gasScale = getScale();
updateCapacity();
fullRefresh();
register();
}

View file

@ -12,6 +12,7 @@ import java.util.Set;
import mekanism.api.Coord4D;
import mekanism.api.IClientTicker;
import mekanism.common.Mekanism;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
@ -52,8 +53,20 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
{
Coord4D coord = Coord4D.get(transmitter.getTile()).getFromSide(side);
possibleAcceptors.remove(coord);
acceptorDirections.remove(coord.getTileEntity(transmitter.getTile().getWorldObj()));
if(possibleAcceptors.containsKey(coord))
{
clearIfNecessary(coord, transmitter, side.getOpposite());
}
}
}
protected void clearIfNecessary(Coord4D acceptor, IGridTransmitter<N> transmitter, ForgeDirection side)
{
if(acceptor.getTileEntity(getWorld()) == null || acceptor.getTileEntity(getWorld()).isInvalid() || transmitter.canConnectToAcceptor(side, true))
{
possibleAcceptors.remove(acceptor);
acceptorDirections.remove(acceptor.getTileEntity(getWorld()));
}
}
@ -92,14 +105,14 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
return packetRange;
}
public int getDimension()
public World getWorld()
{
if(getSize() == 0)
{
return 0;
return null;
}
return transmitters.iterator().next().getTile().getWorldObj().provider.dimensionId;
return transmitters.iterator().next().getTile().getWorldObj();
}
protected AxisAlignedBB genPacketRange()
@ -198,7 +211,8 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
return possibleAcceptors.size();
}
public synchronized void updateCapacity() {
public synchronized void updateCapacity()
{
updateMeanCapacity();
capacity = (int)meanCapacity * transmitters.size();
}

View file

@ -315,8 +315,15 @@ public class ClientTickHandler
{
if(!lastTickUpdate)
{
((ItemJetpack)jetpack.getItem()).incrementMode(jetpack);
Mekanism.packetHandler.sendToServer(new JetpackDataMessage(JetpackPacket.MODE, null, false));
if(mc.thePlayer.isSneaking())
{
((ItemJetpack)jetpack.getItem()).setMode(stack, JetpackMode.DISABLED);
}
else {
((ItemJetpack)jetpack.getItem()).incrementMode(jetpack);
}
Mekanism.packetHandler.sendToServer(new JetpackDataMessage(JetpackPacket.MODE, null, mc.thePlayer.isSneaking()));
SoundHandler.playSound("mekanism:etc.Hydraulic");
lastTickUpdate = true;
}

View file

@ -42,22 +42,15 @@ public class EnergyNetwork extends DynamicNetwork<TileEntity, EnergyNetwork>
public EnergyNetwork(IGridTransmitter<EnergyNetwork>... varCables)
{
transmitters.addAll(Arrays.asList(varCables));
updateCapacity();
register();
}
public EnergyNetwork(Collection<IGridTransmitter<EnergyNetwork>> collection)
{
transmitters.addAll(collection);
updateCapacity();
register();
}
public static double round(double d)
{
return Math.round(d * 10000)/10000;
}
public EnergyNetwork(Set<EnergyNetwork> networks)
{
for(EnergyNetwork net : networks)
@ -79,9 +72,13 @@ public class EnergyNetwork extends DynamicNetwork<TileEntity, EnergyNetwork>
}
}
fullRefresh();
register();
}
public static double round(double d)
{
return Math.round(d * 10000)/10000;
}
@Override
protected synchronized void updateMeanCapacity()

View file

@ -43,14 +43,12 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
public FluidNetwork(IGridTransmitter<FluidNetwork>... varPipes)
{
transmitters.addAll(Arrays.asList(varPipes));
updateCapacity();
register();
}
public FluidNetwork(Collection<IGridTransmitter<FluidNetwork>> collection)
{
transmitters.addAll(collection);
updateCapacity();
register();
}
@ -95,9 +93,6 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
fluidScale = getScale();
updateCapacity();
fullRefresh();
register();
}

View file

@ -118,7 +118,7 @@ import cpw.mods.fml.common.registry.GameRegistry;
*/
@Mod(modid = "Mekanism", name = "Mekanism", version = "8.0.0", guiFactory = "mekanism.client.gui.ConfigGuiFactory",
dependencies = "after:ForgeMultipart;after:BuildCraftAPI|power;after:BuildCraftAPI|tools;after:BuildCraftAPI|transport;after:IC2API;after:CoFHAPI|energy;after:ComputerCraft;after:Galacticraft API;" +
"after:MineFactoryReloaded;after:MetallurgyCore;after:EnderIO;after:ExtraUtilities;after:Railcraft")
"after:MineFactoryReloaded;after:MetallurgyCore;after:EnderIO;after:ExtraUtilities;after:Railcraft;after:Forestry")
public class Mekanism
{
/** Mekanism Packet Pipeline */
@ -1136,7 +1136,7 @@ public class Mekanism
public void onEnergyTransferred(EnergyTransferEvent event)
{
try {
packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.ENERGY, Coord4D.get((TileEntity)event.energyNetwork.transmitters.iterator().next()), event.power), event.energyNetwork.getDimension());
packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.ENERGY, Coord4D.get((TileEntity)event.energyNetwork.transmitters.iterator().next()), event.power), event.energyNetwork.getWorld().provider.dimensionId);
} catch(Exception e) {}
}
@ -1144,7 +1144,7 @@ public class Mekanism
public void onGasTransferred(GasTransferEvent event)
{
try {
packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.GAS, Coord4D.get((TileEntity)event.gasNetwork.transmitters.iterator().next()), event.transferType, event.didTransfer), event.gasNetwork.getDimension());
packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.GAS, Coord4D.get((TileEntity)event.gasNetwork.transmitters.iterator().next()), event.transferType, event.didTransfer), event.gasNetwork.getWorld().provider.dimensionId);
} catch(Exception e) {}
}
@ -1152,7 +1152,7 @@ public class Mekanism
public void onLiquidTransferred(FluidTransferEvent event)
{
try {
packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.FLUID, Coord4D.get((TileEntity)event.fluidNetwork.transmitters.iterator().next()), event.fluidType, event.didTransfer), event.fluidNetwork.getDimension());
packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.FLUID, Coord4D.get((TileEntity)event.fluidNetwork.transmitters.iterator().next()), event.fluidType, event.didTransfer), event.fluidNetwork.getWorld().provider.dimensionId);
} catch(Exception e) {}
}

View file

@ -803,4 +803,44 @@ public class BlockBasic extends Block
return super.shouldSideBeRendered(world, x, y, z, side);
}
}
@Override
public ForgeDirection[] getValidRotations(World world, int x, int y, int z)
{
TileEntity tile = world.getTileEntity(x, y, z);
ForgeDirection[] valid = new ForgeDirection[6];
if(tile instanceof TileEntityBasicBlock)
{
TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile;
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
{
if(basicTile.canSetFacing(dir.ordinal()))
{
valid[dir.ordinal()] = dir;
}
}
}
return valid;
}
@Override
public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis)
{
TileEntity tile = world.getTileEntity(x, y, z);
if(tile instanceof TileEntityBasicBlock)
{
TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile;
if(basicTile.canSetFacing(axis.ordinal()))
{
basicTile.setFacing((short)axis.ordinal());
return true;
}
}
return false;
}
}

View file

@ -13,10 +13,16 @@ import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import cpw.mods.fml.common.Optional.Interface;
import cpw.mods.fml.common.Optional.Method;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class BlockBounding extends Block
import dan200.computercraft.api.peripheral.IPeripheral;
import dan200.computercraft.api.peripheral.IPeripheralProvider;
@Interface(iface = "dan200.computercraft.api.peripheral.IPeripheralProvider", modid = "ComputerCraft")
public class BlockBounding extends Block implements IPeripheralProvider
{
public BlockBounding()
{
@ -52,11 +58,11 @@ public class BlockBounding extends Block
}
@Override
public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z)
public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest)
{
try {
TileEntityBoundingBlock tileEntity = (TileEntityBoundingBlock)world.getTileEntity(x, y, z);
return world.getBlock(tileEntity.mainX, tileEntity.mainY, tileEntity.mainZ).removedByPlayer(world, player, tileEntity.mainX, tileEntity.mainY, tileEntity.mainZ);
return world.getBlock(tileEntity.mainX, tileEntity.mainY, tileEntity.mainZ).removedByPlayer(world, player, tileEntity.mainX, tileEntity.mainY, tileEntity.mainZ, willHarvest);
} catch(Exception e) {
return false;
}
@ -122,4 +128,18 @@ public class BlockBounding extends Block
return null;
}
@Override
@Method(modid = "ComputerCraft")
public IPeripheral getPeripheral(World world, int x, int y, int z, int side)
{
TileEntity te = world.getTileEntity(x, y, z);
if(te != null && te instanceof IPeripheral)
{
return (IPeripheral)te;
}
return null;
}
}

View file

@ -15,7 +15,6 @@ import mekanism.common.tile.TileEntityBasicBlock;
import mekanism.common.tile.TileEntityElectricBlock;
import mekanism.common.tile.TileEntityEnergyCube;
import mekanism.common.util.MekanismUtils;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
@ -34,8 +33,11 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.tools.IToolWrench;
import dan200.computercraft.api.peripheral.IPeripheral;
import dan200.computercraft.api.peripheral.IPeripheralProvider;
import cpw.mods.fml.common.ModAPIManager;
import cpw.mods.fml.common.Optional.Interface;
import cpw.mods.fml.common.Optional.Method;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -47,7 +49,8 @@ import cpw.mods.fml.relauncher.SideOnly;
* @author AidanBrady
*
*/
public class BlockEnergyCube extends BlockContainer
@Interface(iface = "dan200.computercraft.api.peripheral.IPeripheralProvider", modid = "ComputerCraft")
public class BlockEnergyCube extends BlockContainer implements IPeripheralProvider
{
public IIcon[][] icons = new IIcon[256][256];
@ -322,4 +325,59 @@ public class BlockEnergyCube extends BlockContainer
{
return true;
}
@Override
public ForgeDirection[] getValidRotations(World world, int x, int y, int z)
{
TileEntity tile = world.getTileEntity(x, y, z);
ForgeDirection[] valid = new ForgeDirection[6];
if(tile instanceof TileEntityBasicBlock)
{
TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile;
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
{
if(basicTile.canSetFacing(dir.ordinal()))
{
valid[dir.ordinal()] = dir;
}
}
}
return valid;
}
@Override
public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis)
{
TileEntity tile = world.getTileEntity(x, y, z);
if(tile instanceof TileEntityBasicBlock)
{
TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile;
if(basicTile.canSetFacing(axis.ordinal()))
{
basicTile.setFacing((short)axis.ordinal());
return true;
}
}
return false;
}
@Override
@Method(modid = "ComputerCraft")
public IPeripheral getPeripheral(World world, int x, int y, int z, int side)
{
TileEntity te = world.getTileEntity(x, y, z);
if(te != null && te instanceof IPeripheral)
{
return (IPeripheral)te;
}
return null;
}
}

View file

@ -22,8 +22,8 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.tools.IToolWrench;
import cpw.mods.fml.common.ModAPIManager;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -236,4 +236,45 @@ public class BlockGasTank extends BlockContainer
return itemStack;
}
@Override
public ForgeDirection[] getValidRotations(World world, int x, int y, int z)
{
TileEntity tile = world.getTileEntity(x, y, z);
ForgeDirection[] valid = new ForgeDirection[6];
if(tile instanceof TileEntityBasicBlock)
{
TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile;
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
{
if(basicTile.canSetFacing(dir.ordinal()))
{
valid[dir.ordinal()] = dir;
}
}
}
return valid;
}
@Override
public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis)
{
TileEntity tile = world.getTileEntity(x, y, z);
if(tile instanceof TileEntityBasicBlock)
{
TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile;
if(basicTile.canSetFacing(axis.ordinal()))
{
basicTile.setFacing((short)axis.ordinal());
return true;
}
}
return false;
}
}

View file

@ -1294,4 +1294,45 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer
return null;
}
@Override
public ForgeDirection[] getValidRotations(World world, int x, int y, int z)
{
TileEntity tile = world.getTileEntity(x, y, z);
ForgeDirection[] valid = new ForgeDirection[6];
if(tile instanceof TileEntityBasicBlock)
{
TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile;
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
{
if(basicTile.canSetFacing(dir.ordinal()))
{
valid[dir.ordinal()] = dir;
}
}
}
return valid;
}
@Override
public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis)
{
TileEntity tile = world.getTileEntity(x, y, z);
if(tile instanceof TileEntityBasicBlock)
{
TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile;
if(basicTile.canSetFacing(axis.ordinal()))
{
basicTile.setFacing((short)axis.ordinal());
return true;
}
}
return false;
}
}

View file

@ -1,6 +1,7 @@
package mekanism.common.item;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
@ -13,6 +14,8 @@ import mekanism.common.network.PacketTileEntity.TileEntityMessage;
import mekanism.common.tile.TileEntityBasicBlock;
import mekanism.common.tile.TileEntityElectricChest;
import mekanism.common.util.MekanismUtils;
import net.minecraft.block.Block;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
@ -22,10 +25,11 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.tools.IToolWrench;
import cpw.mods.fml.common.Optional.Interface;
import cpw.mods.fml.common.Optional.Method;
import buildcraft.api.tools.IToolWrench;
@Interface(iface = "buildcraft.api.tools.IToolWrench", modid = "BuildCraftAPI|tools")
public class ItemConfigurator extends ItemEnergized implements IToolWrench
{
@ -62,23 +66,24 @@ public class ItemConfigurator extends ItemEnergized implements IToolWrench
@Override
public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
{
TileEntity tile = world.getTileEntity(x, y, z);
if(tile instanceof IConfigurable)
{
IConfigurable config = (IConfigurable)tile;
if(player.isSneaking())
{
config.onSneakRightClick(player, side);
}
else {
config.onRightClick(player, side);
}
}
if(!world.isRemote)
{
Block block = world.getBlock(x, y, z);
TileEntity tile = world.getTileEntity(x, y, z);
if(tile instanceof IConfigurable)
{
IConfigurable config = (IConfigurable)tile;
if(player.isSneaking())
{
config.onSneakRightClick(player, side);
}
else {
config.onRightClick(player, side);
}
}
if(getState(stack) == 0)
{
if(tile instanceof IInvConfiguration)
@ -171,27 +176,19 @@ public class ItemConfigurator extends ItemEnergized implements IToolWrench
}
else if(getState(stack) == 2)
{
if(tile instanceof TileEntityBasicBlock)
ForgeDirection axis = ForgeDirection.getOrientation(side);
List<ForgeDirection> l = Arrays.asList(block.getValidRotations(world, x, y, z));
if(!player.isSneaking() && l.contains(axis))
{
TileEntityBasicBlock basicBlock = (TileEntityBasicBlock)tile;
int newSide = basicBlock.facing;
if(!player.isSneaking())
{
newSide = side;
}
else {
newSide = ForgeDirection.OPPOSITES[side];
}
if(basicBlock.canSetFacing(newSide))
{
basicBlock.setFacing((short)newSide);
world.playSoundEffect(x, y, z, "random.click", 1.0F, 1.0F);
}
return true;
block.rotateBlock(world, x, y, z, axis);
}
else if(player.isSneaking() && l.contains(axis.getOpposite()))
{
block.rotateBlock(world, x, y, z, axis.getOpposite());
}
return true;
}
else if(getState(stack) == 3)
{

View file

@ -100,6 +100,8 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N>> extends Pa
if(connectedNets.size() == 0)
{
theNetwork = createNetworkFromSingleTransmitter((IGridTransmitter<N>)tile());
theNetwork.fullRefresh();
theNetwork.updateCapacity();
}
else if(connectedNets.size() == 1)
{
@ -113,6 +115,8 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N>> extends Pa
else {
theNetwork = createNetworkByMergingSet(connectedNets);
theNetwork.transmitters.add((IGridTransmitter<N>)tile());
theNetwork.fullRefresh();
theNetwork.updateCapacity();
}
}

View file

@ -134,7 +134,9 @@ public class PartUniversalCable extends PartTransmitter<EnergyNetwork> implement
super.refreshTransmitterNetwork();
if(MekanismUtils.useBuildCraft())
{
reconfigure();
}
}
@Override

View file

@ -4,6 +4,7 @@ import io.netty.buffer.ByteBuf;
import mekanism.common.Mekanism;
import mekanism.common.PacketHandler;
import mekanism.common.item.ItemJetpack;
import mekanism.common.item.ItemJetpack.JetpackMode;
import mekanism.common.network.PacketJetpackData.JetpackDataMessage;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
@ -39,7 +40,13 @@ public class PacketJetpackData implements IMessageHandler<JetpackDataMessage, IM
if(stack != null && stack.getItem() instanceof ItemJetpack)
{
((ItemJetpack)stack.getItem()).incrementMode(stack);
if(!message.value)
{
((ItemJetpack)stack.getItem()).incrementMode(stack);
}
else {
((ItemJetpack)stack.getItem()).setMode(stack, JetpackMode.DISABLED);
}
}
}
@ -58,11 +65,11 @@ public class PacketJetpackData implements IMessageHandler<JetpackDataMessage, IM
public JetpackDataMessage(JetpackPacket type, String name, boolean state)
{
packetType = type;
value = state;
if(packetType == JetpackPacket.UPDATE)
{
username = name;
value = state;
}
}
@ -71,7 +78,11 @@ public class PacketJetpackData implements IMessageHandler<JetpackDataMessage, IM
{
dataStream.writeInt(packetType.ordinal());
if(packetType == JetpackPacket.UPDATE)
if(packetType == JetpackPacket.MODE)
{
dataStream.writeBoolean(value);
}
else if(packetType == JetpackPacket.UPDATE)
{
PacketHandler.writeString(dataStream, username);
dataStream.writeBoolean(value);
@ -92,7 +103,16 @@ public class PacketJetpackData implements IMessageHandler<JetpackDataMessage, IM
{
packetType = JetpackPacket.values()[dataStream.readInt()];
if(packetType == JetpackPacket.FULL)
if(packetType == JetpackPacket.MODE)
{
value = dataStream.readBoolean();
}
else if(packetType == JetpackPacket.UPDATE)
{
username = PacketHandler.readString(dataStream);
value = dataStream.readBoolean();
}
else if(packetType == JetpackPacket.FULL)
{
Mekanism.jetpackOn.clear();
@ -103,11 +123,6 @@ public class PacketJetpackData implements IMessageHandler<JetpackDataMessage, IM
Mekanism.jetpackOn.add(PacketHandler.readString(dataStream));
}
}
else if(packetType == JetpackPacket.UPDATE)
{
username = PacketHandler.readString(dataStream);
value = dataStream.readBoolean();
}
}
}

View file

@ -45,9 +45,6 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I
/** The nodes that have full sources near them or in them */
public Set<Coord4D> recurringNodes = new HashSet<Coord4D>();
/** The nodes that have already been sucked up, but are held on to in order to remove dead blocks */
public Set<Coord4D> cleaningNodes = new HashSet<Coord4D>();
public TileEntityElectricPump()
{
super("ElectricPump", 10000);
@ -130,8 +127,6 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I
{
Mekanism.packetHandler.sendToAllAround(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())), Coord4D.get(this).getTargetPoint(50D));
}
clean(true);
}
}
@ -162,6 +157,7 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I
List<Coord4D> tempPumpList = Arrays.asList(recurringNodes.toArray(new Coord4D[recurringNodes.size()]));
Collections.shuffle(tempPumpList);
//First see if there are any fluid blocks touching the pump - if so, sucks and adds the location to the recurring list
for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS)
{
Coord4D wrapper = Coord4D.get(this).getFromSide(orientation);
@ -183,24 +179,8 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I
}
}
for(Coord4D wrapper : cleaningNodes)
{
if(MekanismUtils.isFluid(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord))
{
if(fluidTank.getFluid() != null && MekanismUtils.getFluid(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord).isFluidEqual(fluidTank.getFluid()))
{
if(take)
{
setEnergy(getEnergy() - usage.electricPumpUsage);
fluidTank.fill(MekanismUtils.getFluid(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord), true);
worldObj.setBlockToAir(wrapper.xCoord, wrapper.yCoord, wrapper.zCoord);
}
return true;
}
}
}
//Finally, go over the recurring list of nodes and see if there is a fluid block available to suck - if not, will iterate around the recurring block, attempt to suck,
//and then add the adjacent block to the recurring list
for(Coord4D wrapper : tempPumpList)
{
if(MekanismUtils.isFluid(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord))
@ -218,6 +198,7 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I
}
}
//Add all the blocks surrounding this recurring node to the recurring node list
for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS)
{
Coord4D side = wrapper.getFromSide(orientation);
@ -242,73 +223,12 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I
}
}
cleaningNodes.add(wrapper);
recurringNodes.remove(wrapper);
}
return false;
}
public boolean clean(boolean take)
{
boolean took = false;
if(!worldObj.isRemote)
{
for(Coord4D wrapper : cleaningNodes)
{
if(MekanismUtils.isDeadFluid(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord))
{
if(fluidTank.getFluid() != null && MekanismUtils.getFluidId(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord) == fluidTank.getFluid().fluidID)
{
took = true;
if(take)
{
worldObj.setBlockToAir(wrapper.xCoord, wrapper.yCoord, wrapper.zCoord);
}
}
}
}
for(Coord4D wrapper : recurringNodes)
{
if(MekanismUtils.isDeadFluid(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord))
{
if(fluidTank.getFluid() != null && MekanismUtils.getFluidId(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord) == fluidTank.getFluid().fluidID)
{
took = true;
if(take)
{
worldObj.setBlockToAir(wrapper.xCoord, wrapper.yCoord, wrapper.zCoord);
}
}
}
}
for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS)
{
Coord4D wrapper = Coord4D.get(this).getFromSide(orientation);
if(MekanismUtils.isDeadFluid(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord))
{
if(fluidTank.getFluid() != null && MekanismUtils.getFluidId(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord) == fluidTank.getFluid().fluidID)
{
took = true;
if(take)
{
worldObj.setBlockToAir(wrapper.xCoord, wrapper.yCoord, wrapper.zCoord);
}
}
}
}
}
return took;
}
@Override
public void handlePacketData(ByteBuf dataStream)
{
@ -371,18 +291,6 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I
{
nbtTags.setTag("recurringNodes", recurringList);
}
NBTTagList cleaningList = new NBTTagList();
for(Coord4D obj : cleaningNodes)
{
cleaningList.appendTag(obj.write(new NBTTagCompound()));
}
if(cleaningList.tagCount() != 0)
{
nbtTags.setTag("cleaningNodes", cleaningList);
}
}
@Override
@ -404,16 +312,6 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I
recurringNodes.add(Coord4D.read((NBTTagCompound)tagList.getCompoundTagAt(i)));
}
}
if(nbtTags.hasKey("cleaningNodes"))
{
NBTTagList tagList = nbtTags.getTagList("cleaningNodes", NBT.TAG_COMPOUND);
for(int i = 0; i < tagList.tagCount(); i++)
{
cleaningNodes.add(Coord4D.read((NBTTagCompound)tagList.getCompoundTagAt(i)));
}
}
}
@Override
@ -550,13 +448,9 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I
@Override
public boolean onSneakRightClick(EntityPlayer player, int side)
{
if(!worldObj.isRemote)
{
recurringNodes.clear();
cleaningNodes.clear();
player.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + MekanismUtils.localize("tooltip.configurator.pumpReset")));
}
recurringNodes.clear();
player.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + MekanismUtils.localize("tooltip.configurator.pumpReset")));
return true;
}

View file

@ -2,7 +2,6 @@ package mekanism.generators.client.gui;
import java.util.List;
import mekanism.api.MekanismConfig.generators;
import mekanism.api.util.ListUtils;
import mekanism.client.gui.GuiEnergyInfo;
import mekanism.client.gui.GuiEnergyInfo.IInfoHandler;
@ -39,7 +38,7 @@ public class GuiSolarGenerator extends GuiMekanism
public List<String> getInfo()
{
return ListUtils.asList(
"Producing: " + MekanismUtils.getEnergyDisplay(tileEntity.isActive ? generators.solarGeneration : 0) + "/t",
"Producing: " + MekanismUtils.getEnergyDisplay(tileEntity.isActive ? tileEntity.GENERATION_RATE : 0) + "/t",
"Storing: " + MekanismUtils.getEnergyDisplay(tileEntity.getEnergy()),
"Max Output: " + MekanismUtils.getEnergyDisplay(tileEntity.getMaxOutput()) + "/t");
}

View file

@ -42,7 +42,11 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.tools.IToolWrench;
import dan200.computercraft.api.peripheral.IPeripheral;
import dan200.computercraft.api.peripheral.IPeripheralProvider;
import cpw.mods.fml.common.ModAPIManager;
import cpw.mods.fml.common.Optional.Interface;
import cpw.mods.fml.common.Optional.Method;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -57,7 +61,8 @@ import cpw.mods.fml.relauncher.SideOnly;
* @author AidanBrady
*
*/
public class BlockGenerator extends BlockContainer implements ISpecialBounds
@Interface(iface = "dan200.computercraft.api.peripheral.IPeripheralProvider", modid = "ComputerCraft")
public class BlockGenerator extends BlockContainer implements ISpecialBounds, IPeripheralProvider
{
public Random machineRand = new Random();
@ -612,4 +617,59 @@ public class BlockGenerator extends BlockContainer implements ISpecialBounds
{
return true;
}
@Override
public ForgeDirection[] getValidRotations(World world, int x, int y, int z)
{
TileEntity tile = world.getTileEntity(x, y, z);
ForgeDirection[] valid = new ForgeDirection[6];
if(tile instanceof TileEntityBasicBlock)
{
TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile;
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
{
if(basicTile.canSetFacing(dir.ordinal()))
{
valid[dir.ordinal()] = dir;
}
}
}
return valid;
}
@Override
public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis)
{
TileEntity tile = world.getTileEntity(x, y, z);
if(tile instanceof TileEntityBasicBlock)
{
TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile;
if(basicTile.canSetFacing(axis.ordinal()))
{
basicTile.setFacing((short)axis.ordinal());
return true;
}
}
return false;
}
@Override
@Method(modid = "ComputerCraft")
public IPeripheral getPeripheral(World world, int x, int y, int z, int side)
{
TileEntity te = world.getTileEntity(x, y, z);
if(te != null && te instanceof IPeripheral)
{
return (IPeripheral)te;
}
return null;
}
}