More bin work! :D

This commit is contained in:
Aidan C. Brady 2013-11-12 18:42:55 -05:00
parent fe0631844b
commit e6ed263aa3
11 changed files with 289 additions and 74 deletions

View file

@ -49,64 +49,61 @@ public class RenderBin extends TileEntitySpecialRenderer
amount = Integer.toString(itemStack.stackSize);
}
for(ForgeDirection side : MekanismUtils.SIDE_DIRS)
Object3D obj = Object3D.get(tileEntity).getFromSide(ForgeDirection.getOrientation(tileEntity.facing));
if(tileEntity.worldObj.isBlockSolidOnSide(obj.xCoord, obj.yCoord, obj.zCoord, ForgeDirection.getOrientation(tileEntity.facing).getOpposite()))
{
Object3D obj = Object3D.get(tileEntity).getFromSide(side);
if(tileEntity.worldObj.isBlockSolidOnSide(obj.xCoord, obj.yCoord, obj.zCoord, side.getOpposite()))
return;
}
doLight(tileEntity.worldObj, obj);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
if(itemStack != null)
{
GL11.glPushMatrix();
switch(ForgeDirection.getOrientation(tileEntity.facing))
{
continue;
case NORTH:
GL11.glTranslated(x + 0.73, y + 0.83, z - 0.01);
break;
case SOUTH:
GL11.glTranslated(x + 0.27, y + 0.83, z + 1.01);
GL11.glRotatef(180, 0, 1, 0);
break;
case WEST:
GL11.glTranslated(x - 0.01, y + 0.83, z + 0.27);
GL11.glRotatef(90, 0, 1, 0);
break;
case EAST:
GL11.glTranslated(x + 1.01, y + 0.83, z + 0.73);
GL11.glRotatef(-90, 0, 1, 0);
break;
}
float scale = 0.03125F;
float scaler = 0.9F;
GL11.glScalef(scale*scaler, scale*scaler, 0);
GL11.glRotatef(180, 0, 0, 1);
TextureManager renderEngine = Minecraft.getMinecraft().renderEngine;
GL11.glDisable(2896);
if(!ForgeHooksClient.renderInventoryItem(renderBlocks, renderEngine, itemStack, true, 0.0F, 0.0F, 0.0F))
{
renderItem.renderItemIntoGUI(getFontRenderer(), renderEngine, itemStack, 0, 0);
}
doLight(tileEntity.worldObj, obj);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
GL11.glEnable(2896);
GL11.glPopMatrix();
}
if(itemStack != null)
{
GL11.glPushMatrix();
switch(side)
{
case NORTH:
GL11.glTranslated(x + 0.73, y + 0.83, z - 0.01);
break;
case SOUTH:
GL11.glTranslated(x + 0.27, y + 0.83, z + 1.01);
GL11.glRotatef(180, 0, 1, 0);
break;
case WEST:
GL11.glTranslated(x - 0.01, y + 0.83, z + 0.27);
GL11.glRotatef(90, 0, 1, 0);
break;
case EAST:
GL11.glTranslated(x + 1.01, y + 0.83, z + 0.73);
GL11.glRotatef(-90, 0, 1, 0);
break;
}
float scale = 0.03125F;
float scaler = 0.9F;
GL11.glScalef(scale*scaler, scale*scaler, 0);
GL11.glRotatef(180, 0, 0, 1);
TextureManager renderEngine = Minecraft.getMinecraft().renderEngine;
GL11.glDisable(2896);
if(!ForgeHooksClient.renderInventoryItem(renderBlocks, renderEngine, itemStack, true, 0.0F, 0.0F, 0.0F))
{
renderItem.renderItemIntoGUI(getFontRenderer(), renderEngine, itemStack, 0, 0);
}
GL11.glEnable(2896);
GL11.glPopMatrix();
}
if(amount != "")
{
renderText(amount, side, 0.02F, x, y - 0.31F, z);
}
if(amount != "")
{
renderText(amount, ForgeDirection.getOrientation(tileEntity.facing), 0.02F, x, y - 0.31F, z);
}
}
}

View file

@ -5,26 +5,31 @@ import java.util.List;
import mekanism.api.Object3D;
import mekanism.client.ClientProxy;
import mekanism.common.IActiveState;
import mekanism.common.IBoundingBlock;
import mekanism.common.Mekanism;
import mekanism.common.PacketHandler;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.inventory.InventoryBin;
import mekanism.common.network.PacketTileEntity;
import mekanism.common.tileentity.TileEntityBasicBlock;
import mekanism.common.tileentity.TileEntityBin;
import mekanism.common.tileentity.TileEntityDynamicTank;
import mekanism.common.tileentity.TileEntityDynamicValve;
import mekanism.common.util.MekanismUtils;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Icon;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
@ -53,7 +58,7 @@ import cpw.mods.fml.relauncher.SideOnly;
*/
public class BlockBasic extends Block
{
public Icon[] icons = new Icon[256];
public Icon[][] icons = new Icon[256][6];
public BlockBasic(int id)
{
@ -81,25 +86,72 @@ public class BlockBasic extends Block
@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister register)
{
icons[0] = register.registerIcon("mekanism:OsmiumBlock");
icons[1] = register.registerIcon("mekanism:BronzeBlock");
icons[2] = register.registerIcon("mekanism:RefinedObsidian");
icons[3] = register.registerIcon("mekanism:CoalBlock");
icons[4] = register.registerIcon("mekanism:RefinedGlowstone");
icons[5] = register.registerIcon("mekanism:SteelBlock");
icons[6] = register.registerIcon("mekanism:Bin"); //TODO texture
icons[7] = register.registerIcon("mekanism:TeleporterFrame");
icons[8] = register.registerIcon("mekanism:SteelCasing");
icons[9] = register.registerIcon("mekanism:DynamicTank");
icons[10] = register.registerIcon("mekanism:DynamicGlass");
icons[11] = register.registerIcon("mekanism:DynamicValve");
icons[0][0] = register.registerIcon("mekanism:OsmiumBlock");
icons[1][0] = register.registerIcon("mekanism:BronzeBlock");
icons[2][0] = register.registerIcon("mekanism:RefinedObsidian");
icons[3][0] = register.registerIcon("mekanism:CoalBlock");
icons[4][0] = register.registerIcon("mekanism:RefinedGlowstone");
icons[5][0] = register.registerIcon("mekanism:SteelBlock");
icons[6][0] = register.registerIcon("mekanism:BinSide");
icons[6][1] = register.registerIcon("mekanism:BinTop");
icons[6][2] = register.registerIcon("mekanism:BinFront");
icons[6][3] = register.registerIcon("mekanism:BinTopOn");
icons[6][4] = register.registerIcon("mekanism:BinFrontOn");
icons[7][0] = register.registerIcon("mekanism:TeleporterFrame");
icons[8][0] = register.registerIcon("mekanism:SteelCasing");
icons[9][0] = register.registerIcon("mekanism:DynamicTank");
icons[10][0] = register.registerIcon("mekanism:DynamicGlass");
icons[11][0] = register.registerIcon("mekanism:DynamicValve");
}
@Override
@SideOnly(Side.CLIENT)
public Icon getBlockTexture(IBlockAccess world, int x, int y, int z, int side)
{
int metadata = world.getBlockMetadata(x, y, z);
if(metadata != 6)
{
return getIcon(side, metadata);
}
else {
TileEntityBasicBlock tileEntity = (TileEntityBasicBlock)world.getBlockTileEntity(x, y, z);
if(side == 0 || side == 1)
{
return MekanismUtils.isActive(world, x, y, z) ? icons[6][3] : icons[6][1];
}
else if(side == tileEntity.facing)
{
return MekanismUtils.isActive(world, x, y, z) ? icons[6][4] : icons[6][2];
}
else {
return icons[6][0];
}
}
}
@Override
@SideOnly(Side.CLIENT)
public Icon getIcon(int side, int meta)
{
return icons[meta];
if(meta != 6)
{
return icons[meta][0];
}
else {
if(side == 0 || side == 1)
{
return icons[6][1];
}
else if(side == 3)
{
return icons[6][2];
}
else {
return icons[6][0];
}
}
}
@Override
@ -156,6 +208,23 @@ public class BlockBasic extends Block
return super.canCreatureSpawn(type, world, x, y, z);
}
@Override
public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player)
{
int meta = world.getBlockMetadata(x, y, z);
if(!world.isRemote && meta == 6)
{
TileEntityBin bin = (TileEntityBin)world.getBlockTileEntity(x, y, z);
if(bin.getStack() != null)
{
world.spawnEntityInWorld(new EntityItem(world, player.posX, player.posY, player.posZ, bin.getStack().copy()));
bin.setInventorySlotContents(0, null);
}
}
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityplayer, int i1, float f1, float f2, float f3)
{
@ -357,7 +426,16 @@ public class BlockBasic extends Block
@Override
public int getLightValue(IBlockAccess world, int x, int y, int z)
{
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
int metadata = world.getBlockMetadata(x, y, z);
if(tileEntity instanceof IActiveState)
{
if(((IActiveState)tileEntity).getActive() && ((IActiveState)tileEntity).lightUpdate())
{
return 15;
}
}
switch(metadata)
{
@ -399,10 +477,48 @@ public class BlockBasic extends Block
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityliving, ItemStack itemstack)
{
if(world.getBlockTileEntity(x, y, z) instanceof TileEntityBasicBlock)
{
TileEntityBasicBlock tileEntity = (TileEntityBasicBlock)world.getBlockTileEntity(x, y, z);
int side = MathHelper.floor_double((entityliving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
int height = Math.round(entityliving.rotationPitch);
int change = 3;
if(tileEntity.canSetFacing(0) && tileEntity.canSetFacing(1))
{
if(height >= 65)
{
change = 1;
}
else if(height <= -65)
{
change = 0;
}
}
if(change != 0 && change != 1)
{
switch(side)
{
case 0: change = 2; break;
case 1: change = 5; break;
case 2: change = 3; break;
case 3: change = 4; break;
}
}
tileEntity.setFacing((short)change);
if(tileEntity instanceof IBoundingBlock)
{
((IBoundingBlock)tileEntity).onPlace();
}
}
world.markBlockForRenderUpdate(x, y, z);
world.updateAllLightTypes(x, y, z);
if(world.getBlockTileEntity(x, y, z) != null && !world.isRemote)
if(!world.isRemote && world.getBlockTileEntity(x, y, z) != null)
{
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);

View file

@ -148,7 +148,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityliving, ItemStack itemstack)
{
TileEntityBasicBlock tileEntity = (TileEntityBasicBlock)world.getBlockTileEntity(x, y, z);
int side = MathHelper.floor_double((double)(entityliving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
int side = MathHelper.floor_double((entityliving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
int height = Math.round(entityliving.rotationPitch);
int change = 3;

View file

@ -40,7 +40,7 @@ public class InventoryBin
public ItemStack add(ItemStack stack)
{
if(stack != null && stack.stackSize > 0)
if(stack != null && stack.stackSize > 0 && stack.isStackable())
{
if(getItemType() == null)
{

View file

@ -12,6 +12,7 @@ import mekanism.common.PacketHandler;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.network.PacketTileEntity;
import mekanism.common.tileentity.TileEntityBasicBlock;
import mekanism.common.tileentity.TileEntityBin;
import mekanism.common.tileentity.TileEntityContainerBlock;
import mekanism.common.tileentity.TileEntityElectricChest;
import mekanism.common.tileentity.TileEntityElectricPump;
@ -21,7 +22,6 @@ import mekanism.common.util.MekanismUtils;
import mekanism.common.util.TransporterUtils;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@ -77,6 +77,13 @@ public class ItemConfigurator extends ItemEnergized
player.sendChatToPlayer(ChatMessageComponent.createFromText(EnumColor.DARK_BLUE + "[Mekanism]" + EnumColor.GREY + " Color bumped to: " + (transporter.color != null ? transporter.color.getName() : EnumColor.BLACK + "None")));
return true;
}
else if(world.getBlockTileEntity(x, y, z) instanceof TileEntityBin)
{
TileEntityBin bin = (TileEntityBin)world.getBlockTileEntity(x, y, z);
bin.setActive(!bin.getActive());
world.playSoundEffect(x, y, z, "random.click", 0.3F, 1);
return true;
}
}
else if(world.getBlockTileEntity(x, y, z) instanceof ITransmitter)
{

View file

@ -2,16 +2,34 @@ package mekanism.common.tileentity;
import java.util.ArrayList;
import mekanism.api.Object3D;
import mekanism.common.IActiveState;
import mekanism.common.PacketHandler;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.network.PacketTileEntity;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.TransporterUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import com.google.common.io.ByteArrayDataInput;
public class TileEntityBin extends TileEntityBasicBlock implements ISidedInventory
public class TileEntityBin extends TileEntityBasicBlock implements ISidedInventory, IActiveState
{
public boolean isActive;
public boolean clientActive;
public final int MAX_DELAY = 10;
public int delayTicks;
public int itemCount;
public ItemStack itemType;
public ItemStack getStack()
@ -28,13 +46,35 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
}
@Override
public void onUpdate() {}
public void onUpdate()
{
if(!worldObj.isRemote)
{
delayTicks = Math.max(0, delayTicks-1);
if(getStack() != null && isActive && delayTicks == 0)
{
TileEntity tile = Object3D.get(this).getFromSide(ForgeDirection.getOrientation(0)).getTileEntity(worldObj);
if(tile instanceof TileEntityLogisticalTransporter)
{
TileEntityLogisticalTransporter transporter = (TileEntityLogisticalTransporter)tile;
if(TransporterUtils.insert(this, transporter, getStack(), null))
{
setInventorySlotContents(0, null);
}
}
}
}
}
@Override
public void writeToNBT(NBTTagCompound nbtTags)
{
super.writeToNBT(nbtTags);
nbtTags.setBoolean("isActive", isActive);
nbtTags.setInteger("itemCount", itemCount);
if(itemCount > 0)
@ -48,6 +88,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
{
super.readFromNBT(nbtTags);
isActive = nbtTags.getBoolean("isActive");
itemCount = nbtTags.getInteger("itemCount");
if(itemCount > 0)
@ -61,6 +102,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
{
super.getNetworkedData(data);
data.add(isActive);
data.add(itemCount);
if(itemCount > 0)
@ -77,12 +119,15 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
{
super.handlePacketData(dataStream);
isActive = dataStream.readBoolean();
itemCount = dataStream.readInt();
if(itemCount > 0)
{
itemType = new ItemStack(dataStream.readInt(), 0, dataStream.readInt());
}
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
}
@Override
@ -169,6 +214,19 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
setItemCount(itemCount + itemstack.stackSize);
}
}
onInventoryChanged();
}
@Override
public void onInventoryChanged()
{
super.onInventoryChanged();
if(!worldObj.isRemote)
{
PacketHandler.sendPacket(Transmission.ALL_CLIENTS, new PacketTileEntity().setParams(Object3D.get(this), getNetworkedData(new ArrayList())));
}
}
public void setItemType(ItemStack stack)
@ -253,4 +311,41 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
{
return itemType != null && itemType.isItemEqual(itemstack);
}
@Override
public boolean canSetFacing(int facing)
{
return facing != 0 && facing != 1;
}
@Override
public void setActive(boolean active)
{
isActive = active;
if(clientActive != active)
{
PacketHandler.sendPacket(Transmission.ALL_CLIENTS, new PacketTileEntity().setParams(Object3D.get(this), getNetworkedData(new ArrayList())));
clientActive = active;
}
}
@Override
public boolean getActive()
{
return isActive;
}
@Override
public boolean renderUpdate()
{
return true;
}
@Override
public boolean lightUpdate()
{
return true;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB