Fixed machines from a long distance not being visible in controller

This commit is contained in:
Raoul Van den Berge
2016-04-05 05:27:37 +02:00
parent b57c9cf49e
commit 9e897e86fa
2 changed files with 49 additions and 25 deletions

View File

@@ -1,17 +1,12 @@
package refinedstorage.gui; package refinedstorage.gui;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.translation.I18n; import net.minecraft.util.text.translation.I18n;
import refinedstorage.container.ContainerController; import refinedstorage.container.ContainerController;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.tile.TileController; import refinedstorage.tile.TileController;
import refinedstorage.tile.TileMachine;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class GuiController extends GuiBase { public class GuiController extends GuiBase {
@@ -75,25 +70,21 @@ public class GuiController extends GuiBase {
RenderHelper.enableGUIStandardItemLighting(); RenderHelper.enableGUIStandardItemLighting();
List<TileMachine> machines = new ArrayList<TileMachine>(controller.getMachines()); List<TileController.ClientSideMachine> machines = controller.getClientSideMachines();
TileMachine machineHovering = null; TileController.ClientSideMachine machineHovering = null;
for (int i = 0; i < 4; ++i) { for (int i = 0; i < 4; ++i) {
if (slot < machines.size() && machines.get(slot) != null && machines.get(slot).getWorld() != null) { if (slot < machines.size()) {
TileMachine machine = machines.get(slot); TileController.ClientSideMachine machine = machines.get(slot);
IBlockState machineState = machine.getWorld().getBlockState(machine.getPos());
Block machineBlock = machineState.getBlock();
ItemStack machineStack = new ItemStack(machineBlock, 1, machineBlock.getMetaFromState(machineState)); drawItem(x, y + 5, machine.stack);
drawItem(x, y + 5, machineStack);
GlStateManager.pushMatrix(); GlStateManager.pushMatrix();
float scale = 0.5f; float scale = 0.5f;
GlStateManager.scale(scale, scale, 1); GlStateManager.scale(scale, scale, 1);
drawString(calculateOffsetOnScale(x + 1, scale), calculateOffsetOnScale(y - 3, scale), machineStack.getDisplayName()); drawString(calculateOffsetOnScale(x + 1, scale), calculateOffsetOnScale(y - 3, scale), machine.stack.getDisplayName());
drawString(calculateOffsetOnScale(x + 21, scale), calculateOffsetOnScale(y + 10, scale), t("misc.refinedstorage:energy_usage_minimal", machine.getEnergyUsage())); drawString(calculateOffsetOnScale(x + 21, scale), calculateOffsetOnScale(y + 10, scale), t("misc.refinedstorage:energy_usage_minimal", machine.energyUsage));
GlStateManager.popMatrix(); GlStateManager.popMatrix();
if (inBounds(x, y, 16, 16, mouseX, mouseY)) { if (inBounds(x, y, 16, 16, mouseX, mouseY)) {
@@ -112,9 +103,9 @@ public class GuiController extends GuiBase {
} }
if (machineHovering != null) { if (machineHovering != null) {
String message = I18n.translateToLocalFormatted("gui.refinedstorage:controller.machine_position.x", machineHovering.getPos().getX()); String message = I18n.translateToLocalFormatted("gui.refinedstorage:controller.machine_position.x", machineHovering.x);
message += "\n" + I18n.translateToLocalFormatted("gui.refinedstorage:controller.machine_position.y", machineHovering.getPos().getY()); message += "\n" + I18n.translateToLocalFormatted("gui.refinedstorage:controller.machine_position.y", machineHovering.y);
message += "\n" + I18n.translateToLocalFormatted("gui.refinedstorage:controller.machine_position.z", machineHovering.getPos().getZ()); message += "\n" + I18n.translateToLocalFormatted("gui.refinedstorage:controller.machine_position.z", machineHovering.z);
drawTooltip(mouseX, mouseY, message); drawTooltip(mouseX, mouseY, message);
} }
@@ -132,7 +123,7 @@ public class GuiController extends GuiBase {
} }
private int getRows() { private int getRows() {
int max = (int) Math.ceil((float) controller.getMachines().size() / (float) 2); int max = (int) Math.ceil((float) controller.getClientSideMachines().size() / (float) 2);
return max < 0 ? 0 : max; return max < 0 ? 0 : max;
} }

View File

@@ -3,6 +3,7 @@ package refinedstorage.tile;
import cofh.api.energy.EnergyStorage; import cofh.api.energy.EnergyStorage;
import cofh.api.energy.IEnergyReceiver; import cofh.api.energy.IEnergyReceiver;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.Container; import net.minecraft.inventory.Container;
@@ -12,6 +13,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.ByteBufUtils;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageBlocks;
import refinedstorage.RefinedStorageGui; import refinedstorage.RefinedStorageGui;
@@ -34,6 +36,14 @@ import refinedstorage.util.InventoryUtils;
import java.util.*; import java.util.*;
public class TileController extends TileBase implements IEnergyReceiver, INetworkTile, IRedstoneModeConfig { public class TileController extends TileBase implements IEnergyReceiver, INetworkTile, IRedstoneModeConfig {
public class ClientSideMachine {
public ItemStack stack;
public int energyUsage;
public int x;
public int y;
public int z;
}
private List<ItemGroup> itemGroups = new ArrayList<ItemGroup>(); private List<ItemGroup> itemGroups = new ArrayList<ItemGroup>();
private List<IStorage> storages = new ArrayList<IStorage>(); private List<IStorage> storages = new ArrayList<IStorage>();
private List<WirelessGridConsumer> wirelessGridConsumers = new ArrayList<WirelessGridConsumer>(); private List<WirelessGridConsumer> wirelessGridConsumers = new ArrayList<WirelessGridConsumer>();
@@ -42,6 +52,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
private RedstoneMode redstoneMode = RedstoneMode.IGNORE; private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
private List<TileMachine> machines = new ArrayList<TileMachine>(); private List<TileMachine> machines = new ArrayList<TileMachine>();
private List<ClientSideMachine> clientSideMachines = new ArrayList<ClientSideMachine>();
private List<BlockPos> visited = new ArrayList<BlockPos>(); private List<BlockPos> visited = new ArrayList<BlockPos>();
@@ -417,6 +428,10 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
return pos; return pos;
} }
public List<ClientSideMachine> getClientSideMachines() {
return clientSideMachines;
}
@Override @Override
public void receiveData(ByteBuf buf) { public void receiveData(ByteBuf buf) {
int lastEnergy = energy.getEnergyStored(); int lastEnergy = energy.getEnergyStored();
@@ -441,15 +456,28 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
machines.clear(); machines.clear();
List<ClientSideMachine> machines = new ArrayList<ClientSideMachine>();
int size = buf.readInt(); int size = buf.readInt();
for (int i = 0; i < size; ++i) { for (int i = 0; i < size; ++i) {
TileEntity tile = worldObj.getTileEntity(new BlockPos(buf.readInt(), buf.readInt(), buf.readInt())); int energyUsage = buf.readInt();
int x = buf.readInt();
int y = buf.readInt();
int z = buf.readInt();
ItemStack stack = ByteBufUtils.readItemStack(buf);
if (tile instanceof TileMachine) { ClientSideMachine machine = new ClientSideMachine();
machines.add((TileMachine) tile); machine.x = x;
} machine.y = y;
machine.z = z;
machine.energyUsage = energyUsage;
machine.stack = stack;
machines.add(machine);
} }
clientSideMachines = machines;
} }
@Override @Override
@@ -460,11 +488,16 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
buf.writeInt(machines.size()); buf.writeInt(machines.size());
// @TODO: This won't work clientside for far machines, send itemstacks instead!
for (TileMachine machine : machines) { for (TileMachine machine : machines) {
buf.writeInt(machine.getEnergyUsage());
buf.writeInt(machine.getPos().getX()); buf.writeInt(machine.getPos().getX());
buf.writeInt(machine.getPos().getY()); buf.writeInt(machine.getPos().getY());
buf.writeInt(machine.getPos().getZ()); buf.writeInt(machine.getPos().getZ());
IBlockState state = worldObj.getBlockState(machine.getPos());
ByteBufUtils.writeItemStack(buf, new ItemStack(state.getBlock(), 1, state.getBlock().getMetaFromState(state)));
} }
} }