Skip to content

Commit 2f8a0d8

Browse files
davenonymousthraaawn
authored andcommitted
WIP Rendering rework
1 parent 59e874b commit 2f8a0d8

18 files changed

+326
-70
lines changed

src/main/java/org/dave/compactmachines3/CompactMachines3.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.dave.compactmachines3.utility.AnnotatedInstanceUtil;
2828
import org.dave.compactmachines3.utility.Logz;
2929
import org.dave.compactmachines3.world.ChunkLoadingMachines;
30+
import org.dave.compactmachines3.world.ClientWorldData;
3031
import org.dave.compactmachines3.world.WorldSavedDataMachines;
3132
import org.dave.compactmachines3.world.data.provider.ExtraTileDataProviderRegistry;
3233
import org.dave.compactmachines3.world.tools.DimensionTools;
@@ -40,6 +41,8 @@ public class CompactMachines3
4041
@Mod.Instance(CompactMachines3.MODID)
4142
public static CompactMachines3 instance;
4243

44+
public static ClientWorldData clientWorldData;
45+
4346
public static final CreativeTabCompactMachines3 CREATIVE_TAB = new CreativeTabCompactMachines3();
4447

4548
@SidedProxy(clientSide = "org.dave.compactmachines3.proxy.ClientProxy", serverSide = "org.dave.compactmachines3.proxy.ServerProxy")

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

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,9 @@ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
116116
return;
117117
}
118118

119-
if(GuiMachineData.requiresNewDisplayList) {
120-
TileEntityRendererDispatcher.instance.setWorld(GuiMachineData.proxyWorld);
119+
List<BlockPos> toRenderCopy = CompactMachines3.clientWorldData.worldClone.providerClient.getRenderListForChunk(GuiMachineData.coords * 64, 0);
120+
if(GuiMachineData.requiresNewDisplayList && toRenderCopy != null) {
121+
TileEntityRendererDispatcher.instance.setWorld(CompactMachines3.clientWorldData.worldClone);
121122

122123
if(glListId != -1) {
123124
GLAllocation.deleteDisplayLists(glListId);
@@ -129,13 +130,15 @@ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
129130
GlStateManager.pushAttrib();
130131
GlStateManager.pushMatrix();
131132

133+
GlStateManager.translate(-GuiMachineData.coords*1024, -40, 0);
132134
Tessellator tessellator = Tessellator.getInstance();
133135
BufferBuilder buffer = tessellator.getBuffer();
134136

135137
// Aaaand render
136138
BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher();
137139

138-
List<BlockPos> toRenderCopy = new ArrayList<>(GuiMachineData.toRender);
140+
//List<BlockPos> toRenderCopy = new ArrayList<>(GuiMachineData.toRender);
141+
139142

140143
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK);
141144
GlStateManager.disableAlpha();
@@ -155,7 +158,7 @@ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
155158
GlStateManager.glEndList();
156159
}
157160

158-
if(GuiMachineData.chunk != null && activeTab == 0) {
161+
if(CompactMachines3.clientWorldData.worldClone != null && activeTab == 0) {
159162
renderChunk(partialTicks);
160163

161164
drawOwner(partialTicks, mouseX, mouseY);
@@ -517,8 +520,9 @@ public void renderChunk(float partialTicks) {
517520

518521
GlStateManager.resetColor();
519522

523+
List<BlockPos> toRenderCopy = CompactMachines3.clientWorldData.worldClone.providerClient.getRenderListForChunk(GuiMachineData.coords * 1024, 0);
520524
if(ConfigurationHandler.MachineSettings.renderTileEntitiesInGUI) {
521-
this.renderTileEntities(TileEntityRendererDispatcher.instance, new ArrayList<>(GuiMachineData.toRender));
525+
this.renderTileEntities(TileEntityRendererDispatcher.instance, toRenderCopy);
522526
}
523527

524528
if(ConfigurationHandler.MachineSettings.renderLivingEntitiesInGUI) {
@@ -536,6 +540,31 @@ public void renderChunk(float partialTicks) {
536540
}
537541

538542
public void renderLayer(BlockRendererDispatcher blockrendererdispatcher, BufferBuilder buffer, BlockRenderLayer renderLayer, List<BlockPos> toRender) {
543+
for (BlockPos pos : toRender) {
544+
IBlockState state = CompactMachines3.clientWorldData.worldClone.getBlockState(pos);
545+
546+
if (!state.getBlock().canRenderInLayer(state, renderLayer)) {
547+
continue;
548+
}
549+
550+
try {
551+
state = state.getActualState(CompactMachines3.clientWorldData.worldClone, pos);
552+
} catch (Exception e) {
553+
Logz.debug("Could not determine actual state of block: %s", state.getBlock());
554+
}
555+
556+
ForgeHooksClient.setRenderLayer(renderLayer);
557+
558+
try {
559+
blockrendererdispatcher.renderBlock(state, pos, CompactMachines3.clientWorldData.worldClone, buffer);
560+
} catch (Exception e) {
561+
e.printStackTrace();
562+
}
563+
564+
ForgeHooksClient.setRenderLayer(null);
565+
}
566+
567+
/*
539568
IBlockAccess blockAccess = ChunkUtils.getBlockAccessFromChunk(GuiMachineData.chunk);
540569
for (BlockPos pos : toRender) {
541570
IBlockState state = blockAccess.getBlockState(pos);
@@ -560,10 +589,11 @@ public void renderLayer(BlockRendererDispatcher blockrendererdispatcher, BufferB
560589
561590
ForgeHooksClient.setRenderLayer(null);
562591
}
592+
*/
563593
}
564594

565595
private void renderEntities() {
566-
ClassInheritanceMultiMap<Entity> entities = GuiMachineData.chunk.getEntityLists()[2];
596+
ClassInheritanceMultiMap<Entity> entities = CompactMachines3.clientWorldData.worldClone.getChunk(GuiMachineData.coords * 16, 0).getEntityLists()[2];
567597
for(Entity entity : entities) {
568598
renderEntity(entity);
569599
}
@@ -596,13 +626,14 @@ private static void renderEntity(Entity entity) {
596626
}
597627

598628
private void renderTileEntities(TileEntityRendererDispatcher renderer, List<BlockPos> toRender) {
629+
if(toRender == null) {
630+
return;
631+
}
599632
ForgeHooksClient.setRenderLayer(BlockRenderLayer.SOLID);
600-
IBlockAccess blockAccess = ChunkUtils.getBlockAccessFromChunk(GuiMachineData.chunk);
601-
602633
for (BlockPos pos : toRender) {
603-
TileEntity te = blockAccess.getTileEntity(pos);
634+
TileEntity te = CompactMachines3.clientWorldData.worldClone.getTileEntity(pos);
604635
if(te != null) {
605-
te.setWorld(GuiMachineData.proxyWorld);
636+
te.setWorld(CompactMachines3.clientWorldData.worldClone);
606637
te.setPos(pos);
607638

608639
if (te instanceof ITickable) {

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

Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,12 @@
11
package org.dave.compactmachines3.gui.machine;
22

33
import net.minecraft.entity.player.EntityPlayer;
4-
import net.minecraft.nbt.NBTTagCompound;
5-
import net.minecraft.util.math.BlockPos;
6-
import net.minecraft.world.IBlockAccess;
7-
import net.minecraft.world.chunk.Chunk;
8-
import org.dave.compactmachines3.utility.ChunkUtils;
94
import org.dave.compactmachines3.utility.DimensionBlockPos;
10-
import org.dave.compactmachines3.world.ProxyWorld;
115

126
import java.util.ArrayList;
13-
import java.util.List;
147
import java.util.Set;
158

169
public class GuiMachineData {
17-
public static NBTTagCompound rawData;
1810
public static int machineSize;
1911
public static int coords;
2012

@@ -24,11 +16,6 @@ public class GuiMachineData {
2416
public static ArrayList<String> playerWhiteList;
2517
public static boolean locked;
2618

27-
public static Chunk chunk;
28-
public static ProxyWorld proxyWorld;
29-
30-
public static List<BlockPos> toRender;
31-
3219
public static boolean requiresNewDisplayList = false;
3320
public static boolean canRender = false;
3421

@@ -52,37 +39,16 @@ public static boolean isAllowedToEnter(EntityPlayer player) {
5239
return false;
5340
}
5441

55-
public static void updateGuiMachineData(NBTTagCompound rawData, int machineSize, int coords, DimensionBlockPos machinePos, String owner, String customName, Set<String> playerWhiteList, boolean locked) {
42+
public static void updateGuiMachineData(int machineSize, int coords, DimensionBlockPos machinePos, String owner, String customName, Set<String> playerWhiteList, boolean locked) {
5643
canRender = false;
57-
GuiMachineData.rawData = rawData;
5844
GuiMachineData.machineSize = machineSize;
5945
GuiMachineData.coords = coords;
6046
GuiMachineData.machinePos = machinePos;
6147
GuiMachineData.owner = owner;
6248
GuiMachineData.customName = customName;
63-
GuiMachineData.toRender = new ArrayList<>();
6449
GuiMachineData.playerWhiteList = new ArrayList<>(playerWhiteList);
6550
GuiMachineData.locked = locked;
6651

67-
proxyWorld = new ProxyWorld();
68-
GuiMachineData.chunk = ChunkUtils.readChunkFromNBT(proxyWorld, GuiMachineData.rawData);
69-
70-
IBlockAccess blockAccess = ChunkUtils.getBlockAccessFromChunk(GuiMachineData.chunk);
71-
proxyWorld.setFakeWorld(blockAccess);
72-
73-
for(int x = 15; x >= 0; x--) {
74-
for(int y = 15; y >= 0; y--) {
75-
for(int z = 15; z >= 0; z--) {
76-
BlockPos pos = new BlockPos(x, y, z);
77-
if(blockAccess.isAirBlock(pos)) {
78-
continue;
79-
}
80-
81-
toRender.add(pos);
82-
}
83-
}
84-
}
85-
8652
requiresNewDisplayList = true;
8753
canRender = true;
8854
}

src/main/java/org/dave/compactmachines3/integration/refinedstorage/NetworkNodeNullHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,4 @@ public String getId() {
9292
return "";
9393
}
9494
}
95-
}
95+
}

src/main/java/org/dave/compactmachines3/miniaturization/MultiblockRecipe.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package org.dave.compactmachines3.miniaturization;
22

3-
import cofh.core.util.helpers.NBTHelper;
4-
import cofh.thermaldynamics.duct.tiles.TileGrid;
3+
54
import net.minecraft.block.state.IBlockState;
65
import net.minecraft.init.Biomes;
76
import net.minecraft.init.Blocks;
87
import net.minecraft.init.Items;
98
import net.minecraft.item.Item;
109
import net.minecraft.item.ItemStack;
11-
import net.minecraft.nbt.NBTBase;
1210
import net.minecraft.nbt.NBTTagCompound;
1311
import net.minecraft.nbt.NBTUtil;
1412
import net.minecraft.tileentity.TileEntity;

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.minecraft.entity.player.EntityPlayerMP;
66
import net.minecraft.item.ItemBlock;
77
import net.minecraft.item.ItemStack;
8+
import net.minecraft.nbt.NBTTagCompound;
89
import net.minecraft.potion.Potion;
910
import net.minecraft.potion.PotionEffect;
1011
import net.minecraft.util.EnumFacing;
@@ -24,12 +25,24 @@
2425
import net.minecraftforge.fml.relauncher.SideOnly;
2526
import org.dave.compactmachines3.gui.machine.GuiMachineData;
2627
import org.dave.compactmachines3.init.Blockss;
28+
import org.dave.compactmachines3.network.PackageHandler;
29+
import org.dave.compactmachines3.network.MessageWorldInfo;
2730
import org.dave.compactmachines3.reference.EnumMachineSize;
2831
import org.dave.compactmachines3.world.WorldSavedDataMachines;
32+
import org.dave.compactmachines3.world.tools.DimensionTools;
2933
import org.dave.compactmachines3.world.tools.StructureTools;
3034
import org.dave.compactmachines3.world.tools.TeleportationTools;
3135

3236
public class PlayerEventHandler {
37+
@SubscribeEvent
38+
public static void onLogin(PlayerEvent.PlayerLoggedInEvent event) {
39+
if(!(event.player instanceof EntityPlayerMP)) {
40+
return;
41+
}
42+
EntityPlayerMP player = (EntityPlayerMP) event.player;
43+
PackageHandler.instance.sendTo(new MessageWorldInfo(DimensionTools.getServerMachineWorld().getWorldInfo()), player);
44+
}
45+
3346
@SubscribeEvent
3447
public static void onPlayerSpawn(PlayerEvent.PlayerRespawnEvent event) {
3548
if(event.player.getEntityWorld().provider.getDimension() != ConfigurationHandler.Settings.dimensionId) {
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package org.dave.compactmachines3.network;
2+
3+
import io.netty.buffer.ByteBuf;
4+
import net.minecraft.nbt.NBTTagCompound;
5+
import net.minecraft.util.math.BlockPos;
6+
import net.minecraft.world.chunk.Chunk;
7+
import net.minecraftforge.fml.common.network.ByteBufUtils;
8+
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
9+
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
10+
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
11+
import org.dave.compactmachines3.CompactMachines3;
12+
import org.dave.compactmachines3.utility.ChunkUtils;
13+
import org.dave.compactmachines3.world.tools.DimensionTools;
14+
15+
public class MessageMachineChunk implements IMessage, IMessageHandler<MessageMachineChunk, IMessage> {
16+
protected int coords;
17+
protected NBTTagCompound data;
18+
19+
public MessageMachineChunk() {
20+
}
21+
22+
public MessageMachineChunk(int coords) {
23+
this.coords = coords;
24+
Chunk chunk = DimensionTools.getServerMachineWorld().getChunk(new BlockPos(coords * 1024, 40, 0));
25+
this.data = ChunkUtils.writeChunkToNBT(chunk, DimensionTools.getServerMachineWorld(), new NBTTagCompound());
26+
}
27+
28+
@Override
29+
public void fromBytes(ByteBuf buf) {
30+
coords = buf.readInt();
31+
data = ByteBufUtils.readTag(buf);
32+
}
33+
34+
@Override
35+
public void toBytes(ByteBuf buf) {
36+
buf.writeInt(coords);
37+
ByteBufUtils.writeTag(buf, data);
38+
}
39+
40+
@Override
41+
public IMessage onMessage(MessageMachineChunk message, MessageContext ctx) {
42+
if(!CompactMachines3.clientWorldData.isInitialized()) {
43+
return null;
44+
}
45+
46+
// TODO: Clients might need to update the rendering of the machine block and its neighbors
47+
CompactMachines3.clientWorldData.worldClone.providerClient.loadChunkFromNBT(message.data);
48+
return null;
49+
}
50+
}

src/main/java/org/dave/compactmachines3/network/MessageMachineContent.java

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11
package org.dave.compactmachines3.network;
22

33
import io.netty.buffer.ByteBuf;
4-
import net.minecraft.nbt.NBTTagCompound;
54
import net.minecraft.tileentity.TileEntity;
6-
import net.minecraft.util.math.BlockPos;
7-
import net.minecraft.world.chunk.Chunk;
85
import net.minecraftforge.fml.common.network.ByteBufUtils;
96
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
107
import org.dave.compactmachines3.reference.EnumMachineSize;
118
import org.dave.compactmachines3.tile.TileEntityMachine;
12-
import org.dave.compactmachines3.utility.ChunkUtils;
139
import org.dave.compactmachines3.utility.DimensionBlockPos;
1410
import org.dave.compactmachines3.world.WorldSavedDataMachines;
1511
import org.dave.compactmachines3.world.tools.DimensionTools;
1612

17-
import java.util.*;
13+
import java.util.HashSet;
14+
import java.util.Set;
1815

1916
public class MessageMachineContent implements IMessage {
20-
protected NBTTagCompound data;
2117
protected int machineSize;
2218
protected int coords;
2319

@@ -34,9 +30,6 @@ public MessageMachineContent(int coords) {
3430
machinePos = data.getMachinePosition(coords);
3531
machineSize = data.machineSizes.getOrDefault(coords, EnumMachineSize.MAXIMUM).getDimension();
3632

37-
Chunk chunk = DimensionTools.getServerMachineWorld().getChunk(new BlockPos(coords * 1024, 40, 0));
38-
this.data = ChunkUtils.writeChunkToNBT(chunk, DimensionTools.getServerMachineWorld(), new NBTTagCompound());
39-
4033
if(machinePos != null) {
4134
TileEntity te = DimensionTools.getWorldServerForDimension(machinePos.getDimension()).getTileEntity(machinePos.getBlockPos());
4235
if (te != null && te instanceof TileEntityMachine) {
@@ -52,10 +45,6 @@ public MessageMachineContent(int coords) {
5245
public MessageMachineContent() {
5346
}
5447

55-
public void setData(NBTTagCompound data) {
56-
this.data = data;
57-
}
58-
5948
public void setMachineSize(int machineSize) {
6049
this.machineSize = machineSize;
6150
}
@@ -78,7 +67,6 @@ public void setCustomName(String customName) {
7867

7968
@Override
8069
public void fromBytes(ByteBuf buf) {
81-
data = ByteBufUtils.readTag(buf);
8270
machineSize = buf.readInt();
8371
coords = buf.readInt();
8472
boolean hasMachineBlock = buf.readBoolean();
@@ -100,7 +88,6 @@ public void fromBytes(ByteBuf buf) {
10088

10189
@Override
10290
public void toBytes(ByteBuf buf) {
103-
ByteBufUtils.writeTag(buf, data);
10491
buf.writeInt(machineSize);
10592
buf.writeInt(coords);
10693
if(machinePos != null) {

src/main/java/org/dave/compactmachines3/network/MessageMachineContentHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
public class MessageMachineContentHandler implements IMessageHandler<MessageMachineContent, MessageMachineContent> {
88
@Override
99
public MessageMachineContent onMessage(MessageMachineContent message, MessageContext ctx) {
10-
GuiMachineData.updateGuiMachineData(message.data, message.machineSize, message.coords, message.machinePos, message.owner, message.customName, message.playerWhiteList, message.locked);
10+
GuiMachineData.updateGuiMachineData(message.machineSize, message.coords, message.machinePos, message.owner, message.customName, message.playerWhiteList, message.locked);
1111

1212
return null;
1313
}

0 commit comments

Comments
 (0)