есть блок :
он ставит дверь и убирает ее по сигналу редстоуна.
однако я пытался реализовать функцию возврашения удаленных блоков , частично получилось но даже когда ничего нет при установке блок выкидывает кучу камня(материал двери).
может кто-нибудь помочь ?
Код:
package net.glider.src.blocks;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.BlockDirectional;
import net.minecraft.entity.Entity;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.Direction;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class DoorBlock extends BlockMod {
private boolean Active = false;
public DoorBlock(String uln) {
super(uln);
}
protected int getIS(World world, int x, int y, int z, int par5) {
int i1 = BlockDirectional.getDirection(par5);
int j1 = x + Direction.offsetX[i1];
int k1 = z + Direction.offsetZ[i1];
int l1 = world.getIndirectPowerLevelTo(j1, y, k1,
Direction.directionToFacing[i1]);
return l1 >= 15 ? l1 : Math.max(
l1,
world.getBlock(j1, y, k1) == Blocks.redstone_wire ? world
.getBlockMetadata(j1, y, k1) : 0);
}
public int getISA(World w, int x, int y, int z) {
if (getIS(w, x, y, z, 1) >= 1) {
return getIS(w, x, y, z, 1);
} else if (getIS(w, x, y, z, 2) >= 1) {
return getIS(w, x, y, z, 2);
} else if (getIS(w, x, y, z, 3) >= 1) {
return getIS(w, x, y, z, 3);
} else if (getIS(w, x, y, z, 4) >= 1) {
return getIS(w, x, y, z, 4);
} else if (getIS(w, x, y, z, 5) >= 1) {
return getIS(w, x, y, z, 5);
} else if (getIS(w, x, y, z, 6) >= 1) {
return getIS(w, x, y, z, 6);
} else {
return 0;
}
}
private void spawnitem(Item item,World w,int x,int y,int z)
{
Entity e = new Entity(w) {
@Override
protected void writeEntityToNBT(NBTTagCompound p_70014_1_) {}
@Override
protected void readEntityFromNBT(NBTTagCompound p_70037_1_) {}
@Override
protected void entityInit() {}
};
e.setPosition(x, y+1, z);
e.dropItem(item, 11);
e = null;
}
@Override
public void onNeighborBlockChange(World w, int x, int y, int z, Block b) {
if (getISA(w, x, y, z) >= 1) {
if (Active != getISA(w, x, y, z) >= 1) {
for (int i = 0; i != 3; i++) {
for (int i2 = 1; i2 != 4; i2++) {
if (Active==false && w.getBlock(x + i2, y + i, z)==Blocks.air)
{
}else{
spawnitem(w.getBlock(x + i2, y + i, z).getItem(w, x, y, z),w,x,y,z);
}
// System.out.println("placing block");
w.setBlock(x + i2, y + i, z, Blocks.stone);
}
}
}
Active = true;
} else if(getISA(w, x, y, z) ==0) {
if (Active != getISA(w, x, y, z) >= 1) {
for (int i = 0; i != 3 ; i++) {
for (int o = 1; o != 4; o++) {
//System.out.println("deliting block");
w.setBlock(x + o, y + i, z, Blocks.air);
}
}
Active = false;
}
}
}
@Override
public boolean canConnectRedstone(IBlockAccess world, int x, int y, int z,
int side) {
return true;
}
}
однако я пытался реализовать функцию возврашения удаленных блоков , частично получилось но даже когда ничего нет при установке блок выкидывает кучу камня(материал двери).
может кто-нибудь помочь ?