mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
143 lines
3.9 KiB
Java
143 lines
3.9 KiB
Java
package com.hbm.entity.item;
|
|
|
|
import com.hbm.blocks.ModBlocks;
|
|
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.item.EntityItem;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.util.DamageSource;
|
|
import net.minecraft.world.World;
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
|
|
public class EntityMovingItem extends Entity {
|
|
|
|
public EntityMovingItem(World p_i1582_1_) {
|
|
super(p_i1582_1_);
|
|
this.setSize(0.5F, 0.25F);
|
|
this.noClip = true;
|
|
}
|
|
|
|
public void setItemStack(ItemStack stack) {
|
|
|
|
this.getDataWatcher().updateObject(10, stack);
|
|
this.getDataWatcher().setObjectWatched(10);
|
|
}
|
|
|
|
public ItemStack getItemStack() {
|
|
|
|
ItemStack stack = this.getDataWatcher().getWatchableObjectItemStack(10);
|
|
return stack == null ? new ItemStack(Blocks.stone) : stack;
|
|
}
|
|
|
|
public boolean canBeCollidedWith() {
|
|
return true;
|
|
}
|
|
|
|
public boolean interactFirst(EntityPlayer player) {
|
|
|
|
if(!worldObj.isRemote && player.inventory.addItemStackToInventory(this.getItemStack().copy())) {
|
|
this.setDead();
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public boolean attackEntityFrom(DamageSource source, float amount) {
|
|
|
|
if(!worldObj.isRemote) {
|
|
worldObj.spawnEntityInWorld(new EntityItem(worldObj, posX, posY, posZ, this.getItemStack()));
|
|
this.setDead();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public boolean canAttackWithItem() {
|
|
return true;
|
|
}
|
|
|
|
public boolean hitByEntity(Entity attacker) {
|
|
|
|
if(attacker instanceof EntityPlayer) {
|
|
}
|
|
|
|
this.setDead();
|
|
|
|
return false;
|
|
}
|
|
|
|
protected boolean canTriggerWalking() {
|
|
return true;
|
|
}
|
|
|
|
private int schedule = 0;
|
|
|
|
public void onUpdate() {
|
|
|
|
if(!worldObj.isRemote) {
|
|
|
|
if(worldObj.getBlock((int)Math.floor(posX), (int)Math.floor(posY), (int)Math.floor(posZ)) != ModBlocks.conveyor) {
|
|
this.setDead();
|
|
worldObj.spawnEntityInWorld(new EntityItem(worldObj, posX, posY, posZ, this.getItemStack()));
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(worldObj.getBlock((int)Math.floor(posX), (int)Math.floor(posY), (int)Math.floor(posZ)) == ModBlocks.conveyor) {
|
|
|
|
if(schedule <= 0) {
|
|
ForgeDirection dir = ForgeDirection.getOrientation(worldObj.getBlockMetadata((int)Math.floor(posX), (int)Math.floor(posY), (int)Math.floor(posZ)));
|
|
|
|
if(worldObj.getBlock((int)Math.floor(posX), (int)Math.floor(posY) + 1, (int)Math.floor(posZ)) == ModBlocks.conveyor && motionY >= 0) {
|
|
dir = ForgeDirection.DOWN;
|
|
}
|
|
|
|
if(worldObj.getBlock((int)Math.floor(posX), (int)Math.floor(posY) - 1, (int)Math.floor(posZ)) == ModBlocks.conveyor && motionY <= 0) {
|
|
dir = ForgeDirection.UP;
|
|
}
|
|
|
|
double speed = 0.1;
|
|
|
|
schedule = (int) (1 / speed);
|
|
motionX = -speed * dir.offsetX;
|
|
motionY = -speed * dir.offsetY;
|
|
motionZ = -speed * dir.offsetZ;
|
|
}
|
|
|
|
this.moveEntity(motionX, motionY, motionZ);
|
|
schedule--;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void entityInit() {
|
|
this.getDataWatcher().addObjectByDataType(10, 5);
|
|
}
|
|
|
|
@Override
|
|
protected void readEntityFromNBT(NBTTagCompound nbt) {
|
|
|
|
NBTTagCompound compound = nbt.getCompoundTag("Item");
|
|
this.setItemStack(ItemStack.loadItemStackFromNBT(compound));
|
|
|
|
ItemStack stack = getDataWatcher().getWatchableObjectItemStack(10);
|
|
|
|
schedule = nbt.getInteger("schedule");
|
|
|
|
if (stack == null || stack.stackSize <= 0)
|
|
this.setDead();
|
|
}
|
|
|
|
@Override
|
|
protected void writeEntityToNBT(NBTTagCompound nbt) {
|
|
|
|
if (this.getItemStack() != null)
|
|
nbt.setTag("Item", this.getItemStack().writeToNBT(new NBTTagCompound()));
|
|
|
|
nbt.setInteger("schedule", schedule);
|
|
}
|
|
|
|
}
|