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.ILookOverlay;
|
||||||
import com.hbm.blocks.ITooltipProvider;
|
import com.hbm.blocks.ITooltipProvider;
|
||||||
import com.hbm.lib.RefStrings;
|
import com.hbm.lib.RefStrings;
|
||||||
|
import com.hbm.main.MainRegistry;
|
||||||
import com.hbm.tileentity.network.TileEntityDroneCrate;
|
import com.hbm.tileentity.network.TileEntityDroneCrate;
|
||||||
import com.hbm.util.I18nUtil;
|
import com.hbm.util.I18nUtil;
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
@ -55,6 +57,18 @@ public class DroneCrate extends BlockContainer implements ILookOverlay, ITooltip
|
|||||||
return side == 1 ? this.iconTop : (side == 0 ? this.iconBottom : this.blockIcon);
|
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
|
@Override
|
||||||
public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
|
public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
|
||||||
TileEntityDroneCrate tileentityfurnace = (TileEntityDroneCrate) world.getTileEntity(x, y, z);
|
TileEntityDroneCrate tileentityfurnace = (TileEntityDroneCrate) world.getTileEntity(x, y, z);
|
||||||
|
|||||||
@ -1,14 +1,20 @@
|
|||||||
package com.hbm.entity.item;
|
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.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
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.NBTTagCompound;
|
||||||
|
import net.minecraft.nbt.NBTTagList;
|
||||||
import net.minecraft.util.Vec3;
|
import net.minecraft.util.Vec3;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class EntityDeliveryDrone extends Entity {
|
public class EntityDeliveryDrone extends Entity implements IInventory {
|
||||||
|
|
||||||
protected int turnProgress;
|
protected int turnProgress;
|
||||||
protected double syncPosX;
|
protected double syncPosX;
|
||||||
@ -18,6 +24,9 @@ public class EntityDeliveryDrone extends Entity {
|
|||||||
@SideOnly(Side.CLIENT) protected double velocityY;
|
@SideOnly(Side.CLIENT) protected double velocityY;
|
||||||
@SideOnly(Side.CLIENT) protected double velocityZ;
|
@SideOnly(Side.CLIENT) protected double velocityZ;
|
||||||
|
|
||||||
|
protected ItemStack[] slots = new ItemStack[this.getSizeInventory()];
|
||||||
|
public FluidStack fluid;
|
||||||
|
|
||||||
public double targetX = -1;
|
public double targetX = -1;
|
||||||
public double targetY = -1;
|
public double targetY = -1;
|
||||||
public double targetZ = -1;
|
public double targetZ = -1;
|
||||||
@ -60,7 +69,20 @@ public class EntityDeliveryDrone extends Entity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void entityInit() {
|
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
|
@Override
|
||||||
@ -109,13 +131,55 @@ public class EntityDeliveryDrone extends Entity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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
|
@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)
|
@SideOnly(Side.CLIENT)
|
||||||
@ -135,4 +199,63 @@ public class EntityDeliveryDrone extends Entity {
|
|||||||
this.motionY = this.velocityY;
|
this.motionY = this.velocityY;
|
||||||
this.motionZ = this.velocityZ;
|
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 org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
import com.hbm.entity.item.EntityDeliveryDrone;
|
||||||
import com.hbm.main.ResourceManager;
|
import com.hbm.main.ResourceManager;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.entity.Render;
|
import net.minecraft.client.renderer.entity.Render;
|
||||||
@ -16,17 +17,25 @@ public class RenderDeliveryDrone extends Render {
|
|||||||
GL11.glPushMatrix();
|
GL11.glPushMatrix();
|
||||||
GL11.glTranslated(x, y, z);
|
GL11.glTranslated(x, y, z);
|
||||||
|
|
||||||
|
GL11.glDisable(GL11.GL_CULL_FACE);
|
||||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||||
bindTexture(ResourceManager.delivery_drone_tex);
|
bindTexture(ResourceManager.delivery_drone_tex);
|
||||||
ResourceManager.delivery_drone.renderPart("Drone");
|
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.glShadeModel(GL11.GL_FLAT);
|
||||||
|
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||||
|
|
||||||
GL11.glPopMatrix();
|
GL11.glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ResourceLocation getEntityTexture(Entity p_110775_1_) {
|
protected ResourceLocation getEntityTexture(Entity drone) {
|
||||||
return null;
|
return ResourceManager.delivery_drone_tex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3,29 +3,44 @@ package com.hbm.tileentity.network;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.hbm.entity.item.EntityDeliveryDrone;
|
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.IGUIProvider;
|
||||||
import com.hbm.tileentity.INBTPacketReceiver;
|
import com.hbm.tileentity.INBTPacketReceiver;
|
||||||
import com.hbm.tileentity.TileEntityMachineBase;
|
import com.hbm.tileentity.TileEntityMachineBase;
|
||||||
import com.hbm.util.fauxpointtwelve.BlockPos;
|
import com.hbm.util.fauxpointtwelve.BlockPos;
|
||||||
|
|
||||||
|
import api.hbm.fluid.IFluidStandardTransceiver;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
import net.minecraft.client.gui.GuiScreen;
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Container;
|
import net.minecraft.inventory.Container;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.nbt.NBTTagList;
|
||||||
import net.minecraft.util.AxisAlignedBB;
|
import net.minecraft.util.AxisAlignedBB;
|
||||||
import net.minecraft.util.Vec3;
|
import net.minecraft.util.Vec3;
|
||||||
import net.minecraft.world.World;
|
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 nextX = -1;
|
||||||
public int nextY = -1;
|
public int nextY = -1;
|
||||||
public int nextZ = -1;
|
public int nextZ = -1;
|
||||||
|
|
||||||
|
public boolean sendingMode = false;
|
||||||
|
public boolean itemType = true;
|
||||||
|
|
||||||
public TileEntityDroneCrate() {
|
public TileEntityDroneCrate() {
|
||||||
super(19);
|
super(19);
|
||||||
|
this.tank = new FluidTank(Fluids.NONE, 64_000);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -38,22 +53,141 @@ public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIP
|
|||||||
|
|
||||||
if(!worldObj.isRemote) {
|
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) {
|
if(nextY != -1) {
|
||||||
|
|
||||||
List<EntityDeliveryDrone> drones = worldObj.getEntitiesWithinAABB(EntityDeliveryDrone.class, AxisAlignedBB.getBoundingBox(xCoord, yCoord + 1, zCoord, xCoord + 1, yCoord + 2, zCoord + 1));
|
List<EntityDeliveryDrone> drones = worldObj.getEntitiesWithinAABB(EntityDeliveryDrone.class, AxisAlignedBB.getBoundingBox(xCoord, yCoord + 1, zCoord, xCoord + 1, yCoord + 2, zCoord + 1));
|
||||||
for(EntityDeliveryDrone drone : drones) {
|
for(EntityDeliveryDrone drone : drones) {
|
||||||
if(Vec3.createVectorHelper(drone.motionX, drone.motionY, drone.motionZ).lengthVector() < 0.05) {
|
if(Vec3.createVectorHelper(drone.motionX, drone.motionY, drone.motionZ).lengthVector() < 0.05) {
|
||||||
drone.setTarget(nextX + 0.5, nextY, nextZ + 0.5);
|
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();
|
NBTTagCompound data = new NBTTagCompound();
|
||||||
data.setIntArray("pos", new int[] {nextX, nextY, nextZ});
|
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);
|
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
|
@Override
|
||||||
public BlockPos getPoint() {
|
public BlockPos getPoint() {
|
||||||
return new BlockPos(xCoord, yCoord + 1, zCoord);
|
return new BlockPos(xCoord, yCoord + 1, zCoord);
|
||||||
@ -68,21 +202,70 @@ public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIP
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void networkUnpack(NBTTagCompound nbt) {
|
public void readFromNBT(NBTTagCompound nbt) {
|
||||||
|
super.readFromNBT(nbt);
|
||||||
|
|
||||||
int[] pos = nbt.getIntArray("pos");
|
int[] pos = nbt.getIntArray("pos");
|
||||||
this.nextX = pos[0];
|
this.nextX = pos[0];
|
||||||
this.nextY = pos[1];
|
this.nextY = pos[1];
|
||||||
this.nextZ = pos[2];
|
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
|
@Override
|
||||||
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||||
return null;
|
return new ContainerDroneCrate(player.inventory, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
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;
|
double z = zCoord + height * dir.offsetZ + 0.5;
|
||||||
|
|
||||||
worldObj.spawnParticle("reddust", x, y, z, 0, 0, 0);
|
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 += h;
|
||||||
height = MathHelper.clamp_int(height, 1, 15);
|
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