Skip to content

Commit 687d668

Browse files
committed
Auto update machine view every few ticks
This is configurable on the server.
1 parent d14004f commit 687d668

File tree

5 files changed

+71
-6
lines changed

5 files changed

+71
-6
lines changed

src/main/java/org/dave/compactmachines3/gui/GuiHandler.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.dave.compactmachines3.gui;
22

33
import net.minecraft.entity.player.EntityPlayer;
4+
import net.minecraft.util.math.BlockPos;
45
import net.minecraft.world.World;
56
import net.minecraftforge.fml.common.network.IGuiHandler;
67
import net.minecraftforge.fml.common.network.NetworkRegistry;
@@ -20,7 +21,7 @@ public static void init() {
2021
@Override
2122
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
2223
if(ID == GuiIds.MACHINE_VIEW.ordinal() || ID == GuiIds.MACHINE_ADMIN.ordinal()) {
23-
return new GuiMachineContainer();
24+
return new GuiMachineContainer(world, new BlockPos(x, y, z));
2425
}
2526

2627
return null;
@@ -33,9 +34,9 @@ public Object getClientGuiElement(int ID, EntityPlayer player, World world, int
3334
Pages.activePageOnClient = "welcome";
3435
return new GuiPSDScreen();
3536
} else if(ID == GuiIds.MACHINE_VIEW.ordinal()) {
36-
return new GuiMachine();
37+
return new GuiMachine(world, new BlockPos(x, y, z));
3738
} else if(ID == GuiIds.MACHINE_ADMIN.ordinal()) {
38-
return new GuiMachineAdmin();
39+
return new GuiMachineAdmin(world, new BlockPos(x, y, z));
3940
}
4041

4142
return null;

src/main/java/org/dave/compactmachines3/gui/machine/GuiMachine.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.dave.compactmachines3.gui.machine;
22

3+
import net.minecraft.block.Block;
34
import net.minecraft.block.state.IBlockState;
45
import net.minecraft.client.Minecraft;
56
import net.minecraft.client.gui.GuiButton;
@@ -19,6 +20,7 @@
1920
import net.minecraft.util.ITickable;
2021
import net.minecraft.util.ResourceLocation;
2122
import net.minecraft.util.math.BlockPos;
23+
import net.minecraft.world.World;
2224
import net.minecraftforge.client.ForgeHooksClient;
2325
import net.minecraftforge.fml.client.config.GuiCheckBox;
2426
import org.dave.compactmachines3.CompactMachines3;
@@ -60,8 +62,8 @@ public class GuiMachine extends GuiContainer {
6062
int glListId = -1;
6163
int activeTab = 0; // TODO: This should not be an integer, but rather a GuiTab object or something like that
6264

63-
public GuiMachine() {
64-
super(new GuiMachineContainer());
65+
public GuiMachine(World world, BlockPos pos) {
66+
super(new GuiMachineContainer(world, pos));
6567
}
6668

6769
private boolean shouldShowTabs() {

src/main/java/org/dave/compactmachines3/gui/machine/GuiMachineAdmin.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import net.minecraft.client.gui.GuiButton;
44
import net.minecraft.client.resources.I18n;
5+
import net.minecraft.util.math.BlockPos;
56
import net.minecraft.util.text.TextFormatting;
7+
import net.minecraft.world.World;
68
import org.dave.compactmachines3.network.MessageRequestMachineAction;
79
import org.dave.compactmachines3.network.PackageHandler;
810

@@ -20,6 +22,10 @@ public class GuiMachineAdmin extends GuiMachine {
2022
private List<GuiButton> adminButtons;
2123
private int buttonIdOffset = 3;
2224

25+
public GuiMachineAdmin(World world, BlockPos pos) {
26+
super(world, pos);
27+
}
28+
2329
@Override
2430
public void initGui() {
2531
super.initGui();
Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,61 @@
11
package org.dave.compactmachines3.gui.machine;
22

33
import net.minecraft.entity.player.EntityPlayer;
4+
import net.minecraft.entity.player.EntityPlayerMP;
45
import net.minecraft.inventory.Container;
6+
import net.minecraft.inventory.IContainerListener;
7+
import net.minecraft.tileentity.TileEntity;
8+
import net.minecraft.util.math.BlockPos;
9+
import net.minecraft.world.World;
10+
import org.dave.compactmachines3.misc.ConfigurationHandler;
11+
import org.dave.compactmachines3.network.MessageMachineChunk;
12+
import org.dave.compactmachines3.network.MessageMachineContent;
13+
import org.dave.compactmachines3.network.PackageHandler;
14+
import org.dave.compactmachines3.tile.TileEntityMachine;
15+
import org.dave.compactmachines3.utility.Logz;
516

617
public class GuiMachineContainer extends Container {
7-
public GuiMachineContainer() {
18+
World world;
19+
BlockPos pos;
20+
21+
public GuiMachineContainer(World world, BlockPos pos) {
22+
this.world = world;
23+
this.pos = pos;
824
}
925

1026
@Override
1127
public boolean canInteractWith(EntityPlayer playerIn) {
1228
return true;
1329
}
30+
31+
@Override
32+
public void detectAndSendChanges() {
33+
super.detectAndSendChanges();
34+
35+
if(ConfigurationHandler.MachineSettings.autoUpdateRate <= 0) {
36+
return;
37+
}
38+
39+
if (this.world.isRemote || this.world.getTotalWorldTime() % ConfigurationHandler.MachineSettings.autoUpdateRate != 0) {
40+
return;
41+
}
42+
43+
TileEntity te = this.world.getTileEntity(this.pos);
44+
45+
if(te == null || !(te instanceof TileEntityMachine)) {
46+
return;
47+
}
48+
49+
TileEntityMachine machine = (TileEntityMachine) te;
50+
int coords = machine.coords;
51+
52+
for(IContainerListener listener : this.listeners) {
53+
if (!(listener instanceof EntityPlayerMP)) {
54+
continue;
55+
}
56+
57+
PackageHandler.instance.sendTo(new MessageMachineContent(coords), (EntityPlayerMP) listener);
58+
PackageHandler.instance.sendTo(new MessageMachineChunk(coords), (EntityPlayerMP) listener);
59+
}
60+
}
1461
}

src/main/java/org/dave/compactmachines3/misc/ConfigurationHandler.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,14 @@ private static void loadConfiguration() {
164164
"Render living entities in GUI"
165165
);
166166

167+
MachineSettings.autoUpdateRate = configuration.getInt(
168+
"autoUpdateRate",
169+
CATEGORY_MACHINES,
170+
20,
171+
0, Integer.MAX_VALUE,
172+
"Update the machine view GUI every n ticks. Set to 0 to disable. Lower values decrease performance significantly!"
173+
);
174+
167175
CompatSettings.doesWaterVaporize = configuration.getBoolean(
168176
"doesWaterVaporize",
169177
CATEGORY_COMPAT,
@@ -204,6 +212,7 @@ public static class MachineSettings {
204212
public static boolean allowEnteringWithoutPSD;
205213
public static boolean renderTileEntitiesInGUI;
206214
public static boolean renderLivingEntitiesInGUI;
215+
public static int autoUpdateRate;
207216
}
208217

209218
public static class Settings {

0 commit comments

Comments
 (0)