From fd88bbef5ba78673f3d808ec38d0df371ad050fe Mon Sep 17 00:00:00 2001 From: mckuhei Date: Sun, 2 Apr 2023 01:08:34 +0800 Subject: [PATCH] Fix frustrum and OpenGL occlusion check. --- script.txt | 77 +++++++++++++++++++ .../net/minecraft/server/MinecraftServer.java | 2 +- .../net/minecraft/src/BlockPistonBase.java | 2 +- .../net/minecraft/src/EntityPlayer.java | 6 +- .../net/minecraft/src/EntityRenderer.java | 6 +- src/minecraft/net/minecraft/src/Frustrum.java | 27 +++++-- src/minecraft/net/minecraft/src/ICamera.java | 6 +- .../net/minecraft/src/RenderGlobal.java | 18 ++--- .../net/minecraft/src/WorldRenderer.java | 7 +- 9 files changed, 128 insertions(+), 23 deletions(-) create mode 100644 script.txt diff --git a/script.txt b/script.txt new file mode 100644 index 0000000..1684f9c --- /dev/null +++ b/script.txt @@ -0,0 +1,77 @@ +/**************************************************************************/ +/* Generated by Zelix KlassMaster 17.0.3 Build Helper 2023.04.01 13:08:01 */ +/**************************************************************************/ + +classpath "D:\skidsuit\obfuscators\ZKM.jar" + "C:\Program Files\Java\jre1.8.0_361\lib\resources.jar" + "C:\Program Files\Java\jre1.8.0_361\lib\rt.jar" + "C:\Program Files\Java\jre1.8.0_361\lib\jsse.jar" + "C:\Program Files\Java\jre1.8.0_361\lib\jce.jar" + "C:\Program Files\Java\jre1.8.0_361\lib\charsets.jar" + "C:\Program Files\Java\jre1.8.0_361\lib\jfr.jar" + "D:\MCP\mcp72\jars\bin\jinput.jar" + "D:\MCP\mcp72\jars\bin\lwjgl.jar" + "D:\MCP\mcp72\jars\bin\lwjgl_util.jar" + "D:\MCP\mcp72\jars\bin\minecraft.jar"; + +open "D:\MCP\mcp72\bin\minecraft\argo" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\asn1" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\asn1\bc" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle" + "D:\MCP\mcp72\bin\minecraft\net\minecraft\client" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\jcajce\provider\config" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\crypto" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\crypto\engines" + "D:\MCP\mcp72\bin\minecraft\argo\format" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\crypto\io" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\jcajce" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\jce" + "D:\MCP\mcp72\bin\minecraft\argo\jdom" + "D:\MCP\mcp72\bin\minecraft\org\mcmodule\math" + "D:\MCP\mcp72\bin\minecraft\org\mcmodule" + "D:\MCP\mcp72\bin\minecraft" + "D:\MCP\mcp72\bin\minecraft\net\minecraft" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\crypto\modes" + "D:\MCP\mcp72\bin\minecraft\net" + "D:\MCP\mcp72\bin\minecraft\org" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\crypto\params" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\asn1\pkcs" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\jcajce\provider" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\jce\provider" + "D:\MCP\mcp72\bin\minecraft\argo\saj" + "D:\MCP\mcp72\bin\minecraft\net\minecraft\server" + "D:\MCP\mcp72\bin\minecraft\net\minecraft\src" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\jcajce\provider\util" + "D:\MCP\mcp72\bin\minecraft\org\bouncycastle\util" + "D:\MCP\mcp72\bin\minecraft\org\mcmodule\util"; + +trimExclude public abstract net.minecraft.server.MinecraftServer^ public static main(java.lang.String[]) and + public net.minecraft.client.MinecraftApplet extends java.applet.Applet and + net.minecraft.client.Minecraft^ public static main(java.lang.String[]); + +trim deleteSourceFileAttributes=true + deleteDeprecatedAttributes=true + deleteAnnotationAttributes=true + deleteExceptionAttributes=true + deleteUnknownAttributes=true; + +exclude public net.minecraft.client.^MinecraftApplet extends java.applet.Applet and + public abstract net.minecraft.server.^MinecraftServer^ public static main(java.lang.String[]) and + net.minecraft.client.^Minecraft^ public static main(java.lang.String[]); + +obfuscate changeLogFileIn="" + changeLogFileOut="ChangeLog.txt" + keepGenericsInfo=false + obfuscateFlow=light + exceptionObfuscation=light + encryptStringLiterals=enhanced + mixedCaseClassNames=ifInArchive + aggressiveMethodRenaming=true + randomize=true + collapsePackagesWithDefault="" + localVariables=obfuscate + lineNumbers=scramble + autoReflectionHandling=normal + obfuscateReferences=none; + +saveAll archiveCompression=all "D:\MCP\mcp72\reobf\minecraft"; diff --git a/src/minecraft/net/minecraft/server/MinecraftServer.java b/src/minecraft/net/minecraft/server/MinecraftServer.java index 4d88a43..52a82aa 100644 --- a/src/minecraft/net/minecraft/server/MinecraftServer.java +++ b/src/minecraft/net/minecraft/server/MinecraftServer.java @@ -1247,6 +1247,6 @@ public abstract class MinecraftServer implements Runnable, IPlayerUsage, IComman public static void main(String[] args) { StatList.func_75919_a(); - new Thread(new DedicatedServer(new File("."))).start(); + new DedicatedServer(new File(".")).startServerThread(); } } diff --git a/src/minecraft/net/minecraft/src/BlockPistonBase.java b/src/minecraft/net/minecraft/src/BlockPistonBase.java index 20259e9..83e2685 100644 --- a/src/minecraft/net/minecraft/src/BlockPistonBase.java +++ b/src/minecraft/net/minecraft/src/BlockPistonBase.java @@ -471,7 +471,7 @@ public class BlockPistonBase extends Block } } - while (var6 != par2 || var7 != par3 || var8 != par4) + while (!var6.equals(par2) || var7 != par3 || !var8.equals(par4)) { BigInteger x = var6.subtract(Facing.offsetsXForSide[par5]); var10 = var7 - Facing.offsetsYForSide[par5]; diff --git a/src/minecraft/net/minecraft/src/EntityPlayer.java b/src/minecraft/net/minecraft/src/EntityPlayer.java index d54ec73..5d8d38f 100644 --- a/src/minecraft/net/minecraft/src/EntityPlayer.java +++ b/src/minecraft/net/minecraft/src/EntityPlayer.java @@ -116,7 +116,7 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende * An instance of a fishing rod's hook. If this isn't null, the icon image of the fishing rod is slightly different */ public EntityFishHook fishEntity = null; - public BigDecimal posXBig = BigDecimal.ZERO, posZBig = BigDecimal.ZERO; + public BigDecimal posXBig = BigDecimal.ZERO, posZBig = BigDecimal.ZERO, lastPosX = BigDecimal.ZERO, lastPosZ = BigDecimal.ZERO; public EntityPlayer(World par1World) { @@ -209,6 +209,8 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende public void onUpdate() { // if(!worldObj.isRemote) System.out.println(this.posX); + this.lastPosX = posXBig; + this.lastPosZ = posZBig; if (this.itemInUse != null) { ItemStack var1 = this.inventory.getCurrentItem(); @@ -614,8 +616,8 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende public void moveEntity(double par1, double par3, double par5) { + super.boundingBox.setBounds(this.boundingBox.minX.doubleValue(), super.boundingBox.minY, this.boundingBox.minZ.doubleValue(), this.boundingBox.maxX.doubleValue(), super.boundingBox.maxY, this.boundingBox.maxZ.doubleValue()); super.moveEntity(par1, par3, par5); - super.boundingBox.setBounds(this.boundingBox.minX.doubleValue(), this.boundingBox.minY, this.boundingBox.minZ.doubleValue(), this.boundingBox.maxX.doubleValue(), this.boundingBox.maxY, this.boundingBox.maxZ.doubleValue()); if (this.noClip) { this.boundingBox.offset(par1, par3, par5); diff --git a/src/minecraft/net/minecraft/src/EntityRenderer.java b/src/minecraft/net/minecraft/src/EntityRenderer.java index c6a4d83..29a8107 100644 --- a/src/minecraft/net/minecraft/src/EntityRenderer.java +++ b/src/minecraft/net/minecraft/src/EntityRenderer.java @@ -1,6 +1,8 @@ package net.minecraft.src; import java.awt.image.BufferedImage; +import java.math.BigDecimal; + import org.mcmodule.math.BigInteger; import java.nio.FloatBuffer; import java.util.Iterator; @@ -942,9 +944,9 @@ public class EntityRenderer EntityPlayer var4 = (EntityPlayer) this.mc.renderViewEntity; RenderGlobal var5 = this.mc.renderGlobal; EffectRenderer var6 = this.mc.effectRenderer; - double var7 = var4.lastTickPosX + (var4.posX - var4.lastTickPosX) * (double)par1; + BigDecimal var7 = var4.lastPosX == var4.posXBig ? var4.posXBig : var4.lastPosX.add(BigDecimal.valueOf((var4.posXBig.subtract(var4.lastPosX)).doubleValue() * par1)); double var9 = var4.lastTickPosY + (var4.posY - var4.lastTickPosY) * (double)par1; - double var11 = var4.lastTickPosZ + (var4.posZ - var4.lastTickPosZ) * (double)par1; + BigDecimal var11 = var4.lastPosZ == var4.posZBig ? var4.posZBig : var4.lastPosZ.add(BigDecimal.valueOf((var4.posZBig.subtract(var4.lastPosZ)).doubleValue() * par1)); this.mc.mcProfiler.endStartSection("center"); for (int var13 = 0; var13 < 2; ++var13) diff --git a/src/minecraft/net/minecraft/src/Frustrum.java b/src/minecraft/net/minecraft/src/Frustrum.java index f8f8181..094b4a2 100644 --- a/src/minecraft/net/minecraft/src/Frustrum.java +++ b/src/minecraft/net/minecraft/src/Frustrum.java @@ -1,26 +1,39 @@ package net.minecraft.src; +import java.math.BigDecimal; + +import static java.math.BigDecimal.valueOf; +import static net.minecraft.src.MathHelper.normalize; + public class Frustrum implements ICamera { public static final boolean DISABLE_FRUSTRUM = Boolean.getBoolean("net.minecraft.src.DISABLE_FRUSTRUM"); private ClippingHelper clippingHelper = ClippingHelperImpl.getInstance(); - private double xPosition; + private BigDecimal xPosition; private double yPosition; - private double zPosition; + private BigDecimal zPosition; - public void setPosition(double par1, double par3, double par5) + public void setPosition(BigDecimal par1, double par3, BigDecimal par5) { this.xPosition = par1; this.yPosition = par3; this.zPosition = par5; } - + /** * Calls the clipping helper. Returns true if the box is inside all 6 clipping planes, otherwise returns false. */ public boolean isBoxInFrustum(double par1, double par3, double par5, double par7, double par9, double par11) { - return DISABLE_FRUSTRUM || this.clippingHelper.isBoxInFrustum(par1 - this.xPosition, par3 - this.yPosition, par5 - this.zPosition, par7 - this.xPosition, par9 - this.yPosition, par11 - this.zPosition); + return isBoxInFrustum(valueOf(normalize(par1)), par3, valueOf(normalize(par5)), valueOf(normalize(par7)), par9, valueOf(normalize(par11))); + } + + /** + * Calls the clipping helper. Returns true if the box is inside all 6 clipping planes, otherwise returns false. + */ + public boolean isBoxInFrustum(BigDecimal par1, double par3, BigDecimal par5, BigDecimal par7, double par9, BigDecimal par11) + { + return DISABLE_FRUSTRUM || this.clippingHelper.isBoxInFrustum(par1.subtract(this.xPosition).doubleValue(), par3 - this.yPosition, par5.subtract(this.zPosition).doubleValue(), par7.subtract(this.xPosition).doubleValue(), par9 - this.yPosition, par11.subtract(this.zPosition).doubleValue()); } /** @@ -30,4 +43,8 @@ public class Frustrum implements ICamera { return DISABLE_FRUSTRUM || this.isBoxInFrustum(par1AxisAlignedBB.minX, par1AxisAlignedBB.minY, par1AxisAlignedBB.minZ, par1AxisAlignedBB.maxX, par1AxisAlignedBB.maxY, par1AxisAlignedBB.maxZ); } + public boolean isBoundingBoxInFrustum(BigDecimalAABB par1AxisAlignedBB) + { + return DISABLE_FRUSTRUM || this.isBoxInFrustum(par1AxisAlignedBB.minX, par1AxisAlignedBB.minY, par1AxisAlignedBB.minZ, par1AxisAlignedBB.maxX, par1AxisAlignedBB.maxY, par1AxisAlignedBB.maxZ); + } } diff --git a/src/minecraft/net/minecraft/src/ICamera.java b/src/minecraft/net/minecraft/src/ICamera.java index edc2f73..340b507 100644 --- a/src/minecraft/net/minecraft/src/ICamera.java +++ b/src/minecraft/net/minecraft/src/ICamera.java @@ -1,11 +1,15 @@ package net.minecraft.src; +import java.math.BigDecimal; + public interface ICamera { /** * Returns true if the bounding box is inside all 6 clipping planes, otherwise returns false. */ boolean isBoundingBoxInFrustum(AxisAlignedBB var1); + + boolean isBoundingBoxInFrustum(BigDecimalAABB var1); - void setPosition(double var1, double var3, double var5); + void setPosition(BigDecimal var1, double var3, BigDecimal var5); } diff --git a/src/minecraft/net/minecraft/src/RenderGlobal.java b/src/minecraft/net/minecraft/src/RenderGlobal.java index 32a3cce..799017b 100644 --- a/src/minecraft/net/minecraft/src/RenderGlobal.java +++ b/src/minecraft/net/minecraft/src/RenderGlobal.java @@ -595,9 +595,9 @@ public class RenderGlobal implements IWorldAccess this.renderersSkippingRenderPass = 0; } - double var33 = par1EntityLiving.lastTickPosX + (par1EntityLiving.posX - par1EntityLiving.lastTickPosX) * par3; - double var7 = par1EntityLiving.lastTickPosY + (par1EntityLiving.posY - par1EntityLiving.lastTickPosY) * par3; - double var9 = par1EntityLiving.lastTickPosZ + (par1EntityLiving.posZ - par1EntityLiving.lastTickPosZ) * par3; + BigDecimal var33 = par1EntityLiving.lastPosX == par1EntityLiving.posXBig ? par1EntityLiving.posXBig : par1EntityLiving.lastPosX.add(BigDecimal.valueOf((par1EntityLiving.posXBig.subtract(par1EntityLiving.lastPosX)).doubleValue() * par3)); + double var7 = par1EntityLiving.lastTickPosY + (par1EntityLiving.posY - par1EntityLiving.lastTickPosY) * par3; + BigDecimal var9 = par1EntityLiving.lastPosZ == par1EntityLiving.posZBig ? par1EntityLiving.posZBig : par1EntityLiving.lastPosZ.add(BigDecimal.valueOf((par1EntityLiving.posZBig.subtract(par1EntityLiving.lastPosZ)).doubleValue() * par3)); double var11 = par1EntityLiving.posX - this.prevSortX; double var13 = par1EntityLiving.posY - this.prevSortY; double var15 = par1EntityLiving.posZ - this.prevSortZ; @@ -675,9 +675,9 @@ public class RenderGlobal implements IWorldAccess if (this.cloudOffsetX % var25 == var23 % var25) { WorldRenderer var26 = this.sortedWorldRenderers[var23]; - float var27 = (float)((double)var26.posXMinus.doubleValue() - var33); + float var27 = (float)((double)MathHelper.toBigDecimal(var26.posXMinus).subtract(var33).doubleValue()); float var28 = (float)((double)var26.posYMinus - var7); - float var29 = (float)((double)var26.posZMinus.doubleValue() - var9); + float var29 = (float)((double)MathHelper.toBigDecimal(var26.posZMinus).subtract(var9).doubleValue()); float var30 = var27 - var36; float var31 = var28 - var21; float var32 = var29 - var22; @@ -804,9 +804,9 @@ public class RenderGlobal implements IWorldAccess } EntityPlayer var19 = (EntityPlayer) this.mc.renderViewEntity; -// double var20 = var19.lastTickPosX + (var19.posX - var19.lastTickPosX) * par4; -// double var10 = var19.lastTickPosY + (var19.posY - var19.lastTickPosY) * par4; -// double var12 = var19.lastTickPosZ + (var19.posZ - var19.lastTickPosZ) * par4; + BigDecimal var20 = var19.lastPosX == var19.posXBig ? var19.posXBig : var19.lastPosX.add(BigDecimal.valueOf((var19.posXBig.subtract(var19.lastPosX)).doubleValue() * par4)); + double var10 = var19.lastTickPosY + (var19.posY - var19.lastTickPosY) * par4; + BigDecimal var12 = var19.lastPosZ == var19.posZBig ? var19.posZBig : var19.lastPosZ.add(BigDecimal.valueOf((var19.posZBig.subtract(var19.lastPosZ)).doubleValue() * par4)); int var14 = 0; RenderList[] var15 = this.allRenderLists; int var16 = var15.length; @@ -836,7 +836,7 @@ public class RenderGlobal implements IWorldAccess if (var17 < 0) { var17 = var14++; - this.allRenderLists[var17].func_78422_a(var22.posXMinus, var22.posYMinus, var22.posZMinus, var19.posXBig == null ? BigDecimal.ZERO : var19.posXBig, var19.posY, var19.posZBig == null ? BigDecimal.ZERO : var19.posZBig); + this.allRenderLists[var17].func_78422_a(var22.posXMinus, var22.posYMinus, var22.posZMinus, var20, var10, var12); } } diff --git a/src/minecraft/net/minecraft/src/WorldRenderer.java b/src/minecraft/net/minecraft/src/WorldRenderer.java index f818f48..f20307f 100644 --- a/src/minecraft/net/minecraft/src/WorldRenderer.java +++ b/src/minecraft/net/minecraft/src/WorldRenderer.java @@ -1,6 +1,8 @@ package net.minecraft.src; import org.mcmodule.math.BigInteger; + +import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -52,7 +54,7 @@ public class WorldRenderer public boolean needsUpdate; /** Axis aligned bounding box */ - public AxisAlignedBB rendererBoundingBox; + public BigDecimalAABB rendererBoundingBox; /** Chunk index */ public int chunkIndex; @@ -107,7 +109,8 @@ public class WorldRenderer this.posYMinus = par2 - this.posYClip; this.posZMinus = par3.subtract(BigInteger.valueOf(posZClip)); float var4 = 6.0F; - this.rendererBoundingBox = AxisAlignedBB.getBoundingBox((double)((float)par1.floatValue() - var4), (double)((float)par2 - var4), (double)((float)par3.floatValue() - var4), (double)((float)(par1.add(BigInteger.valueOf(16)).floatValue()) + var4), (double)((float)(par2 + 16) + var4), (double)((float)(par3.add(BigInteger.valueOf(16)).floatValue()) + var4)); + BigDecimal offset = BigDecimal.valueOf(var4); + this.rendererBoundingBox = new BigDecimalAABB(MathHelper.toBigDecimal(par1).subtract(offset), (double)((float)par2 - var4), MathHelper.toBigDecimal(par3).subtract(offset), MathHelper.toBigDecimal(par1.add(BigInteger.valueOf(16))).add(offset), (double)((float)(par2 + 16) + var4), MathHelper.toBigDecimal(par3.add(BigInteger.valueOf(16))).add(offset)); GL11.glNewList(this.glRenderList + 2, GL11.GL_COMPILE); RenderItem.renderAABB(AxisAlignedBB.getAABBPool().addOrModifyAABBInPool((double)((float)this.posXClip - var4), (double)((float)this.posYClip - var4), (double)((float)this.posZClip - var4), (double)((float)(this.posXClip + 16) + var4), (double)((float)(this.posYClip + 16) + var4), (double)((float)(this.posZClip + 16) + var4))); GL11.glEndList();