assemblyline/src/main/java/assemblyline/common/machine/command/CommandPlace.java
2023-02-10 17:51:10 +01:00

120 lines
4.4 KiB
Java

package assemblyline.common.machine.command;
import assemblyline.common.machine.command.Command;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.IPlantable;
import net.minecraftforge.common.util.ForgeDirection;
import universalelectricity.core.vector.Vector3;
public class CommandPlace extends Command {
int PLACE_TIME = 30;
@Override
public void onTaskStart() {
super.onTaskStart();
}
@Override
protected boolean doTask() {
super.doTask();
Vector3 serachPosition = this.tileEntity.getHandPosition();
Block block = serachPosition.getBlock((IBlockAccess) this.world);
if (block == null && this.ticks >= this.PLACE_TIME) {
for (Entity entity : this.tileEntity.getGrabbedEntities()) {
ItemStack itemStack;
if (!(entity instanceof EntityItem)
|| (itemStack = ((EntityItem) entity).getEntityItem()) == null)
continue;
if (itemStack.getItem() instanceof ItemBlock) {
((ItemBlock) itemStack.getItem())
.placeBlockAt(
itemStack,
null,
this.world,
serachPosition.intX(),
serachPosition.intY(),
serachPosition.intZ(),
0,
0.5f,
0.5f,
0.5f,
itemStack.getItemDamage()
);
this.tileEntity.dropEntity(entity);
return false;
}
if (!(itemStack.getItem() instanceof IPlantable))
continue;
IPlantable plantable = (IPlantable) itemStack.getItem();
Block blockBelow
= Vector3.add(serachPosition, new Vector3(0.0, -1.0, 0.0))
.getBlock((IBlockAccess) this.world);
if (blockBelow == null
|| !blockBelow.canSustainPlant(
this.world,
serachPosition.intX(),
serachPosition.intY(),
serachPosition.intZ(),
ForgeDirection.UP,
plantable
))
continue;
Block plantBlock = plantable.getPlant(
this.world,
serachPosition.intX(),
serachPosition.intY(),
serachPosition.intZ()
);
int blockMetadata = plantable.getPlantMetadata(
this.world,
serachPosition.intX(),
serachPosition.intY(),
serachPosition.intZ()
);
if (!this.world.setBlock(
serachPosition.intX(),
serachPosition.intY(),
serachPosition.intZ(),
plantBlock,
blockMetadata,
3
)
|| this.world.getBlock(
serachPosition.intX(),
serachPosition.intY(),
serachPosition.intZ()
) != plantBlock)
continue;
plantBlock.onBlockPlacedBy(
this.world,
serachPosition.intX(),
serachPosition.intY(),
serachPosition.intZ(),
null,
itemStack
);
plantBlock.onPostBlockPlaced(
this.world,
serachPosition.intX(),
serachPosition.intY(),
serachPosition.intZ(),
blockMetadata
);
this.tileEntity.dropEntity(entity);
return false;
}
}
return false;
}
@Override
public String toString() {
return "PLACE";
}
}