Finished drawing labels over filter-supporting machines

Also cleaned up some packet code and modularized filters
This commit is contained in:
Brian Ricketts 2012-12-28 17:43:23 -06:00
parent 46c59251fc
commit 2a732328a1
10 changed files with 360 additions and 456 deletions

View file

@ -10,6 +10,7 @@ import assemblyline.client.gui.GuiStamper;
import assemblyline.client.render.BlockRenderingHandler;
import assemblyline.client.render.RenderConveyorBelt;
import assemblyline.client.render.RenderCrate;
import assemblyline.client.render.RenderDetector;
import assemblyline.client.render.RenderManipulator;
import assemblyline.client.render.RenderSorter;
import assemblyline.common.AssemblyLine;
@ -18,6 +19,7 @@ import assemblyline.common.block.TileEntityCrate;
import assemblyline.common.machine.TileEntityManipulator;
import assemblyline.common.machine.TileEntityRejector;
import assemblyline.common.machine.belt.TileEntityConveyorBelt;
import assemblyline.common.machine.detector.TileEntityDetector;
import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.client.registry.RenderingRegistry;
@ -37,6 +39,7 @@ public class ClientProxy extends CommonProxy
super.init();
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityConveyorBelt.class, new RenderConveyorBelt());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRejector.class, new RenderSorter());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityDetector.class, new RenderDetector());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityManipulator.class, new RenderManipulator());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCrate.class, new RenderCrate());
}

View file

@ -18,15 +18,16 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class RenderDetector extends TileEntitySpecialRenderer
public class RenderDetector extends RenderFilterable
{
@Override
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float var8)
{
if (tileEntity instanceof TileEntityDetector)
{
this.render(((TileEntityDetector) tileEntity).isInverted(), new Vector3(x, y, z));
//this.render(((TileEntityDetector) tileEntity).isInverted(), new Vector3(x, y, z));
}
super.renderTileEntityAt(tileEntity, x, y, z, var8);
}
public static void render(boolean isInverted, Vector3 position)

View file

@ -0,0 +1,39 @@
package assemblyline.client.render;
import java.util.ArrayList;
import assemblyline.common.machine.TileEntityFilterable;
import assemblyline.common.machine.filter.ItemFilter;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
public abstract class RenderFilterable extends TileEntitySpecialRenderer
{
@Override
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float var8)
{
if (tileEntity instanceof TileEntityFilterable)
{
TileEntityFilterable filterable = (TileEntityFilterable) tileEntity;
EntityPlayer p = Minecraft.getMinecraft().thePlayer;
double dist = p.getDistance(filterable.xCoord, filterable.yCoord, filterable.zCoord);
if (dist < 5)
{
ItemStack filter = filterable.getFilter();
if (filter != null)
{
ArrayList<ItemStack> filters = ItemFilter.getFilters(filter);
for (int i = 0; i < filters.size(); i++)
{
RenderHelper.renderFloatingText(filters.get(i).getTooltip(p, Minecraft.getMinecraft().gameSettings.advancedItemTooltips).get(0).toString(), (float) x + 0.5f, ((float) y + (i * 0.25f)) - 1f, (float) z + 0.5f);
}
}
}
}
}
}

View file

@ -31,7 +31,7 @@ public class RenderHelper
GL11.glDisable(GL11.GL_TEXTURE_2D);
tessellator.startDrawingQuads();
int stringMiddle = fontRenderer.getStringWidth(text) / 2;
tessellator.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F);
tessellator.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.5F);
tessellator.addVertex((double) (-stringMiddle - 1), (double) (-1 + yOffset), 0.0D);
tessellator.addVertex((double) (-stringMiddle - 1), (double) (8 + yOffset), 0.0D);
tessellator.addVertex((double) (stringMiddle + 1), (double) (8 + yOffset), 0.0D);

View file

@ -15,7 +15,7 @@ import assemblyline.common.AssemblyLine;
import assemblyline.common.machine.TileEntityRejector;
import assemblyline.common.machine.filter.ItemFilter;
public class RenderSorter extends TileEntitySpecialRenderer
public class RenderSorter extends RenderFilterable
{
private ModelSorter model = new ModelSorter();
@ -52,28 +52,13 @@ public class RenderSorter extends TileEntitySpecialRenderer
model.renderMain(0.0625F);
model.renderPiston(0.0625F, pos);
GL11.glPopMatrix();
EntityPlayer p = Minecraft.getMinecraft().thePlayer;
double dist = p.getDistance(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord);
System.out.println(dist);
if (dist < 5)
{
ItemStack filter = tileEntity.getFilter();
if (filter != null)
{
ArrayList<ItemStack> filters = ItemFilter.getFilters(filter);
for (int i = 0; i < filters.size(); i++)
{
RenderHelper.renderFloatingText(filters.get(i).getDisplayName(), (float) x + 0.5f, ((float) y + (i * 0.25f)) - 1f, (float) z + 0.5f);
}
}
}
}
@Override
public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8)
{
this.renderAModelAt((TileEntityRejector) tileEntity, var2, var4, var6, var8);
super.renderTileEntityAt(tileEntity, var2, var4, var6, var8);
}
}

View file

@ -0,0 +1,222 @@
package assemblyline.common.machine;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import com.google.common.io.ByteArrayDataInput;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.INetworkManager;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.Packet250CustomPayload;
import net.minecraftforge.common.ForgeDirection;
import universalelectricity.prefab.implement.IRotatable;
import universalelectricity.prefab.network.IPacketReceiver;
import universalelectricity.prefab.network.PacketManager;
import universalelectricity.prefab.network.PacketManager.PacketType;
import assemblyline.api.IFilterable;
import assemblyline.common.AssemblyLine;
public abstract class TileEntityFilterable extends TileEntityAssemblyNetwork implements IRotatable, IFilterable, IPacketReceiver, IInventory
{
private ItemStack filterItem;
@Override
public int getSizeInventory()
{
return 1;
}
@Override
public ItemStack getStackInSlot(int slot)
{
if (slot == 0)
return filterItem;
else
return null;
}
@Override
public ItemStack decrStackSize(int slot, int amount)
{
if (filterItem != null)
{
ItemStack stack;
if (filterItem.stackSize <= amount)
{
stack = filterItem;
filterItem = null;
return stack;
}
else
{
stack = filterItem.splitStack(amount);
if (filterItem.stackSize == 0)
{
filterItem = null;
}
return stack;
}
}
else
{
return null;
}
}
@Override
public ItemStack getStackInSlotOnClosing(int slot)
{
if (filterItem != null)
{
ItemStack stack = filterItem;
filterItem = null;
return stack;
}
else
{
return null;
}
}
@Override
public void setInventorySlotContents(int slot, ItemStack stack)
{
filterItem = stack;
if (stack != null && stack.stackSize > this.getInventoryStackLimit())
{
stack.stackSize = this.getInventoryStackLimit();
}
}
@Override
public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer)
{
return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq(this.xCoord + 0.5D, this.yCoord + 0.5D, this.zCoord + 0.5D) <= 64.0D;
}
@Override
public void openChest()
{
}
@Override
public void closeChest()
{
}
@Override
public void setFilter(ItemStack filter)
{
this.setInventorySlotContents(0, filter);
PacketManager.sendPacketToClients(getDescriptionPacket());
}
@Override
public ItemStack getFilter()
{
return this.getStackInSlot(0);
}
@Override
public ForgeDirection getDirection()
{
return ForgeDirection.getOrientation(this.getBlockMetadata());
}
@Override
public void setDirection(ForgeDirection facingDirection)
{
this.worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, facingDirection.ordinal());
}
@Override
public abstract String getInvName();
@Override
public int getInventoryStackLimit()
{
return 1;
}
@Override
public Packet getDescriptionPacket()
{
Packet250CustomPayload packet = new Packet250CustomPayload();
packet.channel = AssemblyLine.CHANNEL;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
try
{
dos.writeInt(PacketType.TILEENTITY.ordinal());
dos.writeInt(xCoord);
dos.writeInt(yCoord);
dos.writeInt(zCoord);
NBTTagCompound tag = new NBTTagCompound();
writeToNBT(tag);
PacketManager.writeNBTTagCompound(tag, dos);
packet.data = bos.toByteArray();
packet.length = bos.size();
return packet;
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
@Override
public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream)
{
ByteArrayInputStream bis = new ByteArrayInputStream(packet.data);
DataInputStream dis = new DataInputStream(bis);
int id, x, y, z;
try
{
id = dis.readInt();
x = dis.readInt();
y = dis.readInt();
z = dis.readInt();
NBTTagCompound tag = Packet.readNBTTagCompound(dis);
readFromNBT(tag);
}
catch (IOException e)
{
e.printStackTrace();
}
}
@Override
public void writeToNBT(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
NBTTagCompound filter = new NBTTagCompound();
if (getFilter() != null)
getFilter().writeToNBT(filter);
nbt.setTag("filter", filter);
}
@Override
public void readFromNBT(NBTTagCompound nbt)
{
super.readFromNBT(nbt);
NBTTagCompound filter = nbt.getCompoundTag("filter");
setInventorySlotContents(0, ItemStack.loadItemStackFromNBT(filter));
}
}

View file

@ -44,12 +44,8 @@ import cpw.mods.fml.relauncher.Side;
* @author Darkguardsman
*
*/
public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRotatable, IFilterable, IPacketReceiver, IInventory
public class TileEntityRejector extends TileEntityFilterable
{
/**
* The items this container contains.
*/
protected ItemStack[] containingItems = new ItemStack[1];
/**
* Used to id the packet types
@ -165,9 +161,9 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo
EntityItem entityItem = (EntityItem) entity;
ItemStack itemStack = entityItem.func_92014_d();
if (this.containingItems[0] != null)
if (getFilter() != null)
{
ArrayList<ItemStack> checkStacks = ItemFilter.getFilters(this.containingItems[0]);
ArrayList<ItemStack> checkStacks = ItemFilter.getFilters(getFilter());
// Reject matching items
for (int i = 0; i < checkStacks.size(); i++)
@ -243,12 +239,6 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo
return TranslationHelper.getLocal("tile.rejector.name");
}
@Override
public int getSizeInventory()
{
return this.containingItems.length;
}
/**
* UE methods
*/
@ -258,90 +248,6 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo
return 120;
}
/**
* Inventory functions.
*/
@Override
public ItemStack getStackInSlot(int par1)
{
return this.containingItems[par1];
}
@Override
public ItemStack decrStackSize(int par1, int par2)
{
if (this.containingItems[par1] != null)
{
ItemStack var3;
if (this.containingItems[par1].stackSize <= par2)
{
var3 = this.containingItems[par1];
this.containingItems[par1] = null;
return var3;
}
else
{
var3 = this.containingItems[par1].splitStack(par2);
if (this.containingItems[par1].stackSize == 0)
{
this.containingItems[par1] = null;
}
return var3;
}
}
else
{
return null;
}
}
@Override
public ItemStack getStackInSlotOnClosing(int par1)
{
if (this.containingItems[par1] != null)
{
ItemStack var2 = this.containingItems[par1];
this.containingItems[par1] = null;
return var2;
}
else
{
return null;
}
}
@Override
public void setInventorySlotContents(int par1, ItemStack par2ItemStack)
{
this.containingItems[par1] = par2ItemStack;
if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit())
{
par2ItemStack.stackSize = this.getInventoryStackLimit();
}
}
@Override
public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer)
{
return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq(this.xCoord + 0.5D, this.yCoord + 0.5D, this.zCoord + 0.5D) <= 64.0D;
}
@Override
public void openChest()
{
this.playerUsing++;
}
@Override
public void closeChest()
{
this.playerUsing--;
}
/**
* NBT Data
*/
@ -349,28 +255,7 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo
public void readFromNBT(NBTTagCompound nbt)
{
super.readFromNBT(nbt);
/*for (int i = 0; i < this.guiButtons.length; i++)
{
this.guiButtons[i] = nbt.getBoolean("guiButton" + i);
}
NBTTagList var2 = nbt.getTagList("Items");
this.containingItems = new ItemStack[this.getSizeInventory()];
for (int var3 = 0; var3 < var2.tagCount(); ++var3)
{
NBTTagCompound var4 = (NBTTagCompound) var2.tagAt(var3);
byte var5 = var4.getByte("Slot");
if (var5 >= 0 && var5 < this.containingItems.length)
{
this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4);
}
}*/
NBTTagCompound filter = nbt.getCompoundTag("filter");
setInventorySlotContents(0, ItemStack.loadItemStackFromNBT(filter));
firePiston = nbt.getBoolean("piston");
}
@ -381,107 +266,7 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo
public void writeToNBT(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
/*for (int i = 0; i < this.guiButtons.length; i++)
{
nbt.setBoolean("guiButton" + i, this.guiButtons[i]);
}
NBTTagList var2 = new NBTTagList();
for (int var3 = 0; var3 < this.containingItems.length; ++var3)
{
if (this.containingItems[var3] != null)
{
NBTTagCompound var4 = new NBTTagCompound();
var4.setByte("Slot", (byte) var3);
this.containingItems[var3].writeToNBT(var4);
var2.appendTag(var4);
}
}
nbt.setTag("Items", var2);*/
NBTTagCompound filter = new NBTTagCompound();
if (getStackInSlot(0) != null)
getStackInSlot(0).writeToNBT(filter);
nbt.setCompoundTag("filter", filter);
nbt.setBoolean("piston", firePiston);
}
@Override
public int getInventoryStackLimit()
{
return 1;
}
@Override
public void setFilter(ItemStack filter)
{
this.setInventorySlotContents(0, filter);
PacketManager.sendPacketToClients(getDescriptionPacket());
}
@Override
public ItemStack getFilter()
{
return this.getStackInSlot(0);
}
@Override
public ForgeDirection getDirection()
{
return ForgeDirection.getOrientation(this.getBlockMetadata());
}
@Override
public void setDirection(ForgeDirection facingDirection)
{
this.worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, facingDirection.ordinal());
}
@Override
public Packet getDescriptionPacket()
{
Packet250CustomPayload packet = new Packet250CustomPayload();
packet.channel = AssemblyLine.CHANNEL;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
try
{
dos.writeInt(PacketType.TILEENTITY.ordinal());
dos.writeInt(xCoord);
dos.writeInt(yCoord);
dos.writeInt(zCoord);
NBTTagCompound tag = new NBTTagCompound();
writeToNBT(tag);
PacketManager.writeNBTTagCompound(tag, dos);
packet.data = bos.toByteArray();
packet.length = bos.size();
return packet;
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
@Override
public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream)
{
ByteArrayInputStream bis = new ByteArrayInputStream(packet.data);
DataInputStream dis = new DataInputStream(bis);
int id, x, y, z;
try
{
id = dis.readInt();
x = dis.readInt();
y = dis.readInt();
z = dis.readInt();
NBTTagCompound tag = Packet.readNBTTagCompound(dis);
readFromNBT(tag);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}

View file

@ -85,6 +85,30 @@ public class BlockDetector extends BlockFilterable
return false;
}
@Override
public boolean isBlockNormalCube(World world, int x, int y, int z)
{
return false;
}
@Override
public boolean isBlockSolid(IBlockAccess par1iBlockAccess, int par2, int par3, int par4, int par5)
{
return false;
}
@Override
public boolean isBlockSolidOnSide(World world, int x, int y, int z, ForgeDirection side)
{
return false;
}
@Override
public boolean renderAsNormalBlock()
{
return false;
}
/*
* @Override public boolean renderAsNormalBlock() { return false; }
*
@ -96,12 +120,12 @@ public class BlockDetector extends BlockFilterable
@Override
public boolean isProvidingStrongPower(IBlockAccess world, int x, int y, int z, int direction)
{
if (direction == ForgeDirection.DOWN.ordinal())
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
if (tileEntity != null)
{
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
if (tileEntity != null)
if (tileEntity instanceof TileEntityDetector)
{
if (tileEntity instanceof TileEntityDetector) { return ((TileEntityDetector) tileEntity).isPoweringTo(ForgeDirection.getOrientation(direction)); }
return ((TileEntityDetector) tileEntity).isPoweringTo(ForgeDirection.getOrientation(direction));
}
}
@ -111,17 +135,17 @@ public class BlockDetector extends BlockFilterable
@Override
public boolean isProvidingWeakPower(IBlockAccess world, int x, int y, int z, int direction)
{
if (direction != ForgeDirection.DOWN.ordinal() && direction != ForgeDirection.UP.ordinal())
{
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
if (tileEntity != null)
{
if (tileEntity instanceof TileEntityDetector) { return ((TileEntityDetector) tileEntity).isPoweringTo(ForgeDirection.getOrientation(direction)); }
}
}
return false;
return isProvidingStrongPower(world, x, y, z, direction);
/*
* if (direction != ForgeDirection.DOWN.ordinal() && direction !=
* ForgeDirection.UP.ordinal()) { TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
*
* if (tileEntity != null) { if (tileEntity instanceof TileEntityDetector) { return
* ((TileEntityDetector) tileEntity).isPoweringTo(ForgeDirection.getOrientation(direction));
* } } }
*
* return false;
*/
}
@Override

View file

@ -1,11 +1,15 @@
package assemblyline.common.machine.detector;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
@ -15,43 +19,34 @@ import net.minecraft.network.packet.Packet250CustomPayload;
import net.minecraft.util.AxisAlignedBB;
import net.minecraftforge.common.ForgeDirection;
import universalelectricity.prefab.TranslationHelper;
import universalelectricity.prefab.implement.IRedstoneProvider;
import universalelectricity.prefab.network.IPacketReceiver;
import universalelectricity.prefab.network.PacketManager;
import universalelectricity.prefab.tile.TileEntityAdvanced;
import assemblyline.api.IFilterable;
import assemblyline.common.AssemblyLine;
import assemblyline.common.machine.TileEntityFilterable;
import assemblyline.common.machine.filter.ItemFilter;
import com.google.common.io.ByteArrayDataInput;
public class TileEntityDetector extends TileEntityAdvanced implements IFilterable, IInventory, IRedstoneProvider, IPacketReceiver
public class TileEntityDetector extends TileEntityFilterable
{
private boolean powering = false;
private boolean isInverted = false;
private ItemStack[] containingItems = new ItemStack[1];
private boolean inverted = false;
@Override
public void updateEntity()
{
<<<<<<< Updated upstream
super.updateEntity();
=======
int metadata = this.worldObj.getBlockMetadata(xCoord, yCoord, zCoord) & 3;
AxisAlignedBB testArea = AxisAlignedBB.getBoundingBox(this.xCoord, this.yCoord - 1, this.zCoord, this.xCoord + 1, this.yCoord, this.zCoord + 1);
>>>>>>> Stashed changes
if (!this.worldObj.isRemote && this.ticks % 10 == 0)
{
int metadata = this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord);
AxisAlignedBB testArea = AxisAlignedBB.getBoundingBox(this.xCoord, this.yCoord - 1, this.yCoord, this.xCoord + 1, this.yCoord, this.zCoord + 1);
AxisAlignedBB testArea = AxisAlignedBB.getBoundingBox(this.xCoord, this.yCoord - 1, this.zCoord, this.xCoord + 1, this.yCoord, this.zCoord + 1);
ArrayList<Entity> entities = (ArrayList<Entity>) this.worldObj.getEntitiesWithinAABB(EntityItem.class, testArea);
boolean powerCheck = false;
if (entities.size() > 0)
{
if (this.containingItems[0] != null)
if (getFilter() != null)
{
for (int i = 0; i < entities.size(); i++)
{
@ -59,7 +54,7 @@ public class TileEntityDetector extends TileEntityAdvanced implements IFilterabl
ItemStack item = e.func_92014_d();
boolean found = false;
ArrayList<ItemStack> checkStacks = ItemFilter.getFilters(this.containingItems[0]);
ArrayList<ItemStack> checkStacks = ItemFilter.getFilters(getFilter());
for (int ii = 0; ii < checkStacks.size(); ii++)
{
@ -89,7 +84,7 @@ public class TileEntityDetector extends TileEntityAdvanced implements IFilterabl
}
}
if (this.isInverted)
if (this.inverted)
{
if (!found)
{
@ -125,6 +120,7 @@ public class TileEntityDetector extends TileEntityAdvanced implements IFilterabl
this.worldObj.notifyBlocksOfNeighborChange(x, this.yCoord + 1, z, AssemblyLine.blockDetector.blockID);
}
}
PacketManager.sendPacketToClients(getDescriptionPacket());
}
}
}
@ -138,12 +134,12 @@ public class TileEntityDetector extends TileEntityAdvanced implements IFilterabl
public boolean isInverted()
{
return isInverted;
return inverted;
}
public void setInversion(boolean inverted)
{
this.isInverted = inverted;
this.inverted = inverted;
if (this.worldObj.isRemote)
{
@ -153,196 +149,40 @@ public class TileEntityDetector extends TileEntityAdvanced implements IFilterabl
public void toggleInversion()
{
this.setInversion(!this.isInverted);
}
@Override
public Packet getDescriptionPacket()
{
return PacketManager.getPacket(AssemblyLine.CHANNEL, this, this.isInverted);
}
@Override
public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream)
{
if (this.worldObj.isRemote)
{
try
{
this.isInverted = dataStream.readBoolean();
}
catch (Exception e)
{
e.printStackTrace();
}
}
this.setInversion(!this.inverted);
}
@Override
public void readFromNBT(NBTTagCompound tag)
{
super.readFromNBT(tag);
NBTTagList itemList = tag.getTagList("Items");
this.containingItems = new ItemStack[this.getSizeInventory()];
for (int i = 0; i < itemList.tagCount(); ++i)
{
NBTTagCompound itemAt = (NBTTagCompound) itemList.tagAt(i);
int itemSlot = itemAt.getByte("Slot") & 255;
if (itemSlot >= 0 && itemSlot < this.containingItems.length)
{
this.containingItems[itemSlot] = ItemStack.loadItemStackFromNBT(itemAt);
}
}
this.isInverted = tag.getBoolean("isInverted");
this.inverted = tag.getBoolean("isInverted");
this.powering = tag.getBoolean("powering");
}
@Override
public void writeToNBT(NBTTagCompound tag)
{
super.writeToNBT(tag);
NBTTagList itemList = new NBTTagList();
for (int i = 0; i < this.containingItems.length; ++i)
{
if (this.containingItems[i] != null)
{
NBTTagCompound itemAt = new NBTTagCompound();
itemAt.setByte("Slot", (byte) i);
this.containingItems[i].writeToNBT(itemAt);
itemList.appendTag(itemAt);
}
}
tag.setTag("Items", itemList);
tag.setBoolean("isInverted", this.isInverted);
tag.setBoolean("isInverted", this.inverted);
tag.setBoolean("powering", this.powering);
}
@Override
public int getSizeInventory()
{
return this.containingItems.length;
}
@Override
public ItemStack getStackInSlot(int slot)
{
return containingItems[slot];
}
@Override
public ItemStack decrStackSize(int slot, int amount)
{
if (this.containingItems[slot] != null)
{
ItemStack var3;
if (this.containingItems[slot].stackSize <= amount)
{
var3 = this.containingItems[slot];
this.containingItems[slot] = null;
this.onInventoryChanged();
return var3;
}
else
{
var3 = this.containingItems[slot].splitStack(amount);
if (this.containingItems[slot].stackSize == 0)
{
this.containingItems[slot] = null;
}
this.onInventoryChanged();
return var3;
}
}
else
{
return null;
}
}
@Override
public ItemStack getStackInSlotOnClosing(int slot)
{
if (this.containingItems[slot] != null)
{
ItemStack var2 = this.containingItems[slot];
this.containingItems[slot] = null;
return var2;
}
else
{
return null;
}
}
@Override
public void setInventorySlotContents(int slot, ItemStack stack)
{
this.containingItems[slot] = stack;
if (stack != null && stack.stackSize > this.getInventoryStackLimit())
{
stack.stackSize = this.getInventoryStackLimit();
}
this.onInventoryChanged();
}
@Override
public String getInvName()
{
return TranslationHelper.getLocal("tile.detector.name");
}
@Override
public int getInventoryStackLimit()
{
return 1;
}
@Override
public boolean isUseableByPlayer(EntityPlayer player)
{
return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : player.getDistanceSq((double) this.xCoord + 0.5D, (double) this.yCoord + 0.5D, (double) this.zCoord + 0.5D) <= 64.0D;
}
@Override
public void openChest()
{
}
@Override
public void closeChest()
{
}
@Override
public boolean isPoweringTo(ForgeDirection side)
{
return this.powering;
}
@Override
public boolean isIndirectlyPoweringTo(ForgeDirection side)
{
return this.isPoweringTo(side);
}
@Override
public void setFilter(ItemStack filter)
public String getInvName()
{
this.setInventorySlotContents(0, filter);
return "Detector";
}
@Override
public ItemStack getFilter()
{
return this.getStackInSlot(0);
}
}

View file

@ -71,41 +71,46 @@ public class ContainerStamper extends Container implements IInventory
* Called to transfer a stack from one inventory to the other eg. when shift clicking.
*/
@Override
public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par1)
public ItemStack transferStackInSlot(EntityPlayer player, int slot)
{
ItemStack itemStack3 = null;
Slot itemStack = (Slot) this.inventorySlots.get(par1);
ItemStack copyStack = null;
Slot slotObj = (Slot) this.inventorySlots.get(slot);
if (itemStack != null && itemStack.getHasStack())
if (slotObj != null && slotObj.getHasStack())
{
ItemStack itemStack2 = itemStack.getStack();
itemStack3 = itemStack2.copy();
if (par1 > 4)
ItemStack slotStack = slotObj.getStack();
copyStack = slotStack.copy();
if (slot == 2)
{
if (this.getSlot(0).isItemValid(itemStack2))
{
if (!this.mergeItemStack(itemStack2, 0, 1, false)) { return null; }
}
else if (!this.mergeItemStack(itemStack2, 1, 2, false)) { return null; }
setInventorySlotContents(0, null); //prevent filter from being duplicated
}
else if (!this.mergeItemStack(itemStack2, this.containingItems.length, 37, false)) { return null; }
if (itemStack2.stackSize == 0)
if (slot > 4)
{
itemStack.putStack((ItemStack) null);
if (this.getSlot(0).isItemValid(slotStack))
{
if (!this.mergeItemStack(slotStack, 0, 1, false)) { return null; }
}
else if (!this.mergeItemStack(slotStack, 1, 2, false)) { return null; }
}
else if (!this.mergeItemStack(slotStack, this.containingItems.length, 37, false)) { return null; }
if (slotStack.stackSize == 0)
{
slotObj.putStack((ItemStack) null);
}
else
{
itemStack.onSlotChanged();
slotObj.onSlotChanged();
}
if (itemStack2.stackSize == itemStack3.stackSize) { return null; }
if (slotStack.stackSize == copyStack.stackSize) { return null; }
itemStack.onPickupFromSlot(par1EntityPlayer, itemStack2);
slotObj.onPickupFromSlot(player, slotStack);
}
return itemStack3;
return copyStack;
}
@Override