More stuff on the storage monitors

This commit is contained in:
raoulvdberge
2017-02-12 23:08:02 +01:00
parent de3553a1de
commit 0ee9c6ce93
8 changed files with 136 additions and 44 deletions

View File

@@ -9,12 +9,16 @@ 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.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fluids.FluidStack; 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 static final String NBT_COMPARE = "Compare";
private static final String NBT_TYPE = "Type";
private ItemHandlerBasic itemFilter = new ItemHandlerBasic(1, new ItemHandlerListenerNetworkNode(this)) { private ItemHandlerBasic itemFilter = new ItemHandlerBasic(1, new ItemHandlerListenerNetworkNode(this)) {
@Override @Override
public void onContentsChanged(int slot) { public void onContentsChanged(int slot) {
@@ -76,6 +80,8 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
public void setCompare(int compare) { public void setCompare(int compare) {
this.compare = compare; this.compare = compare;
RSUtils.updateBlock(holder.world(), holder.pos());
markDirty(); markDirty();
} }
@@ -88,6 +94,8 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
public void setType(int type) { public void setType(int type) {
this.type = type; this.type = type;
RSUtils.updateBlock(holder.world(), holder.pos());
markDirty(); markDirty();
} }
@@ -96,6 +104,35 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
return getType() == IType.ITEMS ? itemFilter : fluidFilter; return getType() == IType.ITEMS ? itemFilter : fluidFilter;
} }
@Override
public NBTTagCompound writeConfiguration(NBTTagCompound tag) {
super.writeConfiguration(tag);
tag.setInteger(NBT_COMPARE, compare);
tag.setInteger(NBT_TYPE, type);
RSUtils.writeItems(itemFilter, 0, tag);
RSUtils.writeItems(fluidFilter, 1, tag);
return tag;
}
@Override
public void readConfiguration(NBTTagCompound tag) {
super.readConfiguration(tag);
if (tag.hasKey(NBT_COMPARE)) {
compare = tag.getInteger(NBT_COMPARE);
}
if (tag.hasKey(NBT_TYPE)) {
type = tag.getInteger(NBT_TYPE);
}
RSUtils.readItems(itemFilter, 0, tag);
RSUtils.readItems(fluidFilter, 1, tag);
}
public ItemHandlerBasic getItemFilter() { public ItemHandlerBasic getItemFilter() {
return itemFilter; return itemFilter;
} }
@@ -137,4 +174,9 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
} }
} }
} }
@Override
public boolean hasConnectivityState() {
return true;
}
} }

View File

@@ -33,7 +33,7 @@ public class BlockStorageMonitor extends BlockNode {
} }
@Override @Override
public EnumPlacementType getPlacementType() { public boolean hasConnectivityState() {
return null; return true;
} }
} }

View File

@@ -207,7 +207,7 @@ public class ProxyClient extends ProxyCommon {
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.DISK_MANIPULATOR), 0, new ModelResourceLocation("refinedstorage:disk_manipulator", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.DISK_MANIPULATOR), 0, new ModelResourceLocation("refinedstorage:disk_manipulator", "inventory"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.SECURITY_MANAGER), 0, new ModelResourceLocation("refinedstorage:security_manager", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.SECURITY_MANAGER), 0, new ModelResourceLocation("refinedstorage:security_manager", "inventory"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.QUARTZ_ENRICHED_IRON), 0, new ModelResourceLocation("refinedstorage:quartz_enriched_iron_block", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.QUARTZ_ENRICHED_IRON), 0, new ModelResourceLocation("refinedstorage:quartz_enriched_iron_block", "inventory"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.STORAGE_MONITOR), 0, new ModelResourceLocation("refinedstorage:storage_monitor", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.STORAGE_MONITOR), 0, new ModelResourceLocation("refinedstorage:storage_monitor", "connected=false,direction=north"));
ModelLoaderRegistry.registerLoader(new ICustomModelLoader() { ModelLoaderRegistry.registerLoader(new ICustomModelLoader() {
@Override @Override

View File

@@ -800,6 +800,19 @@ public class ProxyCommon {
'C', new ItemStack(RSItems.NETWORK_CARD), 'C', new ItemStack(RSItems.NETWORK_CARD),
'A', new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED) 'A', new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED)
); );
// Storage Monitor
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(RSBlocks.STORAGE_MONITOR),
"PCG",
"EMG",
"PDG",
'E', new ItemStack(RSItems.QUARTZ_ENRICHED_IRON),
'P', new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC),
'C', new ItemStack(RSItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION),
'D', new ItemStack(RSItems.CORE, 1, ItemCore.TYPE_DESTRUCTION),
'M', new ItemStack(RSBlocks.MACHINE_CASING),
'G', "blockGlass"
));
} }
public void init(FMLInitializationEvent e) { public void init(FMLInitializationEvent e) {

View File

@@ -2,34 +2,30 @@ package com.raoulvdberge.refinedstorage.render;
import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor; import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
import com.raoulvdberge.refinedstorage.tile.config.IType;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderItem;
import net.minecraft.client.renderer.block.model.IBakedModel; 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.item.ItemStack; import net.minecraftforge.client.ForgeHooksClient;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
public class TileEntitySpecialRendererStorageMonitor extends TileEntitySpecialRenderer<TileStorageMonitor> { public class TileEntitySpecialRendererStorageMonitor extends TileEntitySpecialRenderer<TileStorageMonitor> {
@Override @Override
public void renderTileEntityAt(TileStorageMonitor tile, double x, double y, double z, float partialTicks, int destroyStage) { public void renderTileEntityAt(TileStorageMonitor tile, double x, double y, double z, float partialTicks, int destroyStage) {
setLightmapDisabled(true);
GlStateManager.pushMatrix(); GlStateManager.pushMatrix();
GlStateManager.translate(x + 0.5F, y + 0.5F, z - 0.01F); GlStateManager.translate(x + 0.5F, y + 0.5F, z - 0.01F);
GlStateManager.rotate(180F, 0F, 0F, 1F); GlStateManager.rotate(180F, 0F, 0F, 1F);
GlStateManager.color(1F, 1F, 1F, 1F); GlStateManager.color(1F, 1F, 1F, 1F);
setLightmapDisabled(true);
GlStateManager.depthMask(false); GlStateManager.depthMask(false);
GlStateManager.enableBlend(); GlStateManager.enableBlend();
GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
GlStateManager.depthMask(true); GlStateManager.depthMask(true);
GlStateManager.scale(0.4F, -0.4F, -0.015F); GlStateManager.scale(0.4F, -0.4F, -0.015F);
ItemStack stack = tile.getItemStack();
RenderItem itemRender = Minecraft.getMinecraft().getRenderItem();
Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
Minecraft.getMinecraft().getTextureManager().getTexture(TextureMap.LOCATION_BLOCKS_TEXTURE).setBlurMipmap(false, false); Minecraft.getMinecraft().getTextureManager().getTexture(TextureMap.LOCATION_BLOCKS_TEXTURE).setBlurMipmap(false, false);
GlStateManager.enableRescaleNormal(); GlStateManager.enableRescaleNormal();
@@ -38,9 +34,13 @@ public class TileEntitySpecialRendererStorageMonitor extends TileEntitySpecialRe
GlStateManager.enableBlend(); GlStateManager.enableBlend();
GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
GlStateManager.color(1F, 1F, 1F, 1F); GlStateManager.color(1F, 1F, 1F, 1F);
IBakedModel bakedmodel = itemRender.getItemModelWithOverrides(stack, null, Minecraft.getMinecraft().player);
bakedmodel = net.minecraftforge.client.ForgeHooksClient.handleCameraTransforms(bakedmodel, ItemCameraTransforms.TransformType.GUI, false); if (tile.getItemStack() != null) {
itemRender.renderItem(stack, bakedmodel); IBakedModel bakedModel = Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tile.getItemStack(), null, Minecraft.getMinecraft().player);
bakedModel = ForgeHooksClient.handleCameraTransforms(bakedModel, ItemCameraTransforms.TransformType.GUI, false);
Minecraft.getMinecraft().getRenderItem().renderItem(tile.getItemStack(), bakedModel);
}
GlStateManager.disableAlpha(); GlStateManager.disableAlpha();
GlStateManager.disableRescaleNormal(); GlStateManager.disableRescaleNormal();
GlStateManager.disableLighting(); GlStateManager.disableLighting();
@@ -52,15 +52,26 @@ public class TileEntitySpecialRendererStorageMonitor extends TileEntitySpecialRe
GlStateManager.popMatrix(); GlStateManager.popMatrix();
GlStateManager.pushMatrix(); GlStateManager.pushMatrix();
String amount = tile.getType() == IType.ITEMS ? RSUtils.formatQuantity(tile.getAmount()) : RSUtils.QUANTITY_FORMATTER.format((float) tile.getAmount() / 1000F);
GlStateManager.translate(x + 0.5F, y + 0.5F, z - 0.02F); // Very bad, but I don't know how to translate a 2D font width to a 3D font width...
float textWidth = 0;
for (int i = 0; i < amount.length(); ++i) {
char c = amount.charAt(i);
if (c == '.') {
textWidth += 0.005F;
} else {
textWidth += 0.024F;
}
}
GlStateManager.translate(x + 0.5F + textWidth, y + 0.2F, z - 0.02F);
GlStateManager.rotate(180F, 0F, 0F, 1F); GlStateManager.rotate(180F, 0F, 0F, 1F);
float size = 0.00450F; float size = 0.00450F;
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(RSUtils.formatQuantity(tile.getAmount()), 0, 0, 0xFFFFFF); Minecraft.getMinecraft().fontRendererObj.drawString(amount, 0, 0, 0xFFFFFF);
GlStateManager.popMatrix(); GlStateManager.popMatrix();

View File

@@ -24,7 +24,7 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
public static final TileDataParameter<Integer> REDSTONE_MODE = RedstoneMode.createParameter(); public static final TileDataParameter<Integer> REDSTONE_MODE = RedstoneMode.createParameter();
private NBTTagCompound legacyTagToRead; private NBTTagCompound legacyTagToRead;
private static final String NBT_ACTIVE = "Active"; protected static final String NBT_ACTIVE = "Active";
public TileNode() { public TileNode() {
dataManager.addWatchedParameter(REDSTONE_MODE); dataManager.addWatchedParameter(REDSTONE_MODE);
@@ -99,9 +99,9 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
} }
public void readUpdate(NBTTagCompound tag) { public void readUpdate(NBTTagCompound tag) {
getNode().setActive(tag.getBoolean(NBT_ACTIVE));
super.readUpdate(tag); super.readUpdate(tag);
getNode().setActive(tag.getBoolean(NBT_ACTIVE));
} }
public IItemHandler getDrops() { public IItemHandler getDrops() {

View File

@@ -7,7 +7,8 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraftforge.fluids.FluidStack;
import javax.annotation.Nullable;
public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> { public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> {
private static final String NBT_TYPE = "Type"; private static final String NBT_TYPE = "Type";
@@ -19,8 +20,8 @@ public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> {
private int type; private int type;
private int amount; private int amount;
private ItemStack itemStack = ItemStack.EMPTY; @Nullable
private FluidStack fluidStack; private ItemStack itemStack;
public TileStorageMonitor() { public TileStorageMonitor() {
dataManager.addWatchedParameter(COMPARE); dataManager.addWatchedParameter(COMPARE);
@@ -37,7 +38,13 @@ public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> {
super.writeUpdate(tag); super.writeUpdate(tag);
tag.setInteger(NBT_TYPE, getNode().getType()); 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()));
ItemStack stack = getNode().getType() == IType.ITEMS ? getNode().getItemFilter().getStackInSlot(0) : getNode().getFluidFilter().getStackInSlot(0);
if (!stack.isEmpty()) {
tag.setTag(NBT_STACK, stack.writeToNBT(new NBTTagCompound()));
}
tag.setInteger(NBT_AMOUNT, getNode().getAmount()); tag.setInteger(NBT_AMOUNT, getNode().getAmount());
return tag; return tag;
@@ -48,21 +55,16 @@ public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> {
super.readUpdate(tag); super.readUpdate(tag);
type = tag.getInteger(NBT_TYPE); type = tag.getInteger(NBT_TYPE);
itemStack = tag.hasKey(NBT_STACK) ? new ItemStack(tag.getCompoundTag(NBT_STACK)) : null;
if (type == IType.ITEMS) {
itemStack = new ItemStack(tag.getCompoundTag(NBT_STACK));
} else {
fluidStack = FluidStack.loadFluidStackFromNBT(tag.getCompoundTag(NBT_STACK));
}
amount = tag.getInteger(NBT_AMOUNT); amount = tag.getInteger(NBT_AMOUNT);
} }
@Override @Override
protected boolean canUpdateCauseRerender(NBTTagCompound tag) { protected boolean canUpdateCauseRerender(NBTTagCompound tag) {
EnumFacing receivedDirection = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION)); EnumFacing receivedDirection = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION));
boolean receivedActive = tag.getBoolean(NBT_ACTIVE);
return receivedDirection != getDirection(); return receivedDirection != getDirection() || receivedActive != getNode().isActive();
} }
public int getType() { public int getType() {
@@ -73,11 +75,8 @@ public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> {
return amount; return amount;
} }
@Nullable
public ItemStack getItemStack() { public ItemStack getItemStack() {
return itemStack; return itemStack;
} }
public FluidStack getFluidStack() {
return fluidStack;
}
} }

View File

@@ -1,19 +1,46 @@
{ {
"forge_marker": 1, "forge_marker": 1,
"defaults": { "defaults": {
"model": "cube_all", "model": "cube",
"textures": { "textures": {
"all": "refinedstorage:blocks/machine_casing" "particle": "refinedstorage:blocks/side",
"north": "refinedstorage:blocks/machine_casing",
"east": "refinedstorage:blocks/grid_left",
"south": "refinedstorage:blocks/grid_back",
"west": "refinedstorage:blocks/grid_right",
"up": "refinedstorage:blocks/grid_top",
"down": "refinedstorage:blocks/bottom"
} }
}, },
"variants": { "variants": {
"inventory": [ "connected": {
{ "true": {
"transform": "forge:default-block" "textures": {
"north": "refinedstorage:blocks/interface_connected"
}
},
"false": {
}
},
"direction": {
"north": {
"y": 0
},
"east": {
"y": 90
},
"south": {
"y": 180
},
"west": {
"y": 270
},
"up": {
"x": 270
},
"down": {
"x": 90
} }
],
"normal": {
"model": "cube_all"
} }
} }
} }