mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
loading dock for drones
This commit is contained in:
parent
ac1d496bf6
commit
b1dd140737
@ -7,9 +7,11 @@ import java.util.Random;
|
||||
import com.hbm.blocks.ILookOverlay;
|
||||
import com.hbm.blocks.ITooltipProvider;
|
||||
import com.hbm.lib.RefStrings;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.tileentity.network.TileEntityDroneCrate;
|
||||
import com.hbm.util.I18nUtil;
|
||||
|
||||
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.Block;
|
||||
@ -54,6 +56,18 @@ public class DroneCrate extends BlockContainer implements ILookOverlay, ITooltip
|
||||
public IIcon getIcon(int side, int metadata) {
|
||||
return side == 1 ? this.iconTop : (side == 0 ? this.iconBottom : this.blockIcon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
|
||||
if(world.isRemote) {
|
||||
return true;
|
||||
} else if(!player.isSneaking()) {
|
||||
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
|
||||
|
||||
@ -1,14 +1,20 @@
|
||||
package com.hbm.entity.item;
|
||||
|
||||
import com.hbm.inventory.FluidStack;
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityDeliveryDrone extends Entity {
|
||||
public class EntityDeliveryDrone extends Entity implements IInventory {
|
||||
|
||||
protected int turnProgress;
|
||||
protected double syncPosX;
|
||||
@ -17,6 +23,9 @@ public class EntityDeliveryDrone extends Entity {
|
||||
@SideOnly(Side.CLIENT) protected double velocityX;
|
||||
@SideOnly(Side.CLIENT) protected double velocityY;
|
||||
@SideOnly(Side.CLIENT) protected double velocityZ;
|
||||
|
||||
protected ItemStack[] slots = new ItemStack[this.getSizeInventory()];
|
||||
public FluidStack fluid;
|
||||
|
||||
public double targetX = -1;
|
||||
public double targetY = -1;
|
||||
@ -60,7 +69,20 @@ public class EntityDeliveryDrone extends Entity {
|
||||
|
||||
@Override
|
||||
protected void entityInit() {
|
||||
this.dataWatcher.addObject(10, new Integer(0));
|
||||
this.dataWatcher.addObject(10, new Byte((byte) 0));
|
||||
}
|
||||
|
||||
/**
|
||||
* 0: Empty<br>
|
||||
* 1: Crate<br>
|
||||
* 2: Barrel<br>
|
||||
*/
|
||||
public void setAppearance(int style) {
|
||||
this.dataWatcher.updateObject(10, (byte) style);
|
||||
}
|
||||
|
||||
public int getAppearance() {
|
||||
return this.dataWatcher.getWatchableObjectByte(10);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -107,15 +129,57 @@ public class EntityDeliveryDrone extends Entity {
|
||||
public double getSpeed() {
|
||||
return 0.125D;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void readEntityFromNBT(NBTTagCompound p_70037_1_) {
|
||||
protected void writeEntityToNBT(NBTTagCompound nbt) {
|
||||
|
||||
nbt.setDouble("tX", targetX);
|
||||
nbt.setDouble("tY", targetY);
|
||||
nbt.setDouble("tZ", targetZ);
|
||||
|
||||
NBTTagList nbttaglist = new NBTTagList();
|
||||
|
||||
for(int i = 0; i < this.slots.length; ++i) {
|
||||
if(this.slots[i] != null) {
|
||||
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
|
||||
nbttagcompound1.setByte("Slot", (byte) i);
|
||||
this.slots[i].writeToNBT(nbttagcompound1);
|
||||
nbttaglist.appendTag(nbttagcompound1);
|
||||
}
|
||||
}
|
||||
|
||||
nbt.setTag("Items", nbttaglist);
|
||||
|
||||
if(fluid != null) {
|
||||
nbt.setString("fluidType", fluid.type.getUnlocalizedName());
|
||||
nbt.setInteger("fluidAmount", fluid.fill);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeEntityToNBT(NBTTagCompound p_70014_1_) {
|
||||
protected void readEntityFromNBT(NBTTagCompound nbt) {
|
||||
|
||||
if(nbt.hasKey("tY")) {
|
||||
this.targetX = nbt.getDouble("tX");
|
||||
this.targetY = nbt.getDouble("tY");
|
||||
this.targetZ = nbt.getDouble("tZ");
|
||||
}
|
||||
|
||||
NBTTagList nbttaglist = nbt.getTagList("Items", 10);
|
||||
this.slots = new ItemStack[this.getSizeInventory()];
|
||||
|
||||
for(int i = 0; i < nbttaglist.tagCount(); ++i) {
|
||||
NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i);
|
||||
int j = nbttagcompound1.getByte("Slot") & 255;
|
||||
|
||||
if(j >= 0 && j < this.slots.length) {
|
||||
this.slots[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1);
|
||||
}
|
||||
}
|
||||
|
||||
if(nbt.hasKey("fluidType")) {
|
||||
this.fluid = new FluidStack(Fluids.fromName(nbt.getString("fluidType")), nbt.getInteger("fluidAmount"));
|
||||
}
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@ -135,4 +199,63 @@ public class EntityDeliveryDrone extends Entity {
|
||||
this.motionY = this.velocityY;
|
||||
this.motionZ = this.velocityZ;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlot(int slot) {
|
||||
return slots[slot];
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int slot, int amount) {
|
||||
if(this.slots[slot] != null) {
|
||||
ItemStack itemstack;
|
||||
|
||||
if(this.slots[slot].stackSize <= amount) {
|
||||
itemstack = this.slots[slot];
|
||||
this.slots[slot] = null;
|
||||
return itemstack;
|
||||
} else {
|
||||
itemstack = this.slots[slot].splitStack(amount);
|
||||
|
||||
if(this.slots[slot].stackSize == 0) {
|
||||
this.slots[slot] = null;
|
||||
}
|
||||
|
||||
return itemstack;
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlotOnClosing(int slot) {
|
||||
if(this.slots[slot] != null) {
|
||||
ItemStack itemstack = this.slots[slot];
|
||||
this.slots[slot] = null;
|
||||
return itemstack;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInventorySlotContents(int slot, ItemStack stack) {
|
||||
this.slots[slot] = stack;
|
||||
|
||||
if(stack != null && stack.stackSize > this.getInventoryStackLimit()) {
|
||||
stack.stackSize = this.getInventoryStackLimit();
|
||||
}
|
||||
}
|
||||
|
||||
@Override public int getSizeInventory() { return 18; }
|
||||
@Override public String getInventoryName() { return "container.drone"; }
|
||||
@Override public int getInventoryStackLimit() { return 64; }
|
||||
@Override public boolean hasCustomInventoryName() { return false; }
|
||||
@Override public boolean isUseableByPlayer(EntityPlayer player) { return false; }
|
||||
@Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return false; }
|
||||
|
||||
@Override public void markDirty() { }
|
||||
@Override public void openInventory() { }
|
||||
@Override public void closeInventory() { }
|
||||
}
|
||||
|
||||
@ -0,0 +1,79 @@
|
||||
package com.hbm.inventory.container;
|
||||
|
||||
import com.hbm.items.machine.IItemFluidIdentifier;
|
||||
import com.hbm.tileentity.network.TileEntityDroneCrate;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class ContainerDroneCrate extends Container {
|
||||
|
||||
protected TileEntityDroneCrate crate;
|
||||
|
||||
public ContainerDroneCrate(InventoryPlayer invPlayer, TileEntityDroneCrate inserter) {
|
||||
this.crate = inserter;
|
||||
|
||||
for(int i = 0; i < 3; i++) {
|
||||
for(int j = 0; j < 6; j++) {
|
||||
this.addSlotToContainer(new Slot(inserter, j + i * 6, 8 + j * 18, 17 + i * 18));
|
||||
}
|
||||
}
|
||||
|
||||
this.addSlotToContainer(new Slot(inserter, 18, 125, 53));
|
||||
|
||||
for(int i = 0; i < 3; i++) {
|
||||
for(int j = 0; j < 9; j++) {
|
||||
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 103 + i * 18));
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < 9; i++) {
|
||||
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 161));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int slot) {
|
||||
ItemStack var3 = null;
|
||||
Slot var4 = (Slot) this.inventorySlots.get(slot);
|
||||
|
||||
if(var4 != null && var4.getHasStack()) {
|
||||
ItemStack var5 = var4.getStack();
|
||||
var3 = var5.copy();
|
||||
|
||||
if(slot <= crate.getSizeInventory() - 1) {
|
||||
if(!this.mergeItemStack(var5, crate.getSizeInventory(), this.inventorySlots.size(), true)) {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
|
||||
if(var3.getItem() instanceof IItemFluidIdentifier) {
|
||||
if(!this.mergeItemStack(var5, 18, 19, false))
|
||||
return null;
|
||||
} else if(!this.mergeItemStack(var5, 0, 18, false)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
if(var5.stackSize == 0) {
|
||||
var4.putStack((ItemStack) null);
|
||||
} else {
|
||||
var4.onSlotChanged();
|
||||
}
|
||||
|
||||
var4.onPickupFromSlot(player, var5);
|
||||
}
|
||||
|
||||
return var3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer player) {
|
||||
return crate.isUseableByPlayer(player);
|
||||
}
|
||||
}
|
||||
75
src/main/java/com/hbm/inventory/gui/GUIDroneCrate.java
Normal file
75
src/main/java/com/hbm/inventory/gui/GUIDroneCrate.java
Normal file
@ -0,0 +1,75 @@
|
||||
package com.hbm.inventory.gui;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.inventory.container.ContainerDroneCrate;
|
||||
import com.hbm.lib.RefStrings;
|
||||
import com.hbm.packet.NBTControlPacket;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.tileentity.network.TileEntityDroneCrate;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.audio.PositionedSoundRecord;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class GUIDroneCrate extends GuiInfoContainer {
|
||||
|
||||
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/storage/gui_crate_drone.png");
|
||||
private TileEntityDroneCrate crate;
|
||||
|
||||
public GUIDroneCrate(InventoryPlayer invPlayer, TileEntityDroneCrate crate) {
|
||||
super(new ContainerDroneCrate(invPlayer, crate));
|
||||
this.crate = crate;
|
||||
|
||||
this.xSize = 176;
|
||||
this.ySize = 185;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawScreen(int x, int y, float interp) {
|
||||
super.drawScreen(x, y, interp);
|
||||
|
||||
crate.tank.renderTankInfo(this, x, y, guiLeft + 125, guiTop + 17, 16, 34);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void mouseClicked(int x, int y, int i) {
|
||||
super.mouseClicked(x, y, i);
|
||||
|
||||
String op = null;
|
||||
|
||||
// Toggle type
|
||||
if(guiLeft + 151 <= x && guiLeft + 151 + 18 > x && guiTop + 16 < y && guiTop + 16 + 18 >= y) op = "type";
|
||||
// Toggle mode
|
||||
if(guiLeft + 151 <= x && guiLeft + 151 + 18 > x && guiTop + 52 < y && guiTop + 52 + 18 >= y) op = "mode";
|
||||
|
||||
if(op != null) {
|
||||
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setBoolean(op, true);
|
||||
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, crate.xCoord, crate.yCoord, crate.zCoord));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int i, int j) {
|
||||
String name = this.crate.hasCustomInventoryName() ? this.crate.getInventoryName() : I18n.format(this.crate.getInventoryName());
|
||||
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752);
|
||||
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float interp, int x, int y) {
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
|
||||
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
|
||||
|
||||
drawTexturedModalRect(guiLeft + 151, guiTop + 16, 194, crate.itemType ? 0 : 18, 18, 18);
|
||||
drawTexturedModalRect(guiLeft + 151, guiTop + 52, 176, crate.sendingMode ? 18 : 0, 18, 18);
|
||||
|
||||
crate.tank.renderTank(guiLeft + 125, guiTop + 51, this.zLevel, 16, 34);
|
||||
}
|
||||
}
|
||||
@ -1,7 +1,8 @@
|
||||
package com.hbm.render.item;
|
||||
package com.hbm.render.entity.item;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.entity.item.EntityDeliveryDrone;
|
||||
import com.hbm.main.ResourceManager;
|
||||
|
||||
import net.minecraft.client.renderer.entity.Render;
|
||||
@ -16,17 +17,25 @@ public class RenderDeliveryDrone extends Render {
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslated(x, y, z);
|
||||
|
||||
GL11.glDisable(GL11.GL_CULL_FACE);
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
bindTexture(ResourceManager.delivery_drone_tex);
|
||||
ResourceManager.delivery_drone.renderPart("Drone");
|
||||
ResourceManager.delivery_drone.renderPart("Barrel");
|
||||
|
||||
EntityDeliveryDrone drone = (EntityDeliveryDrone) entity;
|
||||
int style = drone.getAppearance();
|
||||
|
||||
if(style == 1) ResourceManager.delivery_drone.renderPart("Crate");
|
||||
if(style == 2) ResourceManager.delivery_drone.renderPart("Barrel");
|
||||
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getEntityTexture(Entity p_110775_1_) {
|
||||
return null;
|
||||
protected ResourceLocation getEntityTexture(Entity drone) {
|
||||
return ResourceManager.delivery_drone_tex;
|
||||
}
|
||||
}
|
||||
@ -3,29 +3,44 @@ package com.hbm.tileentity.network;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.entity.item.EntityDeliveryDrone;
|
||||
import com.hbm.interfaces.IControlReceiver;
|
||||
import com.hbm.inventory.FluidStack;
|
||||
import com.hbm.inventory.container.ContainerDroneCrate;
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.inventory.fluid.tank.FluidTank;
|
||||
import com.hbm.inventory.gui.GUIDroneCrate;
|
||||
import com.hbm.tileentity.IGUIProvider;
|
||||
import com.hbm.tileentity.INBTPacketReceiver;
|
||||
import com.hbm.tileentity.TileEntityMachineBase;
|
||||
import com.hbm.util.fauxpointtwelve.BlockPos;
|
||||
|
||||
import api.hbm.fluid.IFluidStandardTransceiver;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIProvider, INBTPacketReceiver, IDroneLinkable {
|
||||
public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIProvider, INBTPacketReceiver, IControlReceiver, IDroneLinkable, IFluidStandardTransceiver {
|
||||
|
||||
public FluidTank tank;
|
||||
|
||||
public int nextX = -1;
|
||||
public int nextY = -1;
|
||||
public int nextZ = -1;
|
||||
|
||||
public boolean sendingMode = false;
|
||||
public boolean itemType = true;
|
||||
|
||||
public TileEntityDroneCrate() {
|
||||
super(19);
|
||||
this.tank = new FluidTank(Fluids.NONE, 64_000);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -38,22 +53,141 @@ public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIP
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
this.tank.setType(18, slots);
|
||||
|
||||
if(sendingMode && !itemType && worldObj.getTotalWorldTime() % 20 == 0) {
|
||||
this.subscribeToAllAround(tank.getTankType(), this);
|
||||
}
|
||||
|
||||
if(!sendingMode && !itemType && worldObj.getTotalWorldTime() % 20 == 0) {
|
||||
this.sendFluidToAll(tank, this);
|
||||
}
|
||||
|
||||
if(nextY != -1) {
|
||||
|
||||
List<EntityDeliveryDrone> drones = worldObj.getEntitiesWithinAABB(EntityDeliveryDrone.class, AxisAlignedBB.getBoundingBox(xCoord, yCoord + 1, zCoord, xCoord + 1, yCoord + 2, zCoord + 1));
|
||||
for(EntityDeliveryDrone drone : drones) {
|
||||
if(Vec3.createVectorHelper(drone.motionX, drone.motionY, drone.motionZ).lengthVector() < 0.05) {
|
||||
drone.setTarget(nextX + 0.5, nextY, nextZ + 0.5);
|
||||
|
||||
if(sendingMode && itemType) loadItems(drone);
|
||||
if(!sendingMode && itemType) unloadItems(drone);
|
||||
if(sendingMode && !itemType) loadFluid(drone);
|
||||
if(!sendingMode && !itemType) unloadFluid(drone);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setIntArray("pos", new int[] {nextX, nextY, nextZ});
|
||||
data.setBoolean("mode", sendingMode);
|
||||
data.setBoolean("type", itemType);
|
||||
tank.writeToNBT(data, "t");
|
||||
INBTPacketReceiver.networkPack(this, data, 25);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void networkUnpack(NBTTagCompound nbt) {
|
||||
int[] pos = nbt.getIntArray("pos");
|
||||
this.nextX = pos[0];
|
||||
this.nextY = pos[1];
|
||||
this.nextZ = pos[2];
|
||||
this.sendingMode = nbt.getBoolean("mode");
|
||||
this.itemType = nbt.getBoolean("type");
|
||||
tank.readFromNBT(nbt, "t");
|
||||
}
|
||||
|
||||
protected void loadItems(EntityDeliveryDrone drone) {
|
||||
|
||||
if(drone.getAppearance() != 0) return;
|
||||
|
||||
boolean loaded = false;
|
||||
|
||||
for(int i = 0; i < 18; i++) {
|
||||
if(this.slots[i] != null) {
|
||||
loaded = true;
|
||||
drone.setInventorySlotContents(i, this.slots[i].copy());
|
||||
this.slots[i] = null;
|
||||
}
|
||||
}
|
||||
|
||||
if(loaded) {
|
||||
this.markDirty();
|
||||
drone.setAppearance(1);
|
||||
}
|
||||
}
|
||||
|
||||
protected void unloadItems(EntityDeliveryDrone drone) {
|
||||
|
||||
if(drone.getAppearance() != 1) return;
|
||||
|
||||
boolean emptied = true;
|
||||
|
||||
for(int i = 0; i < 18; i++) {
|
||||
ItemStack droneSlot = drone.getStackInSlot(i);
|
||||
|
||||
if(this.slots[i] == null && droneSlot != null) {
|
||||
this.slots[i] = droneSlot.copy();
|
||||
drone.setInventorySlotContents(i, null);
|
||||
} else if(this.slots[i] != null && droneSlot != null) {
|
||||
emptied = false;
|
||||
}
|
||||
}
|
||||
|
||||
this.markDirty();
|
||||
|
||||
if(emptied) drone.setAppearance(0);
|
||||
}
|
||||
|
||||
protected void loadFluid(EntityDeliveryDrone drone) {
|
||||
|
||||
if(drone.getAppearance() != 0) return;
|
||||
|
||||
if(this.tank.getFill() > 0) {
|
||||
drone.fluid = new FluidStack(tank.getTankType(), tank.getFill());
|
||||
this.tank.setFill(0);
|
||||
drone.setAppearance(2);
|
||||
|
||||
this.markDirty();
|
||||
}
|
||||
}
|
||||
|
||||
protected void unloadFluid(EntityDeliveryDrone drone) {
|
||||
|
||||
if(drone.getAppearance() != 2) return;
|
||||
|
||||
if(drone.fluid != null && drone.fluid.type == tank.getTankType()) {
|
||||
|
||||
if(drone.fluid.fill + tank.getFill() <= tank.getMaxFill()) {
|
||||
tank.setFill(tank.getFill() + drone.fluid.fill);
|
||||
drone.fluid = null;
|
||||
drone.setAppearance(0);
|
||||
} else {
|
||||
int overshoot = drone.fluid.fill + tank.getFill() - tank.getMaxFill();
|
||||
tank.setFill(tank.getMaxFill());
|
||||
drone.fluid.fill = overshoot;
|
||||
}
|
||||
|
||||
this.markDirty();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getAccessibleSlotsFromSide(int p_94128_1_) {
|
||||
return new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValidForSlot(int i, ItemStack itemStack) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canExtractItem(int i, ItemStack itemStack, int j) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockPos getPoint() {
|
||||
return new BlockPos(xCoord, yCoord + 1, zCoord);
|
||||
@ -66,23 +200,72 @@ public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIP
|
||||
this.nextZ = z;
|
||||
this.markDirty();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void networkUnpack(NBTTagCompound nbt) {
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
|
||||
int[] pos = nbt.getIntArray("pos");
|
||||
this.nextX = pos[0];
|
||||
this.nextY = pos[1];
|
||||
this.nextZ = pos[2];
|
||||
this.sendingMode = nbt.getBoolean("mode");
|
||||
this.itemType = nbt.getBoolean("type");
|
||||
tank.readFromNBT(nbt, "t");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
|
||||
nbt.setIntArray("pos", new int[] {nextX, nextY, nextZ});
|
||||
nbt.setBoolean("mode", sendingMode);
|
||||
nbt.setBoolean("type", itemType);
|
||||
tank.writeToNBT(nbt, "t");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||
return null;
|
||||
return new ContainerDroneCrate(player.inventory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||
return null;
|
||||
return new GUIDroneCrate(player.inventory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPermission(EntityPlayer player) {
|
||||
return this.isUseableByPlayer(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void receiveControl(NBTTagCompound data) {
|
||||
|
||||
if(data.hasKey("mode")) {
|
||||
this.sendingMode = !this.sendingMode;
|
||||
this.markChanged();
|
||||
}
|
||||
|
||||
if(data.hasKey("type")) {
|
||||
this.itemType = !this.itemType;
|
||||
this.markChanged();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidTank[] getAllTanks() {
|
||||
return new FluidTank[] { tank };
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidTank[] getSendingTanks() {
|
||||
return !sendingMode && !itemType ? new FluidTank[] { tank } : new FluidTank[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidTank[] getReceivingTanks() {
|
||||
return sendingMode && !itemType ? new FluidTank[] { tank } : new FluidTank[0];
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,15 +47,6 @@ public class TileEntityDroneWaypoint extends TileEntity implements INBTPacketRec
|
||||
double z = zCoord + height * dir.offsetZ + 0.5;
|
||||
|
||||
worldObj.spawnParticle("reddust", x, y, z, 0, 0, 0);
|
||||
|
||||
/*Vec3 vec = Vec3.createVectorHelper(nextX + 0.5 - x, nextY + 0.5 - y, nextZ + 0.5 - z);
|
||||
double speed = Math.min(vec.lengthVector(), 0.5);
|
||||
double mX = vec.xCoord * speed;
|
||||
double mY = vec.yCoord * speed;
|
||||
double mZ = vec.zCoord * speed;
|
||||
vec = vec.normalize();
|
||||
|
||||
worldObj.spawnParticle("crit", x, y, z, mX, mY, mZ);*/
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -87,4 +78,21 @@ public class TileEntityDroneWaypoint extends TileEntity implements INBTPacketRec
|
||||
height += h;
|
||||
height = MathHelper.clamp_int(height, 1, 15);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
|
||||
int[] pos = nbt.getIntArray("pos");
|
||||
this.nextX = pos[0];
|
||||
this.nextY = pos[1];
|
||||
this.nextZ = pos[2];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
|
||||
nbt.setIntArray("pos", new int[] {nextX, nextY, nextZ});
|
||||
}
|
||||
}
|
||||
|
||||
BIN
src/main/resources/assets/hbm/textures/items/delivery_drone.png
Normal file
BIN
src/main/resources/assets/hbm/textures/items/delivery_drone.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 267 B |
Loading…
x
Reference in New Issue
Block a user