More stuff on the storage monitors
This commit is contained in:
@@ -9,12 +9,16 @@ 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.minecraft.nbt.NBTTagCompound;
|
||||
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 static final String NBT_COMPARE = "Compare";
|
||||
private static final String NBT_TYPE = "Type";
|
||||
|
||||
private ItemHandlerBasic itemFilter = new ItemHandlerBasic(1, new ItemHandlerListenerNetworkNode(this)) {
|
||||
@Override
|
||||
public void onContentsChanged(int slot) {
|
||||
@@ -76,6 +80,8 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
|
||||
public void setCompare(int compare) {
|
||||
this.compare = compare;
|
||||
|
||||
RSUtils.updateBlock(holder.world(), holder.pos());
|
||||
|
||||
markDirty();
|
||||
}
|
||||
|
||||
@@ -88,6 +94,8 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
|
||||
public void setType(int type) {
|
||||
this.type = type;
|
||||
|
||||
RSUtils.updateBlock(holder.world(), holder.pos());
|
||||
|
||||
markDirty();
|
||||
}
|
||||
|
||||
@@ -96,6 +104,35 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
|
||||
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() {
|
||||
return itemFilter;
|
||||
}
|
||||
@@ -137,4 +174,9 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasConnectivityState() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@@ -33,7 +33,7 @@ public class BlockStorageMonitor extends BlockNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumPlacementType getPlacementType() {
|
||||
return null;
|
||||
public boolean hasConnectivityState() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@@ -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.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.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() {
|
||||
@Override
|
||||
|
@@ -800,6 +800,19 @@ public class ProxyCommon {
|
||||
'C', new ItemStack(RSItems.NETWORK_CARD),
|
||||
'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) {
|
||||
|
@@ -2,34 +2,30 @@ package com.raoulvdberge.refinedstorage.render;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import net.minecraft.client.Minecraft;
|
||||
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.ItemCameraTransforms;
|
||||
import net.minecraft.client.renderer.texture.TextureMap;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.client.ForgeHooksClient;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class TileEntitySpecialRendererStorageMonitor extends TileEntitySpecialRenderer<TileStorageMonitor> {
|
||||
@Override
|
||||
public void renderTileEntityAt(TileStorageMonitor tile, double x, double y, double z, float partialTicks, int destroyStage) {
|
||||
setLightmapDisabled(true);
|
||||
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.translate(x + 0.5F, y + 0.5F, z - 0.01F);
|
||||
GlStateManager.rotate(180F, 0F, 0F, 1F);
|
||||
GlStateManager.color(1F, 1F, 1F, 1F);
|
||||
setLightmapDisabled(true);
|
||||
GlStateManager.depthMask(false);
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
|
||||
GlStateManager.depthMask(true);
|
||||
|
||||
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().getTexture(TextureMap.LOCATION_BLOCKS_TEXTURE).setBlurMipmap(false, false);
|
||||
GlStateManager.enableRescaleNormal();
|
||||
@@ -38,9 +34,13 @@ public class TileEntitySpecialRendererStorageMonitor extends TileEntitySpecialRe
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
|
||||
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);
|
||||
itemRender.renderItem(stack, bakedmodel);
|
||||
|
||||
if (tile.getItemStack() != null) {
|
||||
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.disableRescaleNormal();
|
||||
GlStateManager.disableLighting();
|
||||
@@ -52,15 +52,26 @@ public class TileEntitySpecialRendererStorageMonitor extends TileEntitySpecialRe
|
||||
GlStateManager.popMatrix();
|
||||
|
||||
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);
|
||||
|
||||
float size = 0.00450F;
|
||||
float factor = 2.0f;
|
||||
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();
|
||||
|
||||
|
@@ -24,7 +24,7 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
|
||||
public static final TileDataParameter<Integer> REDSTONE_MODE = RedstoneMode.createParameter();
|
||||
|
||||
private NBTTagCompound legacyTagToRead;
|
||||
private static final String NBT_ACTIVE = "Active";
|
||||
protected static final String NBT_ACTIVE = "Active";
|
||||
|
||||
public TileNode() {
|
||||
dataManager.addWatchedParameter(REDSTONE_MODE);
|
||||
@@ -99,9 +99,9 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
|
||||
}
|
||||
|
||||
public void readUpdate(NBTTagCompound tag) {
|
||||
getNode().setActive(tag.getBoolean(NBT_ACTIVE));
|
||||
|
||||
super.readUpdate(tag);
|
||||
|
||||
getNode().setActive(tag.getBoolean(NBT_ACTIVE));
|
||||
}
|
||||
|
||||
public IItemHandler getDrops() {
|
||||
|
@@ -7,7 +7,8 @@ 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;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> {
|
||||
private static final String NBT_TYPE = "Type";
|
||||
@@ -19,8 +20,8 @@ public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> {
|
||||
|
||||
private int type;
|
||||
private int amount;
|
||||
private ItemStack itemStack = ItemStack.EMPTY;
|
||||
private FluidStack fluidStack;
|
||||
@Nullable
|
||||
private ItemStack itemStack;
|
||||
|
||||
public TileStorageMonitor() {
|
||||
dataManager.addWatchedParameter(COMPARE);
|
||||
@@ -37,7 +38,13 @@ public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> {
|
||||
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()));
|
||||
|
||||
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());
|
||||
|
||||
return tag;
|
||||
@@ -48,21 +55,16 @@ public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> {
|
||||
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));
|
||||
}
|
||||
|
||||
itemStack = tag.hasKey(NBT_STACK) ? new ItemStack(tag.getCompoundTag(NBT_STACK)) : null;
|
||||
amount = tag.getInteger(NBT_AMOUNT);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean canUpdateCauseRerender(NBTTagCompound tag) {
|
||||
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() {
|
||||
@@ -73,11 +75,8 @@ public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> {
|
||||
return amount;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ItemStack getItemStack() {
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
public FluidStack getFluidStack() {
|
||||
return fluidStack;
|
||||
}
|
||||
}
|
||||
|
@@ -1,19 +1,46 @@
|
||||
{
|
||||
"forge_marker": 1,
|
||||
"defaults": {
|
||||
"model": "cube_all",
|
||||
"model": "cube",
|
||||
"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": {
|
||||
"inventory": [
|
||||
{
|
||||
"transform": "forge:default-block"
|
||||
"connected": {
|
||||
"true": {
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user