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

140 lines
5.3 KiB
Java

package assemblyline.common.machine.command;
import java.util.List;
import assemblyline.common.machine.belt.TileEntityConveyorBelt;
import assemblyline.common.machine.command.Command;
import assemblyline.common.machine.command.GrabDictionary;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityAgeable;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess;
import universalelectricity.core.vector.Vector3;
public class CommandGrab extends Command {
public static final float radius = 0.5f;
public boolean child = false;
private TileEntityConveyorBelt belt;
private Class entityToInclude;
@Override
public void onTaskStart() {
super.onTaskStart();
this.entityToInclude = Entity.class;
if (this.getArgs() != null && this.getArgs().length > 0
&& this.getArgs()[0] != null) {
if (this.getArg(0).equalsIgnoreCase("baby")
|| this.getArg(0).equalsIgnoreCase("child")) {
this.child = true;
if (this.getArgs().length > 1 && this.getArgs()[1] != null) {
this.entityToInclude
= GrabDictionary.get(this.getArg(1)).getEntityClass();
}
} else {
this.entityToInclude
= GrabDictionary.get(this.getArg(0)).getEntityClass();
if (this.getArgs().length > 1 && this.getArgs()[1] != null
&& (this.getArg(1).equalsIgnoreCase("baby")
|| this.getArg(0).equalsIgnoreCase("child"))) {
this.child = true;
}
}
}
}
@Override
protected boolean doTask() {
super.doTask();
if (this.tileEntity.getGrabbedEntities().size() > 0) {
return false;
}
Vector3 serachPosition = this.tileEntity.getHandPosition();
List found = this.world.getEntitiesWithinAABB(
this.entityToInclude,
AxisAlignedBB.getBoundingBox(
(double) (serachPosition.x - 0.5),
(double) (serachPosition.y - 0.5),
(double) (serachPosition.z - 0.5),
(double) (serachPosition.x + 0.5),
(double) (serachPosition.y + 0.5),
(double) (serachPosition.z + 0.5)
)
);
TileEntity ent = serachPosition.getTileEntity((IBlockAccess) this.world);
Vector3 searchPostion2 = Vector3.add(serachPosition, new Vector3(0.0, -1.0, 0.0));
TileEntity ent2 = searchPostion2.getTileEntity((IBlockAccess) this.world);
if (ent instanceof TileEntityConveyorBelt) {
this.belt = (TileEntityConveyorBelt) ent;
} else if (ent2 instanceof TileEntityConveyorBelt) {
this.belt = (TileEntityConveyorBelt) ent2;
}
if (found != null && found.size() > 0) {
for (int i = 0; i < found.size(); ++i) {
if (found.get(i) == null || found.get(i) instanceof EntityArrow
|| found.get(i) instanceof EntityPlayer
|| ((Entity) found.get((int) i)).ridingEntity != null
|| found.get(i) instanceof EntityAgeable
&& (!(found.get(i) instanceof EntityAgeable)
|| this.child != ((EntityAgeable) found.get(i)).isChild()))
continue;
this.tileEntity.grabEntity((Entity) found.get(i));
this.world.playSound(
(double) this.tileEntity.xCoord,
(double) this.tileEntity.yCoord,
(double) this.tileEntity.zCoord,
"random.pop",
0.2f,
((this.tileEntity.getWorldObj().rand.nextFloat()
- this.tileEntity.getWorldObj().rand.nextFloat())
* 0.7f
+ 1.0f)
* 1.0f,
true
);
if (this.belt != null) {
this.belt.IgnoreEntity((Entity) found.get(i));
}
return false;
}
}
return true;
}
@Override
public void readFromNBT(NBTTagCompound taskCompound) {
super.readFromNBT(taskCompound);
this.child = taskCompound.getBoolean("child");
this.entityToInclude
= GrabDictionary.get(taskCompound.getString("name")).getEntityClass();
}
@Override
public void writeToNBT(NBTTagCompound taskCompound) {
super.writeToNBT(taskCompound);
taskCompound.setBoolean("child", this.child);
taskCompound.setString(
"name",
this.entityToInclude != null
? GrabDictionary.get(this.entityToInclude).getName()
: ""
);
}
@Override
public String toString() {
String baby = "";
String entity = "";
if (this.entityToInclude != null) {
entity = GrabDictionary.get(this.entityToInclude).getName();
if (this.child) {
baby = "baby ";
}
}
return "GRAB " + baby + entity;
}
}