Block breaker and placer are functional

This commit is contained in:
Calclavia 2014-03-20 22:00:39 +08:00
parent dbe2ce3612
commit 6e3f0b9fd3
3 changed files with 148 additions and 81 deletions

View file

@ -65,8 +65,12 @@ allprojects {
dependencies { dependencies {
compile group: 'universalelectricity', name: 'Universal-Electricity', version: "${rootProject.config.version.universalelectricity}", classifier: "dev" compile group: 'universalelectricity', name: 'Universal-Electricity', version: "${rootProject.config.version.universalelectricity}", classifier: "dev"
compile group: 'calclavia-core-development', name: 'calclavia-core', version: "${rootProject.config.version.calclaviacore}", classifier: "dev" if (ENV.JOB_NAME == "Resonant-Induction-Development")
compile name: 'CodeChickenLib', version: "${config.version.minecraft}-${config.version.cclib}", ext: 'jar' compile group: 'calclavia-core-development', name: 'calclavia-core', version: "${rootProject.config.version.calclaviacore}", classifier: "dev"
else
compile group: 'calclaviacore', name: 'calclavia-core', version: "${config.version.calclaviacore}", classifier: "dev"
compile name: 'CodeChickenLib', version: "${config.version.minecraft}-${config.version.cclib}", ext: 'jar'
compile name: 'ForgeMultipart', version: "${config.version.minecraft}-${config.version.fmp}", ext: 'jar' compile name: 'ForgeMultipart', version: "${config.version.minecraft}-${config.version.fmp}", ext: 'jar'
compile name: 'NotEnoughItems', version: "${config.version.nei}", ext: 'jar' compile name: 'NotEnoughItems', version: "${config.version.nei}", ext: 'jar'
compile name: 'CodeChickenCore', version: "${config.version.cccore}", ext: 'jar' compile name: 'CodeChickenCore', version: "${config.version.cccore}", ext: 'jar'

View file

@ -30,6 +30,8 @@ import java.util.ArrayList;
*/ */
public class TileBreaker extends TileInventory implements IRotatable, IPacketReceiver public class TileBreaker extends TileInventory implements IRotatable, IPacketReceiver
{ {
private boolean doWork = false;
public TileBreaker() public TileBreaker()
{ {
super(Material.iron); super(Material.iron);
@ -48,7 +50,26 @@ public class TileBreaker extends TileInventory implements IRotatable, IPacketRec
work(); work();
} }
@Override
public void updateEntity()
{
if (doWork)
{
doWork();
doWork = false;
}
}
public void work() public void work()
{
if (isIndirectlyPowered())
{
doWork = true;
}
}
public void doWork()
{ {
if (isIndirectlyPowered()) if (isIndirectlyPowered())
{ {

View file

@ -13,6 +13,7 @@ import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.Packet;
@ -28,94 +29,135 @@ import universalelectricity.api.vector.Vector3;
*/ */
public class TilePlacer extends TileInventory implements IRotatable, IPacketReceiver public class TilePlacer extends TileInventory implements IRotatable, IPacketReceiver
{ {
public TilePlacer () private boolean doWork = false;
{
super(Material.iron);
normalRender = false;
}
@Override public TilePlacer()
public void onAdded () {
{ super(Material.iron);
work(); normalRender = false;
} }
@Override @Override
public void onNeighborChanged () public void onAdded()
{ {
work(); work();
} }
public void work () @Override
{ public void onNeighborChanged()
if (isIndirectlyPowered()) {
{ work();
ForgeDirection dir = getDirection(); }
ItemStack placeStack = null;
if (getStackInSlot(0) == null)
{
ForgeDirection op = dir.getOpposite();
TileEntity tile = getWorldObj().getBlockTileEntity(x() + op.offsetX, y() + op.offsetY, z() + op.offsetZ);
if (tile instanceof IInventory) @Override
{ public void updateEntity()
ItemStack candidate = InventoryUtility.takeTopItemFromInventory((IInventory) tile, dir.ordinal()); {
if (candidate != null) if (doWork)
this.incrStackSize(0, candidate); {
} doWork();
} doWork = false;
placeStack = getStackInSlot(0); }
}
} public void work()
} {
if (isIndirectlyPowered())
{
doWork = true;
}
}
@Override public void doWork()
protected boolean use (EntityPlayer player, int hitSide, Vector3 hit) {
{ ForgeDirection dir = getDirection();
interactCurrentItem(this, 0, player); Vector3 placePos = position().translate(dir);
return true;
}
@Override if (world().isAirBlock(placePos.intX(), placePos.intY(), placePos.intZ()))
public Packet getDescriptionPacket () {
{
NBTTagCompound nbt = new NBTTagCompound();
writeToNBT(nbt);
return ResonantInduction.PACKET_TILE.getPacket(this, nbt);
}
@Override if (getStackInSlot(0) == null)
public void onReceivePacket (ByteArrayDataInput data, EntityPlayer player, Object... extra) {
{ ForgeDirection op = dir.getOpposite();
try TileEntity tile = getWorldObj().getBlockTileEntity(x() + op.offsetX, y() + op.offsetY, z() + op.offsetZ);
{
readFromNBT(PacketHandler.readNBTTagCompound(data));
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override if (tile instanceof IInventory)
@SideOnly(Side.CLIENT) {
protected TileRender newRenderer () ItemStack candidate = InventoryUtility.takeTopItemFromInventory((IInventory) tile, dir.ordinal());
{ if (candidate != null)
return new TileRender() {
{ incrStackSize(0, candidate);
@Override }
public boolean renderDynamic (Vector3 position, boolean isItem, float frame) }
{ }
if (!isItem)
{
GL11.glPushMatrix();
RenderItemOverlayUtility.renderItemOnSides(TilePlacer.this, getStackInSlot(0), position.x, position.y, position.z);
GL11.glPopMatrix();
}
return false; ItemStack placeStack = getStackInSlot(0);
}
}; if (placeStack != null && placeStack.getItem() instanceof ItemBlock)
} {
ItemBlock itemBlock = ((ItemBlock) placeStack.getItem());
try
{
itemBlock.placeBlockAt(placeStack, null, world(), placePos.intX(), placePos.intY(), placePos.intZ(), 0, 0, 0, 0, 0);
}
catch (Exception e)
{
// e.printStackTrace();
}
decrStackSize(0, 1);
markUpdate();
}
}
}
@Override
protected boolean use(EntityPlayer player, int hitSide, Vector3 hit)
{
interactCurrentItem(this, 0, player);
return true;
}
@Override
public Packet getDescriptionPacket()
{
NBTTagCompound nbt = new NBTTagCompound();
writeToNBT(nbt);
return ResonantInduction.PACKET_TILE.getPacket(this, nbt);
}
@Override
public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra)
{
try
{
readFromNBT(PacketHandler.readNBTTagCompound(data));
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override
@SideOnly(Side.CLIENT)
protected TileRender newRenderer()
{
return new TileRender()
{
@Override
public boolean renderDynamic(Vector3 position, boolean isItem, float frame)
{
if (!isItem)
{
GL11.glPushMatrix();
RenderItemOverlayUtility.renderItemOnSides(TilePlacer.this, getStackInSlot(0), position.x, position.y, position.z);
GL11.glPopMatrix();
}
return false;
}
};
}
} }