diff --git a/dependencies.gradle b/dependencies.gradle index ffba4a9f..ad510e81 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -17,6 +17,7 @@ dependencies { compileOnly("curse.maven:ee3-65509:2305023") { // https://www.curseforge.com/minecraft/mc-mods/ee3/files/2305023 transitive = false } + compileOnly("com.github.GTNewHorizons:Angelica:1.0.0-alpha28:api") { transitive = false } diff --git a/src/main/java/com/cricketcraft/chisel/api/rendering/TextureType.java b/src/main/java/com/cricketcraft/chisel/api/rendering/TextureType.java index ce9347ca..91e41354 100644 --- a/src/main/java/com/cricketcraft/chisel/api/rendering/TextureType.java +++ b/src/main/java/com/cricketcraft/chisel/api/rendering/TextureType.java @@ -100,7 +100,8 @@ public enum TextureType { @Override @SideOnly(Side.CLIENT) protected RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world, Object cachedObject) { - RenderBlocksColumn ret = theRenderBlocksColumn; + TextureType.initStatics(); + RenderBlocksColumn ret = theRenderBlocksColumn.get(); Pair data = (Pair) cachedObject; ret.blockAccess = world; @@ -205,7 +206,7 @@ public enum TextureType { @Override @SideOnly(Side.CLIENT) protected RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world, Object cachedObject) { - RenderBlocksCTM ret = theRenderBlocksCTM; + RenderBlocksCTM ret = theRenderBlocksCTM.get(); Triple data = (Triple) cachedObject; ret.blockAccess = world; @@ -325,9 +326,9 @@ public enum TextureType { private static final CTM ctm = CTM.getInstance(); private static final Random rand = new Random(); @SideOnly(Side.CLIENT) - private static RenderBlocksCTM theRenderBlocksCTM; + private static ThreadLocal theRenderBlocksCTM; @SideOnly(Side.CLIENT) - private static RenderBlocksColumn theRenderBlocksColumn; + private static ThreadLocal theRenderBlocksColumn; private String[] suffixes; static { @@ -338,16 +339,17 @@ public enum TextureType { this.suffixes = suffixes.length == 0 ? new String[] { "" } : suffixes; } - private static void initStatics() { - if (theRenderBlocksCTM == null) { - theRenderBlocksCTM = new RenderBlocksCTM(); - theRenderBlocksColumn = new RenderBlocksColumn(); - } - } + private static void initStatics() { + if (theRenderBlocksCTM == null) { + theRenderBlocksCTM = ThreadLocal.withInitial(RenderBlocksCTM::new); + theRenderBlocksColumn = ThreadLocal.withInitial(RenderBlocksColumn::new); + } + } + @SideOnly(Side.CLIENT) public static void clearStatics() { - theRenderBlocksCTM = null; - theRenderBlocksColumn = null; + theRenderBlocksCTM.remove(); + theRenderBlocksColumn.remove(); } public ISubmapManager createManagerFor(ICarvingVariation variation, String texturePath) { @@ -428,7 +430,6 @@ public enum TextureType { @Override public RenderBlocks createRenderContext(RenderBlocks rendererOld, Block block, IBlockAccess world) { - initStatics(); RenderBlocks rb = type.createRenderContext(rendererOld, world, cachedObject); rb.setRenderBoundsFromBlock(block); return rb; diff --git a/src/main/java/team/chisel/client/render/RendererCTMPane.java b/src/main/java/team/chisel/client/render/RendererCTMPane.java index 06c401c2..67b82428 100644 --- a/src/main/java/team/chisel/client/render/RendererCTMPane.java +++ b/src/main/java/team/chisel/client/render/RendererCTMPane.java @@ -10,10 +10,13 @@ import net.minecraft.world.IBlockAccess; import org.lwjgl.opengl.GL11; +import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; + import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; import team.chisel.ctmlib.Drawing; +@ThreadSafeISBRH(perThread = false) public class RendererCTMPane implements ISimpleBlockRenderingHandler { public static int id; @@ -32,8 +35,6 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler { class PaneRenderer { - Tessellator tessellator; - double i0u0; double i0uh; double i0u1; @@ -69,8 +70,6 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler { double y1; void set(double x, double y, double z, IIcon icon, IIcon icon1, IIcon icon2) { - tessellator = Tessellator.instance; - i0u0 = icon.getMinU(); i0uh = icon.getInterpolatedU(8.0D); i0u1 = icon.getMaxU(); @@ -107,6 +106,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler { } public void renderNorthPane() { + Tessellator tessellator = Tessellator.instance; + tessellator.addVertexWithUV(xh, y1, z0, i0uh, i0v0); tessellator.addVertexWithUV(xh, y0, z0, i0uh, i0v1); tessellator.addVertexWithUV(xh, y0, zh, i0u0, i0v1); @@ -118,6 +119,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler { } public void renderSouthPane() { + Tessellator tessellator = Tessellator.instance; + tessellator.addVertexWithUV(xh, y1, zh, i0u1, i0v0); tessellator.addVertexWithUV(xh, y0, zh, i0u1, i0v1); tessellator.addVertexWithUV(xh, y0, z1, i0uh, i0v1); @@ -129,6 +132,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler { } public void renderWestPane() { + Tessellator tessellator = Tessellator.instance; + tessellator.addVertexWithUV(x0, y1, zh, i0uh, i0v0); tessellator.addVertexWithUV(x0, y0, zh, i0uh, i0v1); tessellator.addVertexWithUV(xh, y0, zh, i0u0, i0v1); @@ -140,6 +145,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler { } public void renderEastPane() { + Tessellator tessellator = Tessellator.instance; + tessellator.addVertexWithUV(xh, y1, zh, i0u1, i0v0); tessellator.addVertexWithUV(xh, y0, zh, i0u1, i0v1); tessellator.addVertexWithUV(x1, y0, zh, i0uh, i0v1); @@ -151,6 +158,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler { } public void renderVerticalNS(double y, double zoff0, double zoff1, double v0, double v1) { + Tessellator tessellator = Tessellator.instance; + tessellator.addVertexWithUV(xp0, y0 + y, z0 + zoff0, i1u0, i1v0 + i1v * v0); tessellator.addVertexWithUV(xp0, y0 + y, z0 + zoff1, i1u0, i1v0 + i1v * v1); tessellator.addVertexWithUV(xp1, y0 + y, z0 + zoff1, i1u1, i1v0 + i1v * v1); @@ -162,6 +171,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler { } public void renderVerticalWE(double y, double xoff0, double xoff1, double v0, double v1) { + Tessellator tessellator = Tessellator.instance; + tessellator.addVertexWithUV(x0 + xoff0, y0 + y, zp1, i1u1, i1v0 + i1v * v0); tessellator.addVertexWithUV(x0 + xoff1, y0 + y, zp1, i1u1, i1v0 + i1v * v1); tessellator.addVertexWithUV(x0 + xoff1, y0 + y, zp0, i1u0, i1v0 + i1v * v1); @@ -173,6 +184,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler { } public void renderHorizontalNS(double zoff, double v0, double v1) { + Tessellator tessellator = Tessellator.instance; + tessellator.addVertexWithUV(xp0, y1, z0 + zoff, i2u0, i2v0 + i2v * v1); tessellator.addVertexWithUV(xp0, y0, z0 + zoff, i2u0, i2v0 + i2v * v0); tessellator.addVertexWithUV(xp1, y0, z0 + zoff, i2u1, i2v0 + i2v * v0); @@ -185,6 +198,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler { } public void renderHorizontalWE(double xoff, double v0, double v1) { + Tessellator tessellator = Tessellator.instance; + tessellator.addVertexWithUV(x0 + xoff, y1, zp0, i2u0, i2v0 + i2v * v1); tessellator.addVertexWithUV(x0 + xoff, y0, zp0, i2u0, i2v0 + i2v * v0); tessellator.addVertexWithUV(x0 + xoff, y0, zp1, i2u1, i2v0 + i2v * v0); @@ -196,13 +211,14 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler { } } - PaneRenderer paneRenderer = new PaneRenderer(); + final ThreadLocal paneRendererThreadLocal = ThreadLocal.withInitial(PaneRenderer::new); @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b, int modelId, RenderBlocks renderer) { BlockPane block = (BlockPane) b; - Tessellator tessellator = Tessellator.instance; + final Tessellator tessellator = Tessellator.instance; + final PaneRenderer paneRenderer = paneRendererThreadLocal.get(); tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); diff --git a/src/main/java/team/chisel/client/render/RendererEldritch.java b/src/main/java/team/chisel/client/render/RendererEldritch.java index 03676ad3..9d0b7fe9 100644 --- a/src/main/java/team/chisel/client/render/RendererEldritch.java +++ b/src/main/java/team/chisel/client/render/RendererEldritch.java @@ -6,11 +6,14 @@ import net.minecraft.world.IBlockAccess; import org.lwjgl.opengl.GL11; +import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; + import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; import team.chisel.Chisel; import team.chisel.ctmlib.Drawing; +@ThreadSafeISBRH(perThread = false) public class RendererEldritch implements ISimpleBlockRenderingHandler { public RendererEldritch() { @@ -24,12 +27,14 @@ public class RendererEldritch implements ISimpleBlockRenderingHandler { GL11.glTranslatef(0.5F, 0.5F, 0.5F); } - RenderBlocksEldritch renderer = new RenderBlocksEldritch(); + ThreadLocal rendererThreadLocal = ThreadLocal.withInitial(RenderBlocksEldritch::new); @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks rendererOld) { + final RenderBlocksEldritch renderer = rendererThreadLocal.get(); + // tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, // y, z)); /* diff --git a/src/main/java/team/chisel/client/render/RendererLayeredGlow.java b/src/main/java/team/chisel/client/render/RendererLayeredGlow.java index e42f8bc0..22d6547d 100644 --- a/src/main/java/team/chisel/client/render/RendererLayeredGlow.java +++ b/src/main/java/team/chisel/client/render/RendererLayeredGlow.java @@ -7,6 +7,8 @@ import net.minecraft.world.IBlockAccess; import org.lwjgl.opengl.GL11; +import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; + import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; import team.chisel.Chisel; @@ -15,6 +17,7 @@ import team.chisel.config.Configurations; import team.chisel.ctmlib.Drawing; import team.chisel.utils.GeneralClient; +@ThreadSafeISBRH(perThread = false) public class RendererLayeredGlow implements ISimpleBlockRenderingHandler { public RendererLayeredGlow() { @@ -36,8 +39,9 @@ public class RendererLayeredGlow implements ISimpleBlockRenderingHandler { @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { - Tessellator.instance.setColorOpaque_I(Configurations.configColors[world.getBlockMetadata(x, y, z)]); - Tessellator.instance.setBrightness(0xF000F0); + final Tessellator tessellator = Tessellator.instance; + tessellator.setColorOpaque_I(Configurations.configColors[world.getBlockMetadata(x, y, z)]); + tessellator.setBrightness(0xF000F0); Drawing.renderAllFaces(renderer, block, x, y, z, ((BlockCarvableGlow) block).getGlowTexture()); renderer.renderStandardBlock(block, x, y, z); return true; diff --git a/src/main/java/team/chisel/client/render/RendererMultiLayer.java b/src/main/java/team/chisel/client/render/RendererMultiLayer.java index 3aa50bec..38fa5003 100644 --- a/src/main/java/team/chisel/client/render/RendererMultiLayer.java +++ b/src/main/java/team/chisel/client/render/RendererMultiLayer.java @@ -16,14 +16,18 @@ import net.minecraft.init.Blocks; import net.minecraft.world.IBlockAccess; import net.minecraftforge.client.MinecraftForgeClient; +import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; + import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; import team.chisel.block.BlockMultiLayerBase; import team.chisel.ctmlib.Drawing; +@ThreadSafeISBRH(perThread = false) public class RendererMultiLayer implements ISimpleBlockRenderingHandler { - float bot = -0.001f, top = 1.0f - bot; + final static float bot = -0.001f; + final static float top = 1.0f - bot; public static int id; public RendererMultiLayer() { diff --git a/src/main/java/team/chisel/client/render/RendererRoadLine.java b/src/main/java/team/chisel/client/render/RendererRoadLine.java index 8dd3ecff..05a12532 100644 --- a/src/main/java/team/chisel/client/render/RendererRoadLine.java +++ b/src/main/java/team/chisel/client/render/RendererRoadLine.java @@ -7,12 +7,15 @@ import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; +import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; + import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; import team.chisel.Chisel; import team.chisel.block.BlockRoadLine; import team.chisel.ctmlib.Drawing; +@ThreadSafeISBRH(perThread = false) public class RendererRoadLine implements ISimpleBlockRenderingHandler { public RendererRoadLine() { diff --git a/src/main/java/team/chisel/client/render/RendererSimpleLayered.java b/src/main/java/team/chisel/client/render/RendererSimpleLayered.java index 8c0185ed..1d22fced 100644 --- a/src/main/java/team/chisel/client/render/RendererSimpleLayered.java +++ b/src/main/java/team/chisel/client/render/RendererSimpleLayered.java @@ -6,12 +6,15 @@ import net.minecraft.world.IBlockAccess; import org.lwjgl.opengl.GL11; +import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; + import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; import team.chisel.Chisel; import team.chisel.block.BlockCarvableLayered; import team.chisel.ctmlib.Drawing; +@ThreadSafeISBRH(perThread = false) public class RendererSimpleLayered implements ISimpleBlockRenderingHandler { public RendererSimpleLayered() { diff --git a/src/main/java/team/chisel/client/render/RendererSnakeStone.java b/src/main/java/team/chisel/client/render/RendererSnakeStone.java index bbad78b6..edcdaabd 100644 --- a/src/main/java/team/chisel/client/render/RendererSnakeStone.java +++ b/src/main/java/team/chisel/client/render/RendererSnakeStone.java @@ -6,11 +6,14 @@ import net.minecraft.world.IBlockAccess; import org.lwjgl.opengl.GL11; +import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; + import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; import team.chisel.block.BlockSnakestone; import team.chisel.ctmlib.Drawing; +@ThreadSafeISBRH(perThread = false) public class RendererSnakeStone implements ISimpleBlockRenderingHandler { public static int id; diff --git a/src/main/java/team/chisel/client/render/RendererStairs.java b/src/main/java/team/chisel/client/render/RendererStairs.java index 97747c87..54fb07c6 100644 --- a/src/main/java/team/chisel/client/render/RendererStairs.java +++ b/src/main/java/team/chisel/client/render/RendererStairs.java @@ -6,11 +6,14 @@ import net.minecraft.world.IBlockAccess; import org.lwjgl.opengl.GL11; +import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; + import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; import team.chisel.block.BlockCarvableStairs; import team.chisel.ctmlib.Drawing; +@ThreadSafeISBRH(perThread = false) public class RendererStairs implements ISimpleBlockRenderingHandler { public static int id; diff --git a/src/main/java/team/chisel/ctmlib/CTM.java b/src/main/java/team/chisel/ctmlib/CTM.java index 3db06848..271c176f 100644 --- a/src/main/java/team/chisel/ctmlib/CTM.java +++ b/src/main/java/team/chisel/ctmlib/CTM.java @@ -83,7 +83,7 @@ public class CTM { public Optional disableObscuredFaceCheck = Optional.absent(); - protected TIntObjectMap submapMap = new TIntObjectHashMap(); + protected TIntObjectMap submapMap = new TIntObjectHashMap<>(); protected EnumMap connectionMap = Maps.newEnumMap(Dir.class); protected CTM() { diff --git a/src/main/java/team/chisel/ctmlib/CTMLib.java b/src/main/java/team/chisel/ctmlib/CTMLib.java index 5f9ac563..052bbede 100644 --- a/src/main/java/team/chisel/ctmlib/CTMLib.java +++ b/src/main/java/team/chisel/ctmlib/CTMLib.java @@ -1,10 +1,11 @@ package team.chisel.ctmlib; import cpw.mods.fml.common.ModAPIManager; +import team.chisel.Tags; public class CTMLib { - public static final String VERSION = "GRADLETOKEN_VERSION"; + public static final String VERSION = Tags.VERSION; private static boolean chiselPresent, chiselInitialized; diff --git a/src/main/java/team/chisel/ctmlib/CTMRenderer.java b/src/main/java/team/chisel/ctmlib/CTMRenderer.java index 06097d8c..6a47c11a 100644 --- a/src/main/java/team/chisel/ctmlib/CTMRenderer.java +++ b/src/main/java/team/chisel/ctmlib/CTMRenderer.java @@ -18,7 +18,7 @@ import cpw.mods.fml.common.registry.GameRegistry; */ public class CTMRenderer implements ISimpleBlockRenderingHandler { - private int renderId; + private final int renderId; public CTMRenderer(int renderId) { this.renderId = renderId; diff --git a/src/main/java/team/chisel/ctmlib/RenderBlocksCTM.java b/src/main/java/team/chisel/ctmlib/RenderBlocksCTM.java index 66b824b2..29a73ed6 100644 --- a/src/main/java/team/chisel/ctmlib/RenderBlocksCTM.java +++ b/src/main/java/team/chisel/ctmlib/RenderBlocksCTM.java @@ -113,10 +113,11 @@ public class RenderBlocksCTM extends RenderBlocks { private static double u, v, xDiff, yDiff, zDiff, uDiff, vDiff; void render(RenderBlocksCTM inst, ForgeDirection normal, int cacheID) { + final Tessellator tessellator = Tessellator.instance; + if (inst.enableAO) { - Tessellator.instance - .setColorOpaque_F(inst.redCache[cacheID], inst.grnCache[cacheID], inst.bluCache[cacheID]); - Tessellator.instance.setBrightness(inst.lightingCache[cacheID]); + tessellator.setColorOpaque_F(inst.redCache[cacheID], inst.grnCache[cacheID], inst.bluCache[cacheID]); + tessellator.setBrightness(inst.lightingCache[cacheID]); } u = cacheID == 1 || cacheID == 2 ? inst.maxU : inst.minU; @@ -151,7 +152,7 @@ public class RenderBlocksCTM extends RenderBlocks { xDiff = yDiff = zDiff = 1; } - Tessellator.instance.addVertexWithUV( + tessellator.addVertexWithUV( inst.renderMinX + (x * xDiff), inst.renderMinY + (y * yDiff), inst.renderMinZ + (z * zDiff), @@ -225,7 +226,6 @@ public class RenderBlocksCTM extends RenderBlocks { renderMaxX = renderMaxY = renderMaxZ = 1; } - protected Tessellator tessellator = Tessellator.instance; protected double minU, maxU; protected double minV, maxV; protected int[] lightingCache = new int[4]; @@ -253,16 +253,17 @@ public class RenderBlocksCTM extends RenderBlocks { by = y; bz = z; meta = Minecraft.getMinecraft().theWorld.getBlockMetadata(x, y, z); + final Tessellator tessellator = Tessellator.instance; - Tessellator.instance.setColorOpaque_F(1.0F, 1.0F, 1.0F); - Tessellator.instance.addTranslation(x, y, z); + tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F); + tessellator.addTranslation(x, y, z); if (rendererOld != null && rendererOld.hasOverrideBlockTexture()) { setOverrideBlockTexture(rendererOld.overrideBlockTexture); } inWorld = true; boolean res = super.renderStandardBlock(block, x, y, z); inWorld = false; - Tessellator.instance.addTranslation(-x, -y, -z); + tessellator.addTranslation(-x, -y, -z); return res; } diff --git a/src/main/java/team/chisel/ctmlib/SubmapManagerCTM.java b/src/main/java/team/chisel/ctmlib/SubmapManagerCTM.java index 53cfc30f..b6822fe7 100644 --- a/src/main/java/team/chisel/ctmlib/SubmapManagerCTM.java +++ b/src/main/java/team/chisel/ctmlib/SubmapManagerCTM.java @@ -17,7 +17,8 @@ import lombok.Getter; public class SubmapManagerCTM implements ISubmapManager { @SideOnly(Side.CLIENT) - private static RenderBlocksCTM rb; + private static final ThreadLocal renderBlocksThreadLocal = ThreadLocal + .withInitial(RenderBlocksCTM::new); @Getter private TextureSubmap submap, submapSmall; @@ -54,9 +55,7 @@ public class SubmapManagerCTM implements ISubmapManager { @Override @SideOnly(Side.CLIENT) public RenderBlocks createRenderContext(RenderBlocks rendererOld, Block block, IBlockAccess world) { - if (rb == null) { - rb = new RenderBlocksCTM(); - } + RenderBlocksCTM rb = renderBlocksThreadLocal.get(); rb.setRenderBoundsFromBlock(block); rb.submap = submap; rb.submapSmall = submapSmall;