Skip to content

Commit 888dd70

Browse files
committed
Fix rendering of YABBA barrels
And other tile entities that require a valid or known world. Fixes #395
1 parent a39fa74 commit 888dd70

File tree

2 files changed

+41
-8
lines changed

2 files changed

+41
-8
lines changed

src/main/java/org/dave/compactmachines3/gui/machine/widgets/WidgetMachinePreview.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.dave.compactmachines3.gui.machine.GuiMachineData;
2424
import org.dave.compactmachines3.misc.ConfigurationHandler;
2525
import org.dave.compactmachines3.misc.RenderTickCounter;
26+
import org.dave.compactmachines3.utility.ChunkUtils;
2627
import org.dave.compactmachines3.utility.Logz;
2728
import org.lwjgl.opengl.GL11;
2829

@@ -239,10 +240,19 @@ public void renderLayer(BlockRendererDispatcher blockrendererdispatcher, BufferB
239240

240241
ForgeHooksClient.setRenderLayer(renderLayer);
241242

243+
try {
244+
TileEntity te = CompactMachines3.clientWorldData.worldClone.getTileEntity(pos);
245+
if (te != null && ChunkUtils.erroneousTiles.contains(te.getClass().getName())) {
246+
continue;
247+
}
248+
} catch(Exception e) {
249+
continue;
250+
}
251+
242252
try {
243253
blockrendererdispatcher.renderBlock(state, pos, CompactMachines3.clientWorldData.worldClone, buffer);
244-
} catch (Exception e) {
245-
e.printStackTrace();
254+
} catch (Throwable e) {
255+
Logz.debug("Failed rendering of block: %s", state.getBlock());
246256
}
247257

248258
ForgeHooksClient.setRenderLayer(null);
@@ -292,7 +302,13 @@ private void renderTileEntities(TileEntityRendererDispatcher renderer, List<Bloc
292302
}
293303
ForgeHooksClient.setRenderLayer(BlockRenderLayer.SOLID);
294304
for (BlockPos pos : toRender) {
295-
TileEntity te = CompactMachines3.clientWorldData.worldClone.getTileEntity(pos);
305+
TileEntity te;
306+
try {
307+
te = CompactMachines3.clientWorldData.worldClone.getTileEntity(pos);
308+
} catch (Exception e) {
309+
continue;
310+
}
311+
296312
if(te != null) {
297313
te.setWorld(CompactMachines3.clientWorldData.worldClone);
298314
te.setPos(pos);

src/main/java/org/dave/compactmachines3/utility/ChunkUtils.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,14 @@
1919
import org.dave.compactmachines3.world.data.provider.ExtraTileDataProviderRegistry;
2020

2121
import java.lang.reflect.Field;
22+
import java.util.ArrayList;
2223
import java.util.List;
2324

2425
public class ChunkUtils {
2526
private static Field updatePacketNBTField;
2627

28+
public static List<String> erroneousTiles = new ArrayList<>();
29+
2730
public static IBlockAccess getBlockAccessFromChunk(Chunk chunk) {
2831
return new ChunkBlockAccess(chunk);
2932
}
@@ -239,13 +242,27 @@ public static void loadEntities(World worldIn, NBTTagCompound compound, Chunk ch
239242
TileEntity tileentity = TileEntity.create(worldIn, nbttagcompound2);
240243
if (tileentity != null)
241244
{
242-
tileentity.setWorld(worldIn);
245+
if(erroneousTiles.contains(tileentity.getClass().getName())) {
246+
continue;
247+
}
243248

244-
for(AbstractExtraTileDataProvider provider : ExtraTileDataProviderRegistry.getDataProviders(tileentity)) {
245-
String tagName = String.format("cm3_extra:%s", provider.getName());
246-
if(nbttagcompound2.hasKey(tagName)) {
247-
provider.readExtraData(tileentity, (NBTTagCompound) nbttagcompound2.getTag(tagName));
249+
try {
250+
tileentity.setWorld(worldIn);
251+
} catch (Exception e) {
252+
Logz.warn("Unable to render tile-entity %s in a fake world. Skipping.", tileentity.getClass().getName());
253+
erroneousTiles.add(tileentity.getClass().getName());
254+
continue;
255+
}
256+
257+
try {
258+
for (AbstractExtraTileDataProvider provider : ExtraTileDataProviderRegistry.getDataProviders(tileentity)) {
259+
String tagName = String.format("cm3_extra:%s", provider.getName());
260+
if (nbttagcompound2.hasKey(tagName)) {
261+
provider.readExtraData(tileentity, (NBTTagCompound) nbttagcompound2.getTag(tagName));
262+
}
248263
}
264+
} catch (Exception e) {
265+
Logz.warn("Unable to provide extra tile-entity data for %s", tileentity.getClass().getName());
249266
}
250267

251268
chunk.addTileEntity(tileentity);

0 commit comments

Comments
 (0)