Render item from storage

This commit is contained in:
raoulvdberge
2017-02-12 21:14:49 +01:00
parent 70cafe9c73
commit de3553a1de
6 changed files with 164 additions and 24 deletions

View File

@@ -1,5 +1,6 @@
package com.raoulvdberge.refinedstorage.apiimpl.network.node; package com.raoulvdberge.refinedstorage.apiimpl.network.node;
import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; 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.TileStorageMonitor;
import com.raoulvdberge.refinedstorage.tile.config.IComparable; import com.raoulvdberge.refinedstorage.tile.config.IComparable;
import com.raoulvdberge.refinedstorage.tile.config.IType; import com.raoulvdberge.refinedstorage.tile.config.IType;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
public class NetworkNodeStorageMonitor extends NetworkNode implements IComparable, IType { public class NetworkNodeStorageMonitor extends NetworkNode implements IComparable, IType {
public static final String ID = "storage_monitor"; public static final String ID = "storage_monitor";
private ItemHandlerBasic itemFilter = new ItemHandlerBasic(1, new ItemHandlerListenerNetworkNode(this)); private ItemHandlerBasic itemFilter = new ItemHandlerBasic(1, new ItemHandlerListenerNetworkNode(this)) {
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 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 compare = IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE;
private int type = IType.ITEMS; private int type = IType.ITEMS;
private int oldAmount = -1;
public NetworkNodeStorageMonitor(INetworkNodeHolder holder) { public NetworkNodeStorageMonitor(INetworkNodeHolder holder) {
super(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 @Override
public int getEnergyUsage() { public int getEnergyUsage() {
return 0; return 0;
@@ -60,4 +95,46 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
public IItemHandler getFilterInventory() { public IItemHandler getFilterInventory() {
return getType() == IType.ITEMS ? itemFilter : fluidFilter; 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;
}
}
}
} }

View File

@@ -17,26 +17,12 @@ public class ContainerStorageMonitor extends ContainerBase {
@Override @Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) { public ItemStack transferStackInSlot(EntityPlayer player, int index) {
ItemStack stack = ItemStack.EMPTY;
Slot slot = getSlot(index); Slot slot = getSlot(index);
if (slot.getHasStack()) { ItemStack stack = slot.getStack();
stack = slot.getStack();
if (index < 4) { if (index > 0 && slot.getHasStack()) {
if (!mergeItemStack(stack, 4, inventorySlots.size(), false)) { return mergeItemStackToFilters(stack, 0, 1);
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();
}
} }
return stack; return stack;

View File

@@ -1,5 +1,6 @@
package com.raoulvdberge.refinedstorage.render; package com.raoulvdberge.refinedstorage.render;
import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor; import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager; 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.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
@@ -27,7 +27,7 @@ public class TileEntitySpecialRendererStorageMonitor extends TileEntitySpecialRe
GlStateManager.scale(0.4F, -0.4F, -0.015F); GlStateManager.scale(0.4F, -0.4F, -0.015F);
ItemStack stack = new ItemStack(Blocks.PISTON); ItemStack stack = tile.getItemStack();
RenderItem itemRender = Minecraft.getMinecraft().getRenderItem(); RenderItem itemRender = Minecraft.getMinecraft().getRenderItem();
Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
@@ -60,7 +60,7 @@ public class TileEntitySpecialRendererStorageMonitor extends TileEntitySpecialRe
float factor = 2.0f; float factor = 2.0f;
GlStateManager.scale(size * factor, size * factor, size); 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(); GlStateManager.popMatrix();

View File

@@ -16,7 +16,7 @@ import net.minecraftforge.items.IItemHandler;
import javax.annotation.Nullable; import javax.annotation.Nullable;
public abstract class TileBase extends TileEntity implements ITickable { 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; private EnumFacing direction = EnumFacing.NORTH;
@@ -65,9 +65,17 @@ public abstract class TileBase extends TileEntity implements ITickable {
} }
public void readUpdate(NBTTagCompound tag) { public void readUpdate(NBTTagCompound tag) {
boolean doRerender = canUpdateCauseRerender(tag);
direction = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION)); direction = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION));
RSUtils.updateBlock(getWorld(), pos); if (doRerender) {
RSUtils.updateBlock(getWorld(), pos);
}
}
protected boolean canUpdateCauseRerender(NBTTagCompound tag) {
return true;
} }
@Override @Override

View File

@@ -78,6 +78,13 @@ public class TileSolderer extends TileNode<NetworkNodeSolderer> {
return working; return working;
} }
@Override
protected boolean canUpdateCauseRerender(NBTTagCompound tag) {
EnumFacing receivedDirection = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION));
return receivedDirection != getDirection();
}
@Override @Override
@Nonnull @Nonnull
public NetworkNodeSolderer createNode() { public NetworkNodeSolderer createNode() {

View File

@@ -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.IComparable;
import com.raoulvdberge.refinedstorage.tile.config.IType; import com.raoulvdberge.refinedstorage.tile.config.IType;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; 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> { 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> COMPARE = IComparable.createParameter();
public static final TileDataParameter<Integer> TYPE = IType.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() { public TileStorageMonitor() {
dataManager.addWatchedParameter(COMPARE); dataManager.addWatchedParameter(COMPARE);
dataManager.addWatchedParameter(TYPE); dataManager.addWatchedParameter(TYPE);
@@ -18,4 +31,53 @@ public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> {
public NetworkNodeStorageMonitor createNode() { public NetworkNodeStorageMonitor createNode() {
return new NetworkNodeStorageMonitor(this); 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;
}
} }