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); 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); return;
}
if(tileEntity.worldObj.isBlockSolidOnSide(obj.xCoord, obj.yCoord, obj.zCoord, side.getOpposite()))
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); GL11.glEnable(2896);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240); GL11.glPopMatrix();
}
if(itemStack != null) if(amount != "")
{ {
GL11.glPushMatrix(); renderText(amount, ForgeDirection.getOrientation(tileEntity.facing), 0.02F, x, y - 0.31F, z);
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);
}
} }
} }
} }

View file

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

View file

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

View file

@ -12,6 +12,7 @@ import mekanism.common.PacketHandler;
import mekanism.common.PacketHandler.Transmission; import mekanism.common.PacketHandler.Transmission;
import mekanism.common.network.PacketTileEntity; import mekanism.common.network.PacketTileEntity;
import mekanism.common.tileentity.TileEntityBasicBlock; import mekanism.common.tileentity.TileEntityBasicBlock;
import mekanism.common.tileentity.TileEntityBin;
import mekanism.common.tileentity.TileEntityContainerBlock; import mekanism.common.tileentity.TileEntityContainerBlock;
import mekanism.common.tileentity.TileEntityElectricChest; import mekanism.common.tileentity.TileEntityElectricChest;
import mekanism.common.tileentity.TileEntityElectricPump; import mekanism.common.tileentity.TileEntityElectricPump;
@ -21,7 +22,6 @@ import mekanism.common.util.MekanismUtils;
import mekanism.common.util.TransporterUtils; import mekanism.common.util.TransporterUtils;
import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; 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"))); player.sendChatToPlayer(ChatMessageComponent.createFromText(EnumColor.DARK_BLUE + "[Mekanism]" + EnumColor.GREY + " Color bumped to: " + (transporter.color != null ? transporter.color.getName() : EnumColor.BLACK + "None")));
return true; 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) else if(world.getBlockTileEntity(x, y, z) instanceof ITransmitter)
{ {

View file

@ -2,16 +2,34 @@ package mekanism.common.tileentity;
import java.util.ArrayList; 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.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory; import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import com.google.common.io.ByteArrayDataInput; 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 int itemCount;
public ItemStack itemType; public ItemStack itemType;
public ItemStack getStack() public ItemStack getStack()
@ -28,13 +46,35 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
} }
@Override @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 @Override
public void writeToNBT(NBTTagCompound nbtTags) public void writeToNBT(NBTTagCompound nbtTags)
{ {
super.writeToNBT(nbtTags); super.writeToNBT(nbtTags);
nbtTags.setBoolean("isActive", isActive);
nbtTags.setInteger("itemCount", itemCount); nbtTags.setInteger("itemCount", itemCount);
if(itemCount > 0) if(itemCount > 0)
@ -48,6 +88,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
{ {
super.readFromNBT(nbtTags); super.readFromNBT(nbtTags);
isActive = nbtTags.getBoolean("isActive");
itemCount = nbtTags.getInteger("itemCount"); itemCount = nbtTags.getInteger("itemCount");
if(itemCount > 0) if(itemCount > 0)
@ -61,6 +102,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
{ {
super.getNetworkedData(data); super.getNetworkedData(data);
data.add(isActive);
data.add(itemCount); data.add(itemCount);
if(itemCount > 0) if(itemCount > 0)
@ -77,12 +119,15 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
{ {
super.handlePacketData(dataStream); super.handlePacketData(dataStream);
isActive = dataStream.readBoolean();
itemCount = dataStream.readInt(); itemCount = dataStream.readInt();
if(itemCount > 0) if(itemCount > 0)
{ {
itemType = new ItemStack(dataStream.readInt(), 0, dataStream.readInt()); itemType = new ItemStack(dataStream.readInt(), 0, dataStream.readInt());
} }
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
} }
@Override @Override
@ -169,6 +214,19 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
setItemCount(itemCount + itemstack.stackSize); 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) public void setItemType(ItemStack stack)
@ -253,4 +311,41 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
{ {
return itemType != null && itemType.isItemEqual(itemstack); 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