This commit is contained in:
Raoul Van den Berge
2016-06-19 21:47:55 +02:00
parent dbdca44b3d
commit 209d603c62
8 changed files with 60 additions and 16 deletions

View File

@@ -66,6 +66,8 @@ public class StorageNetwork {
private boolean couldRun;
private long lastEnergyUpdate;
private int ticks;
private EnumControllerType type;
private World world;
@@ -91,6 +93,10 @@ public class StorageNetwork {
return energy;
}
public int getEnergyUsage() {
return energyUsage;
}
public BlockPos getPos() {
return pos;
}
@@ -103,7 +109,7 @@ public class StorageNetwork {
return energy.getEnergyStored() > 0 && energy.getEnergyStored() >= energyUsage && redstoneMode.isEnabled(world, pos);
}
public void update(int ticks) {
public void update() {
for (TileMachine machine : machinesToAdd) {
if (!machines.contains(machine)) {
machines.add(machine);
@@ -149,8 +155,6 @@ public class StorageNetwork {
}
}
} else if (!machines.isEmpty()) {
// Machine list should NOT be empty to trigger a disconnect
// We need to sync machines again to reset energy usage etc
disconnectAll();
syncMachines();
}
@@ -182,6 +186,8 @@ public class StorageNetwork {
RefinedStorageUtils.updateBlock(world, pos);
}
}
ticks++;
}
public List<TileMachine> getMachines() {

View File

@@ -0,0 +1,13 @@
package refinedstorage.api.storagenet;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
public class StorageNetworkTickHandler {
@SubscribeEvent
public void onServerTick(TickEvent.ServerTickEvent e) {
for (StorageNetwork network : StorageNetworkRegistry.NETWORKS.values()) {
network.update();
}
}
}

View File

@@ -64,8 +64,10 @@ public class BlockController extends BlockBase {
@Override
public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) {
TileController controller = (TileController) world.getTileEntity(pos);
return super.getActualState(state, world, pos)
.withProperty(ENERGY, ((TileController) world.getTileEntity(pos)).getEnergyScaled(8));
.withProperty(ENERGY, (int) Math.ceil((float) controller.getEnergy() / (float) StorageNetwork.ENERGY_CAPACITY * 8f));
}
@Override
@@ -89,8 +91,6 @@ public class BlockController extends BlockBase {
@Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack itemStack) {
super.onBlockPlacedBy(world, pos, state, player, itemStack);
if (!world.isRemote) {
StorageNetwork network = new StorageNetwork(world, pos, (EnumControllerType) state.getValue(TYPE));
@@ -104,6 +104,8 @@ public class BlockController extends BlockBase {
((TileController) world.getTileEntity(pos)).setNetwork(network);
}
super.onBlockPlacedBy(world, pos, state, player, itemStack);
}
@Override

View File

@@ -5,10 +5,16 @@ import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import refinedstorage.tile.TileMachine;
import refinedstorage.tile.controller.ControllerSearcher;
import refinedstorage.tile.controller.TileController;
import java.util.HashSet;
public abstract class BlockMachine extends BlockBase {
public static final PropertyBool CONNECTED = PropertyBool.create("connected");
@@ -36,6 +42,19 @@ public abstract class BlockMachine extends BlockBase {
.withProperty(CONNECTED, ((TileMachine) world.getTileEntity(pos)).isConnected());
}
@Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack) {
super.onBlockPlacedBy(world, pos, state, player, stack);
if (!world.isRemote) {
TileController controller = ControllerSearcher.search(world, pos, new HashSet<String>());
if (controller != null) {
((TileMachine) world.getTileEntity(pos)).onConnected(world, controller);
}
}
}
@Override
public void breakBlock(World world, BlockPos pos, IBlockState state) {
if (!world.isRemote) {

View File

@@ -3,6 +3,7 @@ package refinedstorage.gui;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.api.storagenet.StorageNetwork;
import refinedstorage.container.ContainerController;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.tile.controller.ClientMachine;
@@ -45,7 +46,7 @@ public class GuiController extends GuiBase {
drawTexture(x, y, 0, 0, width, height);
int barHeightNew = (int) ((float) controller.getEnergyStored(null) / (float) controller.getMaxEnergyStored(null) * (float) barHeight);
int barHeightNew = (int) ((float) controller.getEnergy() / (float) StorageNetwork.ENERGY_CAPACITY * (float) barHeight);
drawTexture(x + barX, y + barY + barHeight - barHeightNew, 178, barHeight - barHeightNew, barWidth, barHeightNew);
}
@@ -102,7 +103,7 @@ public class GuiController extends GuiBase {
}
if (inBounds(barX, barY, barWidth, barHeight, mouseX, mouseY)) {
drawTooltip(mouseX, mouseY, t("misc.refinedstorage:energy_usage", controller.getEnergyUsage()) + "\n" + t("misc.refinedstorage:energy_stored", controller.getEnergyStored(null), controller.getMaxEnergyStored(null)));
drawTooltip(mouseX, mouseY, t("misc.refinedstorage:energy_usage", controller.getEnergyUsage()) + "\n" + t("misc.refinedstorage:energy_stored", controller.getEnergy(), StorageNetwork.ENERGY_CAPACITY));
}
}

View File

@@ -5,6 +5,7 @@ import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
@@ -19,6 +20,7 @@ import refinedstorage.RefinedStorageItems;
import refinedstorage.api.solderer.SoldererRecipeBasic;
import refinedstorage.api.solderer.SoldererRegistry;
import refinedstorage.api.storage.NBTStorage;
import refinedstorage.api.storagenet.StorageNetworkTickHandler;
import refinedstorage.block.BlockBase;
import refinedstorage.block.EnumControllerType;
import refinedstorage.block.EnumGridType;
@@ -483,6 +485,7 @@ public class CommonProxy {
}
public void init(FMLInitializationEvent e) {
MinecraftForge.EVENT_BUS.register(new StorageNetworkTickHandler());
}
public void postInit(FMLPostInitializationEvent e) {

View File

@@ -48,8 +48,6 @@ public abstract class TileMachine extends TileBase implements ISynchronizedConta
if (!worldObj.isRemote) {
if (ticks == 0) {
block = worldObj.getBlockState(pos).getBlock();
searchController(worldObj);
}
if (wasConnected != isActive() && canSendConnectivityData()) {

View File

@@ -63,7 +63,10 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
}
public int getEnergyScaled(int i) {
return (int) ((float) network.getEnergy().getEnergyStored() / (float) network.getEnergy().getMaxEnergyStored() * (float) i);
float stored = worldObj.isRemote ? energy : network.getEnergy().getEnergyStored();
float max = StorageNetwork.ENERGY_CAPACITY;
return (int) (stored / max * (float) i);
}
@Override
@@ -78,7 +81,7 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
@Override
public RedstoneMode getRedstoneMode() {
return network.getRedstoneMode();
return worldObj.isRemote ? redstoneMode : network.getRedstoneMode();
}
@Override
@@ -110,7 +113,6 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
public void readContainerData(ByteBuf buf) {
this.energy = buf.readInt();
this.energyUsage = buf.readInt();
this.redstoneMode = RedstoneMode.getById(buf.readInt());
List<ClientMachine> machines = new ArrayList<ClientMachine>();
@@ -131,10 +133,10 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
@Override
public void writeContainerData(ByteBuf buf) {
buf.writeInt(getEnergyStored(null));
buf.writeInt(energyUsage);
buf.writeInt(network.getEnergy().getEnergyStored());
buf.writeInt(network.getEnergyUsage());
buf.writeInt(redstoneMode.id);
buf.writeInt(network.getRedstoneMode().id);
List<ClientMachine> m = new ArrayList<ClientMachine>();