Render item from storage
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic;
|
||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid;
|
||||
@@ -7,21 +8,55 @@ import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
|
||||
public class NetworkNodeStorageMonitor extends NetworkNode implements IComparable, IType {
|
||||
public static final String ID = "storage_monitor";
|
||||
|
||||
private ItemHandlerBasic itemFilter = new ItemHandlerBasic(1, new ItemHandlerListenerNetworkNode(this));
|
||||
private ItemHandlerFluid fluidFilter = new ItemHandlerFluid(1, new ItemHandlerListenerNetworkNode(this));
|
||||
private ItemHandlerBasic itemFilter = new ItemHandlerBasic(1, new ItemHandlerListenerNetworkNode(this)) {
|
||||
@Override
|
||||
public void onContentsChanged(int slot) {
|
||||
super.onContentsChanged(slot);
|
||||
|
||||
RSUtils.updateBlock(holder.world(), holder.pos());
|
||||
}
|
||||
};
|
||||
|
||||
private ItemHandlerFluid fluidFilter = new ItemHandlerFluid(1, new ItemHandlerListenerNetworkNode(this)) {
|
||||
@Override
|
||||
public void onContentsChanged(int slot) {
|
||||
super.onContentsChanged(slot);
|
||||
|
||||
RSUtils.updateBlock(holder.world(), holder.pos());
|
||||
}
|
||||
};
|
||||
|
||||
private int compare = IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE;
|
||||
private int type = IType.ITEMS;
|
||||
|
||||
private int oldAmount = -1;
|
||||
|
||||
public NetworkNodeStorageMonitor(INetworkNodeHolder holder) {
|
||||
super(holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
super.update();
|
||||
|
||||
int newAmount = getAmount();
|
||||
|
||||
if (oldAmount == -1) {
|
||||
oldAmount = newAmount;
|
||||
} else if (oldAmount != newAmount) {
|
||||
oldAmount = newAmount;
|
||||
|
||||
RSUtils.updateBlock(holder.world(), holder.pos());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnergyUsage() {
|
||||
return 0;
|
||||
@@ -60,4 +95,46 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
|
||||
public IItemHandler getFilterInventory() {
|
||||
return getType() == IType.ITEMS ? itemFilter : fluidFilter;
|
||||
}
|
||||
|
||||
public ItemHandlerBasic getItemFilter() {
|
||||
return itemFilter;
|
||||
}
|
||||
|
||||
public ItemHandlerFluid getFluidFilter() {
|
||||
return fluidFilter;
|
||||
}
|
||||
|
||||
public int getAmount() {
|
||||
if (network == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case ITEMS: {
|
||||
ItemStack toCheck = itemFilter.getStackInSlot(0);
|
||||
|
||||
if (toCheck.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
ItemStack stored = network.getItemStorageCache().getList().get(toCheck, compare);
|
||||
|
||||
return stored != null ? stored.getCount() : 0;
|
||||
}
|
||||
case FLUIDS: {
|
||||
FluidStack toCheck = fluidFilter.getFluidStackInSlot(0);
|
||||
|
||||
if (toCheck == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
FluidStack stored = network.getFluidStorageCache().getList().get(toCheck, compare);
|
||||
|
||||
return stored != null ? stored.amount : 0;
|
||||
}
|
||||
default: {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,26 +17,12 @@ public class ContainerStorageMonitor extends ContainerBase {
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
stack = slot.getStack();
|
||||
ItemStack stack = slot.getStack();
|
||||
|
||||
if (index < 4) {
|
||||
if (!mergeItemStack(stack, 4, inventorySlots.size(), false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if (!mergeItemStack(stack, 0, 4, false)) {
|
||||
return mergeItemStackToFilters(stack, 4, 4 + 1);
|
||||
}
|
||||
|
||||
if (stack.getCount() == 0) {
|
||||
slot.putStack(ItemStack.EMPTY);
|
||||
} else {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
if (index > 0 && slot.getHasStack()) {
|
||||
return mergeItemStackToFilters(stack, 0, 1);
|
||||
}
|
||||
|
||||
return stack;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.raoulvdberge.refinedstorage.render;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
@@ -8,7 +9,6 @@ import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
|
||||
import net.minecraft.client.renderer.texture.TextureMap;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
@@ -27,7 +27,7 @@ public class TileEntitySpecialRendererStorageMonitor extends TileEntitySpecialRe
|
||||
|
||||
GlStateManager.scale(0.4F, -0.4F, -0.015F);
|
||||
|
||||
ItemStack stack = new ItemStack(Blocks.PISTON);
|
||||
ItemStack stack = tile.getItemStack();
|
||||
|
||||
RenderItem itemRender = Minecraft.getMinecraft().getRenderItem();
|
||||
Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
|
||||
@@ -60,7 +60,7 @@ public class TileEntitySpecialRendererStorageMonitor extends TileEntitySpecialRe
|
||||
float factor = 2.0f;
|
||||
GlStateManager.scale(size * factor, size * factor, size);
|
||||
|
||||
Minecraft.getMinecraft().fontRendererObj.drawString("It works", 0, 0, 0xFFFFFF);
|
||||
Minecraft.getMinecraft().fontRendererObj.drawString(RSUtils.formatQuantity(tile.getAmount()), 0, 0, 0xFFFFFF);
|
||||
|
||||
GlStateManager.popMatrix();
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ import net.minecraftforge.items.IItemHandler;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public abstract class TileBase extends TileEntity implements ITickable {
|
||||
private static final String NBT_DIRECTION = "Direction";
|
||||
protected static final String NBT_DIRECTION = "Direction";
|
||||
|
||||
private EnumFacing direction = EnumFacing.NORTH;
|
||||
|
||||
@@ -65,10 +65,18 @@ public abstract class TileBase extends TileEntity implements ITickable {
|
||||
}
|
||||
|
||||
public void readUpdate(NBTTagCompound tag) {
|
||||
boolean doRerender = canUpdateCauseRerender(tag);
|
||||
|
||||
direction = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION));
|
||||
|
||||
if (doRerender) {
|
||||
RSUtils.updateBlock(getWorld(), pos);
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean canUpdateCauseRerender(NBTTagCompound tag) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound getUpdateTag() {
|
||||
|
||||
@@ -78,6 +78,13 @@ public class TileSolderer extends TileNode<NetworkNodeSolderer> {
|
||||
return working;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean canUpdateCauseRerender(NBTTagCompound tag) {
|
||||
EnumFacing receivedDirection = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION));
|
||||
|
||||
return receivedDirection != getDirection();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nonnull
|
||||
public NetworkNodeSolderer createNode() {
|
||||
|
||||
@@ -4,11 +4,24 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeStorageMo
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> {
|
||||
private static final String NBT_TYPE = "Type";
|
||||
private static final String NBT_STACK = "Stack";
|
||||
private static final String NBT_AMOUNT = "Amount";
|
||||
|
||||
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
|
||||
public static final TileDataParameter<Integer> TYPE = IType.createParameter();
|
||||
|
||||
private int type;
|
||||
private int amount;
|
||||
private ItemStack itemStack = ItemStack.EMPTY;
|
||||
private FluidStack fluidStack;
|
||||
|
||||
public TileStorageMonitor() {
|
||||
dataManager.addWatchedParameter(COMPARE);
|
||||
dataManager.addWatchedParameter(TYPE);
|
||||
@@ -18,4 +31,53 @@ public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> {
|
||||
public NetworkNodeStorageMonitor createNode() {
|
||||
return new NetworkNodeStorageMonitor(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeUpdate(NBTTagCompound tag) {
|
||||
super.writeUpdate(tag);
|
||||
|
||||
tag.setInteger(NBT_TYPE, getNode().getType());
|
||||
tag.setTag(NBT_STACK, getNode().getType() == IType.ITEMS ? getNode().getItemFilter().getStackInSlot(0).writeToNBT(new NBTTagCompound()) : getNode().getFluidFilter().getFluidStackInSlot(0).writeToNBT(new NBTTagCompound()));
|
||||
tag.setInteger(NBT_AMOUNT, getNode().getAmount());
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readUpdate(NBTTagCompound tag) {
|
||||
super.readUpdate(tag);
|
||||
|
||||
type = tag.getInteger(NBT_TYPE);
|
||||
|
||||
if (type == IType.ITEMS) {
|
||||
itemStack = new ItemStack(tag.getCompoundTag(NBT_STACK));
|
||||
} else {
|
||||
fluidStack = FluidStack.loadFluidStackFromNBT(tag.getCompoundTag(NBT_STACK));
|
||||
}
|
||||
|
||||
amount = tag.getInteger(NBT_AMOUNT);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean canUpdateCauseRerender(NBTTagCompound tag) {
|
||||
EnumFacing receivedDirection = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION));
|
||||
|
||||
return receivedDirection != getDirection();
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public int getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
||||
public ItemStack getItemStack() {
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
public FluidStack getFluidStack() {
|
||||
return fluidStack;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user