В общем, решил сделать хитровыделанный костер, который был бы как блок, но одновременно и энтити. Код следующий, можете наблюдать ниже. С ним возникли проблемы.
EntityFireplace - в этом классе ругается на ... как это решить? Сам класс ниже.
Едем дальше. Класс итема.
ItemFireplace. Здесь ругается на w.getWorldVec3Pool(), w.rayTraceBlocks_do_do(vec3, vec31, false, true).
Сам класс:
Как решить данные проблемы? Задавайте ваши ответы. Буду очень благодарен вам!
EntityFireplace - в этом классе ругается на ... как это решить? Сам класс ниже.
Код:
if(super.worldObj.getBlock(this.blockX, this.blockY, this.blockZ) == LDItems.fireplace) {
((BlockLightTile)super.worldObj.getTileEntity(this.blockX, this.blockY, this.blockZ)).timer = 0;
} else {
super.worldObj.setBlock(this.blockX, this.blockY, this.blockZ, LDItems.fireplace);
}
Код:
public class EntityFireplace extends Entity {
public boolean isFire;
int fireTime;
public int blockX;
public int blockY;
public int blockZ;
public EntityFireplace(World w) {
super(w);
this.isFire = false;
this.fireTime = 0;
this.setSize(2.0F, 0.4F);
}
public EntityFireplace(World w, double X, double Y, double Z, float rotation) {
this(w);
this.setPositionAndRotation(X, Y, Z, rotation, 0.0F);
}
protected void entityInit() {}
protected void readEntityFromNBT(NBTTagCompound nbttagcompound) {
this.isFire = nbttagcompound.getBoolean("isFire");
this.fireTime = nbttagcompound.getInteger("fireTime");
this.blockX = nbttagcompound.getInteger("bX");
this.blockY = nbttagcompound.getInteger("bY");
this.blockZ = nbttagcompound.getInteger("bZ");
}
protected void writeEntityToNBT(NBTTagCompound nbttagcompound) {
nbttagcompound.setBoolean("isFire", this.isFire);
nbttagcompound.setInteger("fireTime", this.fireTime);
nbttagcompound.setInteger("bX", this.blockX);
nbttagcompound.setInteger("bY", this.blockY);
nbttagcompound.setInteger("bZ", this.blockZ);
}
public AxisAlignedBB getBoundingBox() {
return super.boundingBox;
}
public boolean interactFirst(EntityPlayer p) {
if(!super.worldObj.isRemote && p.getCurrentEquippedItem() != null) {
ItemStack is = p.getCurrentEquippedItem();
/*if(!this.isFire && is.itemID == Item.flintAndSteel.itemID) {
this.isFire = true;
super.worldObj.playSoundAtEntity(this, "fire.ignite", 1.0F, 1.8F);
p.getCurrentEquippedItem().damageItem(1, p);
return true;
}
EntityItem rnd;
if(this.isFire && is.itemID == Item.porkRaw.itemID) {
--is.stackSize;
rnd = p.dropPlayerItem(new ItemStack(Item.porkCooked));
rnd.delayBeforeCanPickup = 0;
return true;
}
if(this.isFire && is.itemID == Item.beefRaw.itemID) {
--is.stackSize;
rnd = p.dropPlayerItem(new ItemStack(Item.beefCooked));
rnd.delayBeforeCanPickup = 0;
return true;
}
if(this.isFire && is.itemID == Item.chickenRaw.itemID) {
--is.stackSize;
rnd = p.dropPlayerItem(new ItemStack(Item.chickenCooked));
rnd.delayBeforeCanPickup = 0;
return true;
}
if(this.isFire && is.itemID == Item.fishRaw.itemID) {
--is.stackSize;
rnd = p.dropPlayerItem(new ItemStack(Item.fishCooked));
rnd.delayBeforeCanPickup = 0;
return true;
}*/
}
return false;
}
public boolean canBeCollidedWith() {
return !super.isDead;
}
public void onUpdate() {
if(!super.worldObj.isRemote && this.isFire) {
if(++this.fireTime > '\ubb80') {
this.setDead();
}
if(super.worldObj.getBlock(this.blockX, this.blockY, this.blockZ) == LDItems.fireplace) {
((BlockLightTile)super.worldObj.getTileEntity(this.blockX, this.blockY, this.blockZ)).timer = 0;
} else {
super.worldObj.setBlock(this.blockX, this.blockY, this.blockZ, LDItems.fireplace);
}
}
}
Едем дальше. Класс итема.
ItemFireplace. Здесь ругается на w.getWorldVec3Pool(), w.rayTraceBlocks_do_do(vec3, vec31, false, true).
Сам класс:
Код:
public class ItemFireplace extends Item {
public ItemFireplace() {
this.setCreativeTab(CreativeTabs.tabRedstone);
this.setMaxStackSize(1);
}
public ItemStack onItemRightClick(ItemStack is, World w, EntityPlayer p) {
if(w.isRemote) {
return is;
} else {
Vec3 vec3 = w.getWorldVec3Pool().getVecFromPool(p.posX, p.posY + (double)p.getEyeHeight(), p.posZ);
Vec3 lookVec = p.getLookVec();
Vec3 vec31 = w.getWorldVec3Pool().getVecFromPool(p.posX + lookVec.xCoord * 4.0D, p.posY + (double)p.getEyeHeight() + lookVec.yCoord * 4.0D, p.posZ + lookVec.zCoord * 4.0D);
MovingObjectPosition b = w.rayTraceBlocks_do_do(vec3, vec31, false, true);
if(b != null && b.sideHit == 1) {
double posX = (double)((int)b.hitVec.xCoord) + (b.hitVec.xCoord > 0.0D?0.5D:-0.5D);
double posZ = (double)((int)b.hitVec.zCoord) + (b.hitVec.zCoord > 0.0D?0.5D:-0.5D);
EntityFireplace e = new EntityFireplace(w, posX, b.hitVec.yCoord, posZ, p.rotationYaw);
if(!w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ) || !w.isAirBlock(b.blockX, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ - 1) || w.getBlockId(b.blockX, b.blockY, b.blockZ) != 2) {
return is;
}
List list = w.getEntitiesWithinAABBExcludingEntity(p, e.boundingBox.expand(LDEngine.distanceBetweenFireplace, 10.0D, LDEngine.distanceBetweenFireplace));
for(int l = 0; l < list.size(); ++l) {
if(list.get(l) instanceof EntityFireplace) {
return is;
}
}
e.blockX = b.blockX;
e.blockY = b.blockY + 1;
e.blockZ = b.blockZ;
w.spawnEntityInWorld(e);
--is.stackSize;
}
return is;
}
}
public static void KosterClient(ItemStack is, World w, EntityPlayer p) {
Vec3 vec3 = w.getWorldVec3Pool().getVecFromPool(p.posX, p.posY + (double)p.getEyeHeight(), p.posZ);
Vec3 lookVec = p.getLookVec();
Vec3 vec31 = w.getWorldVec3Pool().getVecFromPool(p.posX + lookVec.xCoord * 4.0D, p.posY + (double)p.getEyeHeight() + lookVec.yCoord * 4.0D, p.posZ + lookVec.zCoord * 4.0D);
MovingObjectPosition b = w.rayTraceBlocks_do_do(vec3, vec31, false, true);
if(b != null && b.sideHit == 1) {
double posX = (double)((int)b.hitVec.xCoord) + (b.hitVec.xCoord > 0.0D?0.5D:-0.5D);
double posZ = (double)((int)b.hitVec.zCoord) + (b.hitVec.zCoord > 0.0D?0.5D:-0.5D);
EntityFireplaceClient e = null;
List list = w.getEntitiesWithinAABBExcludingEntity(p, p.boundingBox.expand(12.0D, 6.0D, 12.0D));
boolean flag = true;
int l;
for(l = 0; l < list.size(); ++l) {
if(list.get(l) instanceof EntityFireplaceClient) {
e = (EntityFireplaceClient)list.get(l);
break;
}
}
list = w.getEntitiesWithinAABBExcludingEntity(p, p.boundingBox.expand(LDEngine.distanceBetweenFireplace, 10.0D, LDEngine.distanceBetweenFireplace));
for(l = 0; l < list.size(); ++l) {
if(list.get(l) instanceof EntityFireplace) {
flag = false;
break;
}
}
if(e != null) {
e.age = 0;
e.setPositionAndRotation(posX, b.hitVec.yCoord, posZ, p.rotationYaw, 0.0F);
if(!w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ) || !w.isAirBlock(b.blockX, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ - 1) || w.getBlockId(b.blockX, b.blockY, b.blockZ) != 2) {
e.placeAllowed = false;
return;
}
e.placeAllowed = flag;
} else {
e = new EntityFireplaceClient(w, posX, b.hitVec.yCoord, posZ, p.rotationYaw);
w.spawnEntityInWorld(e);
if(!w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ) || !w.isAirBlock(b.blockX, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ + 1) || !w.isAirBlock(b.blockX - 1, b.blockY + 1, b.blockZ - 1) || !w.isAirBlock(b.blockX + 1, b.blockY + 1, b.blockZ - 1) || w.getBlockId(b.blockX, b.blockY, b.blockZ) != 2) {
e.placeAllowed = false;
return;
}
e.placeAllowed = true;
}
}
}
/*@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister reg) {
super.itemIcon = reg.registerIcon("hcsmod:koster");
}*/
}
Как решить данные проблемы? Задавайте ваши ответы. Буду очень благодарен вам!