diff --git a/src/main/java/gregtech/client/renderer/scene/ISceneRenderHook.java b/src/main/java/gregtech/client/renderer/scene/ISceneRenderHook.java deleted file mode 100644 index e6674c9b4d2..00000000000 --- a/src/main/java/gregtech/client/renderer/scene/ISceneRenderHook.java +++ /dev/null @@ -1,17 +0,0 @@ -package gregtech.client.renderer.scene; - -import net.minecraft.util.BlockRenderLayer; - -/** - * Created with IntelliJ IDEA. - * - * @Author: KilaBash - * @Date: 2021/08/25 - * @Description: Scene Render State hooks. - * This is where you decide whether or not this group of pos should be rendered. What other requirements - * do you have for rendering. - */ -public interface ISceneRenderHook { - - void apply(boolean isTESR, int pass, BlockRenderLayer layer); -} diff --git a/src/main/java/gregtech/client/renderer/scene/WorldSceneRenderer.java b/src/main/java/gregtech/client/renderer/scene/WorldSceneRenderer.java index d5947edf46d..cb0dacd1c63 100644 --- a/src/main/java/gregtech/client/renderer/scene/WorldSceneRenderer.java +++ b/src/main/java/gregtech/client/renderer/scene/WorldSceneRenderer.java @@ -25,6 +25,8 @@ import net.minecraftforge.fml.relauncher.SideOnly; import codechicken.lib.vec.Vector3; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import org.jetbrains.annotations.Nullable; import org.lwjgl.opengl.GL11; import org.lwjgl.util.glu.GLU; @@ -33,8 +35,6 @@ import java.nio.FloatBuffer; import java.nio.IntBuffer; import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.Map; import java.util.function.Consumer; import javax.vecmath.Vector3f; @@ -61,7 +61,7 @@ public abstract class WorldSceneRenderer { .order(ByteOrder.nativeOrder()).asFloatBuffer(); public final World world; - public final Map, ISceneRenderHook> renderedBlocksMap; + public final Collection renderedBlocks = new ObjectOpenHashSet<>(); private Consumer beforeRender; private Consumer afterRender; private Consumer onLookingAt; @@ -73,7 +73,6 @@ public abstract class WorldSceneRenderer { public WorldSceneRenderer(World world) { this.world = world; - renderedBlocksMap = new LinkedHashMap<>(); } public WorldSceneRenderer setBeforeWorldRender(Consumer callback) { @@ -86,9 +85,9 @@ public WorldSceneRenderer setAfterWorldRender(Consumer callb return this; } - public WorldSceneRenderer addRenderedBlocks(Collection blocks, ISceneRenderHook renderHook) { + public WorldSceneRenderer addRenderedBlocks(@Nullable Collection blocks) { if (blocks != null) { - this.renderedBlocksMap.put(blocks, renderHook); + this.renderedBlocks.addAll(blocks); } return this; } @@ -240,31 +239,24 @@ protected void drawWorld() { for (BlockRenderLayer layer : BlockRenderLayer.values()) { ForgeHooksClient.setRenderLayer(layer); int pass = layer == BlockRenderLayer.TRANSLUCENT ? 1 : 0; + setDefaultPassRenderState(pass); - renderedBlocksMap.forEach((renderedBlocks, hook) -> { - if (hook != null) { - hook.apply(false, pass, layer); - } else { - setDefaultPassRenderState(pass); - } + BufferBuilder buffer = Tessellator.getInstance().getBuffer(); + buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); + BlockRendererDispatcher blockrendererdispatcher = mc.getBlockRendererDispatcher(); - BufferBuilder buffer = Tessellator.getInstance().getBuffer(); - buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); - BlockRendererDispatcher blockrendererdispatcher = mc.getBlockRendererDispatcher(); - - for (BlockPos pos : renderedBlocks) { - IBlockState state = world.getBlockState(pos); - Block block = state.getBlock(); - if (block == Blocks.AIR) continue; - state = state.getActualState(world, pos); - if (block.canRenderInLayer(state, layer)) { - blockrendererdispatcher.renderBlock(state, pos, world, buffer); - } + for (BlockPos pos : renderedBlocks) { + IBlockState state = world.getBlockState(pos); + Block block = state.getBlock(); + if (block == Blocks.AIR) continue; + state = state.getActualState(world, pos); + if (block.canRenderInLayer(state, layer)) { + blockrendererdispatcher.renderBlock(state, pos, world, buffer); } + } - Tessellator.getInstance().draw(); - Tessellator.getInstance().getBuffer().setTranslation(0, 0, 0); - }); + Tessellator.getInstance().draw(); + Tessellator.getInstance().getBuffer().setTranslation(0, 0, 0); } } finally { ForgeHooksClient.setRenderLayer(oldRenderLayer); @@ -276,22 +268,15 @@ protected void drawWorld() { // render TESR for (int pass = 0; pass < 2; pass++) { ForgeHooksClient.setRenderPass(pass); - int finalPass = pass; - renderedBlocksMap.forEach((renderedBlocks, hook) -> { - if (hook != null) { - hook.apply(true, finalPass, null); - } else { - setDefaultPassRenderState(finalPass); - } - for (BlockPos pos : renderedBlocks) { - TileEntity tile = world.getTileEntity(pos); - if (tile != null) { - if (tile.shouldRenderInPass(finalPass)) { - TileEntityRendererDispatcher.instance.render(tile, pos.getX(), pos.getY(), pos.getZ(), 0); - } + setDefaultPassRenderState(pass); + for (BlockPos pos : renderedBlocks) { + TileEntity tile = world.getTileEntity(pos); + if (tile != null) { + if (tile.shouldRenderInPass(pass)) { + TileEntityRendererDispatcher.instance.render(tile, pos.getX(), pos.getY(), pos.getZ(), 0); } } - }); + } } ForgeHooksClient.setRenderPass(-1); GlStateManager.enableDepth(); diff --git a/src/main/java/gregtech/common/items/behaviors/monitorplugin/AdvancedMonitorPluginBehavior.java b/src/main/java/gregtech/common/items/behaviors/monitorplugin/AdvancedMonitorPluginBehavior.java index 7c3da2f0166..694dcc04f5e 100644 --- a/src/main/java/gregtech/common/items/behaviors/monitorplugin/AdvancedMonitorPluginBehavior.java +++ b/src/main/java/gregtech/common/items/behaviors/monitorplugin/AdvancedMonitorPluginBehavior.java @@ -104,7 +104,7 @@ private void createWorldScene() { TrackedDummyWorld dummyWorld = new TrackedDummyWorld(world); dummyWorld.setRenderFilter(pos -> validPos.contains(pos)); worldSceneRenderer = new FBOWorldSceneRenderer(dummyWorld, FBO); - worldSceneRenderer.addRenderedBlocks(validPos, null); + worldSceneRenderer.addRenderedBlocks(validPos); center = new Vector3f((minX + maxX) / 2f + 0.5f, (minY + maxY) / 2f + 0.5f, (minZ + maxZ) / 2f + 0.5f); worldSceneRenderer.setCameraLookAt(center, 10 / scale, Math.toRadians(rotationPitch), Math.toRadians(rotationYaw)); diff --git a/src/main/java/gregtech/integration/jei/multiblock/MultiblockInfoRecipeWrapper.java b/src/main/java/gregtech/integration/jei/multiblock/MultiblockInfoRecipeWrapper.java index b746f67a2cd..1e5dd465b99 100644 --- a/src/main/java/gregtech/integration/jei/multiblock/MultiblockInfoRecipeWrapper.java +++ b/src/main/java/gregtech/integration/jei/multiblock/MultiblockInfoRecipeWrapper.java @@ -217,7 +217,7 @@ private void setNextLayer(int newLayer) { if (renderer != null) { TrackedDummyWorld world = ((TrackedDummyWorld) renderer.world); resetCenter(world); - renderer.renderedBlocksMap.clear(); + renderer.renderedBlocks.clear(); int minY = (int) world.getMinPos().getY(); Collection renderBlocks; if (newLayer == -1) { @@ -226,7 +226,7 @@ private void setNextLayer(int newLayer) { renderBlocks = world.renderedBlocks.stream().filter(pos -> pos.getY() - minY == newLayer) .collect(Collectors.toSet()); } - renderer.addRenderedBlocks(renderBlocks, null); + renderer.addRenderedBlocks(renderBlocks); } } @@ -593,7 +593,7 @@ private MBPattern initializePattern(@NotNull MultiblockShapeInfo shapeInfo, @Not Vector3f minPos = world.getMinPos(); center = new Vector3f(minPos.x + size.x / 2, minPos.y + size.y / 2, minPos.z + size.z / 2); - worldSceneRenderer.addRenderedBlocks(world.renderedBlocks, null); + worldSceneRenderer.addRenderedBlocks(world.renderedBlocks); worldSceneRenderer.setOnLookingAt(ray -> {}); worldSceneRenderer.setAfterWorldRender(renderer -> { @@ -607,8 +607,7 @@ private MBPattern initializePattern(@NotNull MultiblockShapeInfo shapeInfo, @Not renderBlockOverLay(selected, 255, 0, 0); }); world.updateEntities(); - world.setRenderFilter( - pos -> worldSceneRenderer.renderedBlocksMap.keySet().stream().anyMatch(c -> c.contains(pos))); + world.setRenderFilter(worldSceneRenderer.renderedBlocks::contains); Map predicateMap = new HashMap<>(); if (controllerBase != null) {