From 579b61a8aab228213cc663f41fd38b6df107d2aa Mon Sep 17 00:00:00 2001 From: Leah Anderson Date: Sat, 10 Aug 2024 09:05:47 -0600 Subject: [PATCH] u35 --- .../net/minecraft/client/Minecraft.edit.java | 18 +- .../client/gui/GuiMainMenu.edit.java | 149 ++++++--- .../client/gui/GuiOverlayDebug.edit.java | 11 +- .../client/gui/GuiVideoSettings.edit.java | 8 +- .../client/multiplayer/ServerData.edit.java | 9 +- .../client/particle/EntityFX.edit.java | 7 + .../renderer/BlockFluidRenderer.edit.java | 16 +- .../renderer/BlockModelRenderer.edit.java | 20 +- .../renderer/ChunkRenderContainer.edit.java | 12 +- .../client/renderer/EntityRenderer.edit.java | 125 +++++++- .../client/renderer/RenderGlobal.edit.java | 32 +- .../renderer/block/model/FaceBakery.edit.java | 23 +- .../renderer/chunk/RenderChunk.edit.java | 9 +- .../entity/RenderFallingBlock.edit.java | 11 +- .../renderer/entity/RenderManager.edit.java | 12 +- .../entity/layers/LayerSpiderEyes.edit.java | 9 + .../TileEntityRendererDispatcher.edit.java | 9 +- .../client/settings/GameSettings.edit.java | 27 +- .../net/minecraft/entity/Entity.edit.java | 62 +++- .../entity/EntityLivingBase.edit.java | 14 +- .../entity/ai/EntityAIBase.edit.java | 8 - .../entity/ai/EntityJumpHelper.edit.java | 8 - .../entity/ai/EntityLookHelper.edit.java | 8 - .../entity/ai/EntityMoveHelper.edit.java | 8 - .../entity/ai/EntitySenses.edit.java | 8 - .../entity/boss/EntityWither.edit.java | 7 + .../entity/item/EntityEnderCrystal.edit.java | 8 - .../entity/item/EntityEnderEye.edit.java | 24 +- .../entity/item/EntityEnderPearl.edit.java | 8 - .../item/EntityFireworkRocket.edit.java | 7 + .../entity/item/EntityItem.edit.java | 15 +- .../entity/item/EntityItemFrame.edit.java | 19 +- .../entity/item/EntityMinecartTNT.edit.java | 10 +- .../entity/item/EntityTNTPrimed.edit.java | 10 +- .../entity/item/EntityXPOrb.edit.java | 9 +- .../entity/monster/EntityBlaze.edit.java | 9 +- .../entity/monster/EntityCreeper.edit.java | 11 +- .../entity/monster/EntityMagmaCube.edit.java | 7 + .../projectile/EntityFireball.edit.java | 7 + .../net/minecraft/item/Item.edit.java | 7 + .../net/minecraft/item/ItemBlock.edit.java | 7 + .../minecraft/pathfinding/PathPoint.edit.java | 8 - .../server/MinecraftServer.edit.java | 10 +- .../management/ItemInWorldManager.edit.java | 8 - .../village/VillageDoorInfo.edit.java | 8 - .../net/minecraft/world/Teleporter.edit.java | 2 +- .../net/minecraft/world/World.edit.java | 11 +- .../minecraft/world/WorldProvider.edit.java | 10 +- .../net/minecraft/world/WorldType.edit.java | 8 - .../world/biome/BiomeGenMesa.edit.java | 17 +- .../net/minecraft/world/chunk/Chunk.edit.java | 6 +- .../world/chunk/EmptyChunk.edit.java | 8 +- .../world/demo/DemoWorldManager.edit.java | 8 - .../world/gen/ChunkProviderDebug.edit.java | 8 - .../world/gen/ChunkProviderEnd.edit.java | 2 +- .../world/gen/ChunkProviderFlat.edit.java | 27 +- .../world/gen/ChunkProviderGenerate.edit.java | 22 +- .../world/gen/ChunkProviderHell.edit.java | 12 +- .../minecraft/world/gen/MapGenBase.edit.java | 13 +- .../minecraft/world/gen/MapGenCaves.edit.java | 12 +- .../world/gen/MapGenCavesHell.edit.java | 12 +- .../world/gen/MapGenRavine.edit.java | 11 +- .../gen/feature/WorldGenBigTree.edit.java | 2 +- .../world/gen/layer/IntCache.edit.java | 8 - .../gen/structure/MapGenMineshaft.edit.java | 10 + .../structure/MapGenNetherBridge.edit.java | 7 +- .../MapGenScatteredFeature.edit.java | 12 +- .../gen/structure/MapGenStronghold.edit.java | 16 +- .../gen/structure/MapGenStructure.edit.java | 13 +- .../structure/MapGenStructureData.edit.java | 8 - .../gen/structure/MapGenVillage.edit.java | 12 +- .../structure/StructureBoundingBox.edit.java | 8 - .../StructureOceanMonument.edit.java | 12 +- .../world/pathfinder/NodeProcessor.edit.java | 8 - .../world/storage/WorldInfo.edit.java | 33 +- .../assets/minecraft/lang/en_US.edit.lang | 12 +- .../lwjgl/DesktopClientConfigAdapter.java | 5 + .../eaglercraft/v1_8/EaglerInputStream.java | 30 +- .../eaglercraft/v1_8/EaglercraftRandom.java | 35 ++- .../eaglercraft/v1_8/EaglercraftVersion.java | 2 +- .../v1_8/internal/IClientConfigAdapter.java | 2 + .../v1_8/opengl/FixedFunctionPipeline.java | 5 +- .../v1_8/opengl/GlStateManager.java | 16 + .../opengl/InstancedParticleRenderer.java | 26 +- .../ext/deferred/DeferredStateManager.java | 17 +- .../ext/deferred/EaglerDeferredPipeline.java | 21 +- .../ForwardAcceleratedEffectRenderer.java | 9 +- .../GBufferAcceleratedEffectRenderer.java | 9 +- .../PipelineShaderAccelParticleForward.java | 4 + .../PipelineShaderAccelParticleGBuffer.java | 4 + .../ext/deferred/program/ShaderSource.java | 5 + .../texture/EaglerBitwisePackedTexture.java | 12 + .../deferred/texture/PBRTextureMapUtils.java | 2 +- .../DynamicLightBucketLoader.java | 286 ++++++++++++++++++ .../dynamiclights/DynamicLightInstance.java | 39 +++ ...ynamicLightsAcceleratedEffectRenderer.java | 230 ++++++++++++++ .../DynamicLightsPipelineCompiler.java | 104 +++++++ .../DynamicLightsStateManager.java | 177 +++++++++++ .../DynamicLightsAccelParticleShader.java | 91 ++++++ .../DynamicLightsExtPipelineShader.java | 58 ++++ .../v1_8/sp/SingleplayerServerController.java | 6 +- .../sp/gui/GuiScreenBackupWorldSelection.java | 18 +- .../v1_8/sp/gui/GuiScreenOldSeedWarning.java | 48 +++ .../v1_8/sp/ipc/IPCPacketManager.java | 12 +- .../server/EaglerIntegratedServerWorker.java | 6 +- .../sp/server/export/WorldConverterEPK.java | 4 + .../sp/server/export/WorldConverterMCA.java | 3 +- .../assets/eagler/glsl/accel_particle.vsh | 11 +- sources/resources/assets/eagler/glsl/core.fsh | 2 +- .../eagler/glsl/deferred/accel_particle.vsh | 11 +- .../eagler/glsl/deferred/deferred_fog.fsh | 2 +- .../eagler/glsl/deferred/emissive_items.csv | 3 +- .../eagler/glsl/deferred/forward_core.fsh | 2 +- .../deferred/forward_glass_highlights.fsh | 2 +- .../glsl/deferred/realistic_water_render.fsh | 2 +- .../glsl/deferred/shader_pack_info.json | 2 +- .../accel_particle_dynamiclights.fsh | 71 +++++ .../accel_particle_dynamiclights.vsh | 61 ++++ .../glsl/dynamiclights/core_dynamiclights.fsh | 218 +++++++++++++ .../glsl/dynamiclights/core_dynamiclights.vsh | 80 +++++ .../resources/assets/eagler/mesh/readme.txt | 9 + .../gui/title/background/enable_blur.txt | 2 + sources/resources/plugin_download.zip | Bin 255599 -> 255959 bytes sources/resources/plugin_version.json | 2 +- .../v1_8/internal/PlatformApplication.java | 5 +- .../v1_8/internal/PlatformAssets.java | 11 +- .../v1_8/internal/PlatformAudio.java | 2 +- .../v1_8/internal/PlatformNetworking.java | 5 +- .../v1_8/internal/PlatformRuntime.java | 3 +- .../v1_8/internal/PlatformUpdateSvc.java | 3 +- .../v1_8/internal/PlatformWebRTC.java | 25 +- .../teavm/TeaVMClientConfigAdapter.java | 9 + .../v1_8/internal/teavm/TeaVMServerQuery.java | 5 +- .../internal/teavm/TeaVMUpdateThread.java | 3 +- .../v1_8/internal/teavm/TeaVMUtils.java | 128 +++++++- .../teavm/opts/JSEaglercraftXOptsRoot.java | 3 + .../internal/ClientPlatformSingleplayer.java | 8 +- .../internal/ServerPlatformSingleplayer.java | 8 +- 138 files changed, 2713 insertions(+), 443 deletions(-) delete mode 100644 patches/minecraft/net/minecraft/entity/ai/EntityAIBase.edit.java delete mode 100644 patches/minecraft/net/minecraft/entity/ai/EntityJumpHelper.edit.java delete mode 100644 patches/minecraft/net/minecraft/entity/ai/EntityLookHelper.edit.java delete mode 100644 patches/minecraft/net/minecraft/entity/ai/EntityMoveHelper.edit.java delete mode 100644 patches/minecraft/net/minecraft/entity/ai/EntitySenses.edit.java delete mode 100644 patches/minecraft/net/minecraft/entity/item/EntityEnderCrystal.edit.java delete mode 100644 patches/minecraft/net/minecraft/entity/item/EntityEnderPearl.edit.java delete mode 100644 patches/minecraft/net/minecraft/pathfinding/PathPoint.edit.java delete mode 100644 patches/minecraft/net/minecraft/server/management/ItemInWorldManager.edit.java delete mode 100644 patches/minecraft/net/minecraft/village/VillageDoorInfo.edit.java delete mode 100644 patches/minecraft/net/minecraft/world/WorldType.edit.java delete mode 100644 patches/minecraft/net/minecraft/world/demo/DemoWorldManager.edit.java delete mode 100644 patches/minecraft/net/minecraft/world/gen/ChunkProviderDebug.edit.java delete mode 100644 patches/minecraft/net/minecraft/world/gen/layer/IntCache.edit.java delete mode 100644 patches/minecraft/net/minecraft/world/gen/structure/MapGenStructureData.edit.java delete mode 100644 patches/minecraft/net/minecraft/world/gen/structure/StructureBoundingBox.edit.java delete mode 100644 patches/minecraft/net/minecraft/world/pathfinder/NodeProcessor.edit.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightBucketLoader.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightInstance.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsAcceleratedEffectRenderer.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsPipelineCompiler.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsStateManager.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsAccelParticleShader.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsExtPipelineShader.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenOldSeedWarning.java create mode 100644 sources/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.fsh create mode 100644 sources/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.vsh create mode 100644 sources/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.fsh create mode 100644 sources/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.vsh create mode 100644 sources/resources/assets/eagler/mesh/readme.txt create mode 100644 sources/resources/assets/minecraft/textures/gui/title/background/enable_blur.txt diff --git a/patches/minecraft/net/minecraft/client/Minecraft.edit.java b/patches/minecraft/net/minecraft/client/Minecraft.edit.java index 3c1d03c..f9d8c6a 100644 --- a/patches/minecraft/net/minecraft/client/Minecraft.edit.java +++ b/patches/minecraft/net/minecraft/client/Minecraft.edit.java @@ -377,9 +377,10 @@ ~ logger.info("Caught error stitching, removing all assigned resourcepacks"); ~ logger.info(runtimeexception); -> INSERT 9 : 11 @ 9 +> INSERT 9 : 12 @ 9 + ShaderSource.clearCache(); ++ GuiMainMenu.doResourceReloadHack(); + > CHANGE 7 : 10 @ 7 : 19 @@ -429,9 +430,20 @@ > DELETE 10 @ 10 : 11 -> INSERT 9 : 10 @ 9 +> INSERT 9 : 21 @ 9 -+ SingleplayerServerController.shutdownEaglercraftServer(); ++ if (SingleplayerServerController.isWorldRunning()) { ++ SingleplayerServerController.shutdownEaglercraftServer(); ++ while (SingleplayerServerController.getStatusState() == IntegratedServerState.WORLD_UNLOADING) { ++ EagUtils.sleep(50l); ++ SingleplayerServerController.runTick(); ++ } ++ } ++ if (SingleplayerServerController.isIntegratedServerWorkerAlive() ++ && SingleplayerServerController.canKillWorker()) { ++ SingleplayerServerController.killWorker(); ++ EagUtils.sleep(50l); ++ } > CHANGE 1 : 2 @ 1 : 2 diff --git a/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.edit.java index 299c6f9..859bb08 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.edit.java @@ -7,7 +7,9 @@ > DELETE 2 @ 2 : 3 -> DELETE 3 @ 3 : 4 +> CHANGE 3 : 4 @ 3 : 4 + +~ import java.nio.charset.StandardCharsets; > INSERT 1 : 2 @ 1 @@ -19,6 +21,7 @@ ~ import net.eaglerforge.gui.GuiMods; ~ import net.eaglerforge.gui.ModGUI; ~ import net.lax1dude.eaglercraft.v1_8.EagRuntime; +~ import net.lax1dude.eaglercraft.v1_8.EagUtils; ~ import net.lax1dude.eaglercraft.v1_8.EaglerInputStream; ~ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; ~ import net.lax1dude.eaglercraft.v1_8.EaglercraftVersion; @@ -27,7 +30,6 @@ ~ import com.google.common.base.Charsets; ~ import com.google.common.collect.Lists; ~ -~ import net.lax1dude.eaglercraft.v1_8.crypto.MD5Digest; ~ import net.lax1dude.eaglercraft.v1_8.crypto.SHA1Digest; ~ import net.lax1dude.eaglercraft.v1_8.internal.EnumCursorType; ~ import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; @@ -63,12 +65,10 @@ ~ private static final EaglercraftRandom RANDOM = new EaglercraftRandom(); -> INSERT 1 : 7 @ 1 +> INSERT 1 : 5 @ 1 + private boolean isDefault; + private static final int lendef = 5987; -+ private static final byte[] md5def = new byte[] { -61, -53, -36, 27, 24, 27, 103, -31, -58, -116, 113, -60, -67, -8, -+ -77, 30 }; + private static final byte[] sha1def = new byte[] { -107, 77, 108, 49, 11, -100, -8, -119, -1, -100, -85, -55, 18, + -69, -107, 113, -93, -101, -79, 32 }; @@ -80,58 +80,105 @@ > DELETE 2 @ 2 : 3 -> INSERT 3 : 4 @ 3 +> INSERT 3 : 6 @ 3 ++ private static final ResourceLocation minecraftTitleBlurFlag = new ResourceLocation( ++ "textures/gui/title/background/enable_blur.txt"); + private static final ResourceLocation eaglerGuiTextures = new ResourceLocation("eagler:gui/eagler_gui.png"); > DELETE 7 @ 7 : 9 -> CHANGE 6 : 9 @ 6 : 8 +> CHANGE 6 : 11 @ 6 : 8 ~ private static ResourceLocation backgroundTexture = null; ~ private GuiUpdateCheckerOverlay updateCheckerOverlay; ~ private GuiButton downloadOfflineButton; +~ private boolean enableBlur = true; +~ private boolean shouldReload = false; -> DELETE 2 @ 2 : 3 +> INSERT 1 : 3 @ 1 + ++ private static GuiMainMenu instance = null; ++ + +> CHANGE 1 : 2 @ 1 : 2 + +~ instance = this; > INSERT 1 : 2 @ 1 + updateCheckerOverlay = new GuiUpdateCheckerOverlay(false, this); -> DELETE 38 @ 38 : 44 +> CHANGE 38 : 65 @ 38 : 43 -> INSERT 1 : 25 @ 1 +~ +~ reloadResourceFlags(); +~ } +~ +~ private void reloadResourceFlags() { +~ if (Minecraft.getMinecraft().isDemo()) { +~ this.isDefault = false; +~ } else { +~ if (!EagRuntime.getConfiguration().isEnableMinceraft()) { +~ this.isDefault = false; +~ } else { +~ try { +~ byte[] bytes = EaglerInputStream.inputStreamToBytesQuiet(Minecraft.getMinecraft() +~ .getResourceManager().getResource(minecraftTitleTextures).getInputStream()); +~ if (bytes != null && bytes.length == lendef) { +~ SHA1Digest sha1 = new SHA1Digest(); +~ byte[] sha1out = new byte[20]; +~ sha1.update(bytes, 0, bytes.length); +~ sha1.doFinal(sha1out, 0); +~ this.isDefault = Arrays.equals(sha1out, sha1def); +~ } else { +~ this.isDefault = false; +~ } +~ } catch (IOException e) { +~ this.isDefault = false; +~ } +~ } -+ if (Minecraft.getMinecraft().isDemo()) { -+ this.isDefault = false; -+ } else { -+ MD5Digest md5 = new MD5Digest(); -+ SHA1Digest sha1 = new SHA1Digest(); -+ byte[] md5out = new byte[16]; -+ byte[] sha1out = new byte[20]; -+ try { -+ byte[] bytes = EaglerInputStream.inputStreamToBytesQuiet(Minecraft.getMinecraft().getResourceManager() -+ .getResource(minecraftTitleTextures).getInputStream()); -+ if (bytes != null) { -+ md5.update(bytes, 0, bytes.length); -+ sha1.update(bytes, 0, bytes.length); -+ md5.doFinal(md5out, 0); -+ sha1.doFinal(sha1out, 0); -+ this.isDefault = bytes.length == lendef && Arrays.equals(md5out, md5def) -+ && Arrays.equals(sha1out, sha1def); -+ } else { -+ this.isDefault = false; +> INSERT 2 : 21 @ 2 + ++ this.enableBlur = true; ++ ++ try { ++ byte[] bytes = EaglerInputStream.inputStreamToBytesQuiet( ++ Minecraft.getMinecraft().getResourceManager().getResource(minecraftTitleBlurFlag).getInputStream()); ++ if (bytes != null) { ++ String[] blurCfg = EagUtils.linesArray(new String(bytes, StandardCharsets.UTF_8)); ++ for (int i = 0; i < blurCfg.length; ++i) { ++ String s = blurCfg[i]; ++ if (s.startsWith("enable_blur=")) { ++ s = s.substring(12).trim(); ++ this.enableBlur = s.equals("1") || s.equals("true"); ++ break; ++ } + } -+ } catch (IOException e) { -+ this.isDefault = false; + } ++ } catch (IOException e) { ++ ; + } -> INSERT 4 : 7 @ 4 +> INSERT 2 : 8 @ 2 + ++ public static void doResourceReloadHack() { ++ if (instance != null) { ++ instance.shouldReload = true; ++ } ++ } ++ + +> INSERT 2 : 9 @ 2 + if (downloadOfflineButton != null) { + downloadOfflineButton.enabled = !UpdateService.shouldDisableDownloadButton(); + } ++ if (shouldReload) { ++ reloadResourceFlags(); ++ shouldReload = false; ++ } > CHANGE 6 : 7 @ 6 : 7 @@ -267,11 +314,25 @@ > DELETE 1 @ 1 : 2 -> CHANGE 8 : 9 @ 8 : 9 +> CHANGE 8 : 13 @ 8 : 9 -~ GlStateManager.gluPerspective(120.0F, 1.0F, 0.05F, 10.0F); +~ if (enableBlur) { +~ GlStateManager.gluPerspective(120.0F, 1.0F, 0.05F, 10.0F); +~ } else { +~ GlStateManager.gluPerspective(85.0F, (float) width / (float) height, 0.05F, 10.0F); +~ } -> CHANGE 73 : 77 @ 73 : 77 +> CHANGE 5 : 8 @ 5 : 6 + +~ if (enableBlur) { +~ GlStateManager.rotate(90.0F, 0.0F, 0.0F, 1.0F); +~ } + +> CHANGE 5 : 6 @ 5 : 6 + +~ byte b0 = enableBlur ? (byte) 8 : (byte) 1; + +> CHANGE 61 : 65 @ 61 : 65 ~ this.mc.getTextureManager().bindTexture(backgroundTexture); ~ EaglercraftGPU.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); @@ -282,11 +343,23 @@ > DELETE 9 @ 9 : 10 -> DELETE 24 @ 24 : 26 +> CHANGE 22 : 27 @ 22 : 23 -> CHANGE 7 : 8 @ 7 : 8 +~ if (enableBlur) { +~ this.renderSkybox(i, j, f); +~ } else { +~ this.drawPanorama(i, j, f); +~ } -~ if (this.isDefault || (double) this.updateCounter < 1.0E-4D) { +> DELETE 1 @ 1 : 3 + +> CHANGE 7 : 12 @ 7 : 8 + +~ boolean minc = (double) this.updateCounter < 1.0E-4D; +~ if (this.isDefault) { +~ minc = !minc; +~ } +~ if (minc) { > CHANGE 4 : 5 @ 4 : 5 diff --git a/patches/minecraft/net/minecraft/client/gui/GuiOverlayDebug.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiOverlayDebug.edit.java index 0d95cd3..5e45371 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiOverlayDebug.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiOverlayDebug.edit.java @@ -18,7 +18,7 @@ + import java.util.Locale; -> INSERT 1 : 13 @ 1 +> INSERT 1 : 14 @ 1 + import java.util.TimeZone; + @@ -31,6 +31,7 @@ + import net.lax1dude.eaglercraft.v1_8.internal.EnumPlatformType; + import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; + import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; ++ import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager; + import net.lax1dude.eaglercraft.v1_8.sp.SingleplayerServerController; > CHANGE 5 : 6 @ 5 : 10 @@ -316,7 +317,13 @@ ~ HString.format("Facing: %s (%s) (%.1f / %.1f)", -> CHANGE 5 : 6 @ 5 : 6 +> INSERT 3 : 6 @ 3 + ++ if (DynamicLightsStateManager.isDynamicLightsRender()) { ++ arraylist.add(6, DynamicLightsStateManager.getF3String()); ++ } + +> CHANGE 2 : 3 @ 2 : 3 ~ arraylist.add("Biome: " + chunk.getBiome(blockpos, null).biomeName); diff --git a/patches/minecraft/net/minecraft/client/gui/GuiVideoSettings.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiVideoSettings.edit.java index 4575877..18744aa 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiVideoSettings.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiVideoSettings.edit.java @@ -21,10 +21,10 @@ ~ GameSettings.Options.VIEW_BOBBING, GameSettings.Options.GUI_SCALE, GameSettings.Options.GAMMA, ~ GameSettings.Options.RENDER_CLOUDS, GameSettings.Options.PARTICLES, GameSettings.Options.FXAA, ~ GameSettings.Options.MIPMAP_LEVELS, GameSettings.Options.BLOCK_ALTERNATIVES, -~ GameSettings.Options.ENTITY_SHADOWS, GameSettings.Options.FOG, GameSettings.Options.FULLSCREEN, -~ GameSettings.Options.FNAW_SKINS, GameSettings.Options.HUD_FPS, GameSettings.Options.HUD_COORDS, -~ GameSettings.Options.HUD_PLAYER, GameSettings.Options.HUD_STATS, GameSettings.Options.HUD_WORLD, -~ GameSettings.Options.HUD_24H, GameSettings.Options.CHUNK_FIX }; +~ GameSettings.Options.ENTITY_SHADOWS, GameSettings.Options.FOG, GameSettings.Options.EAGLER_DYNAMIC_LIGHTS, +~ GameSettings.Options.FULLSCREEN, GameSettings.Options.FNAW_SKINS, GameSettings.Options.HUD_FPS, +~ GameSettings.Options.HUD_COORDS, GameSettings.Options.HUD_PLAYER, GameSettings.Options.HUD_STATS, +~ GameSettings.Options.HUD_WORLD, GameSettings.Options.HUD_24H, GameSettings.Options.CHUNK_FIX }; > CHANGE 11 : 13 @ 11 : 31 diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ServerData.edit.java b/patches/minecraft/net/minecraft/client/multiplayer/ServerData.edit.java index 6eaa72f..2d8c84d 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ServerData.edit.java +++ b/patches/minecraft/net/minecraft/client/multiplayer/ServerData.edit.java @@ -84,7 +84,7 @@ + public static final ServerResourceMode[] _VALUES = values(); + -> INSERT 10 : 76 @ 10 +> INSERT 10 : 81 @ 10 + + public void setMOTDFromQuery(QueryResponse pkt) { @@ -95,7 +95,12 @@ + this.serverMOTD = motd.length() > 0 + ? (motd.length() > 1 ? motd.getString(0) + "\n" + motd.getString(1) : motd.getString(0)) + : ""; -+ this.populationInfo = "" + motdData.getInt("online") + "/" + motdData.getInt("max"); ++ int max = motdData.getInt("max"); ++ if (max > 0) { ++ this.populationInfo = "" + motdData.getInt("online") + "/" + max; ++ } else { ++ this.populationInfo = "" + motdData.getInt("online"); ++ } + this.playerList = null; + JSONArray players = motdData.optJSONArray("players"); + if (players.length() > 0) { diff --git a/patches/minecraft/net/minecraft/client/particle/EntityFX.edit.java b/patches/minecraft/net/minecraft/client/particle/EntityFX.edit.java index 79b6299..dfc213e 100644 --- a/patches/minecraft/net/minecraft/client/particle/EntityFX.edit.java +++ b/patches/minecraft/net/minecraft/client/particle/EntityFX.edit.java @@ -36,4 +36,11 @@ ~ public void setParticleIcon(EaglerTextureAtlasSprite icon) { +> INSERT 30 : 34 @ 30 + ++ ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ return 0.0f; ++ } + > EOF diff --git a/patches/minecraft/net/minecraft/client/renderer/BlockFluidRenderer.edit.java b/patches/minecraft/net/minecraft/client/renderer/BlockFluidRenderer.edit.java index fa604c3..2d31d35 100644 --- a/patches/minecraft/net/minecraft/client/renderer/BlockFluidRenderer.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/BlockFluidRenderer.edit.java @@ -5,12 +5,13 @@ # Version: 1.0 # Author: lax1dude -> INSERT 2 : 7 @ 2 +> INSERT 2 : 8 @ 2 + import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerTextureAtlasSprite; + import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.BlockVertexIDs; + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DeferredStateManager; ++ import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager; + import net.minecraft.block.Block; > DELETE 4 @ 4 : 6 @@ -20,10 +21,11 @@ ~ private EaglerTextureAtlasSprite[] atlasSpritesLava = new EaglerTextureAtlasSprite[2]; ~ private EaglerTextureAtlasSprite[] atlasSpritesWater = new EaglerTextureAtlasSprite[2]; -> INSERT 15 : 17 @ 15 +> INSERT 15 : 18 @ 15 + BlockPos tmp = new BlockPos(0, 0, 0); + boolean deferred = DeferredStateManager.isDeferredRenderer(); ++ boolean isDynamicLights = deferred || DynamicLightsStateManager.isDynamicLightsRender(); > INSERT 1 : 3 @ 1 @@ -78,7 +80,7 @@ > CHANGE 31 : 36 @ 31 : 32 -~ if (deferred) +~ if (isDynamicLights) ~ worldRendererIn.genNormals(true, f12 <= -999.0F ? BlockVertexIDs.builtin_water_still_vertex_id ~ : BlockVertexIDs.builtin_water_flow_vertex_id); ~ @@ -86,7 +88,7 @@ > INSERT 8 : 11 @ 8 -+ if (deferred) ++ if (isDynamicLights) + worldRendererIn.genNormals(true, f12 <= -999.0F ? BlockVertexIDs.builtin_water_still_vertex_id + : BlockVertexIDs.builtin_water_flow_vertex_id); @@ -100,7 +102,7 @@ > INSERT 10 : 12 @ 10 -+ if (deferred) ++ if (isDynamicLights) + worldRendererIn.putNormal(0.0f, -1.0f, 0.0f, BlockVertexIDs.builtin_water_still_vertex_id); > CHANGE 23 : 24 @ 23 : 24 @@ -119,7 +121,7 @@ > CHANGE 15 : 29 @ 15 : 23 -~ if (deferred) +~ if (isDynamicLights) ~ worldRendererIn.putNormal(j1, 0.0f, k1, BlockVertexIDs.builtin_water_flow_vertex_id); ~ if (!realistic) { ~ worldRendererIn.pos(d3, d1 + 0.0D, d4).color(f32, f33, f34, 1.0F) @@ -130,7 +132,7 @@ ~ .tex((double) f27, (double) f29).lightmap(k, l).endVertex(); ~ worldRendererIn.pos(d3, d1 + (double) f39, d4).color(f32, f33, f34, 1.0F) ~ .tex((double) f41, (double) f28).lightmap(k, l).endVertex(); -~ if (deferred) +~ if (isDynamicLights) ~ worldRendererIn.putNormal(-j1, 0.0f, -k1, BlockVertexIDs.builtin_water_flow_vertex_id); ~ } diff --git a/patches/minecraft/net/minecraft/client/renderer/BlockModelRenderer.edit.java b/patches/minecraft/net/minecraft/client/renderer/BlockModelRenderer.edit.java index c51f2e5..ba34f71 100644 --- a/patches/minecraft/net/minecraft/client/renderer/BlockModelRenderer.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/BlockModelRenderer.edit.java @@ -5,13 +5,14 @@ # Version: 1.0 # Author: lax1dude -> INSERT 4 : 9 @ 4 +> INSERT 4 : 10 @ 4 + + import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; + import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DeferredStateManager; + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.VertexMarkerState; ++ import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager; > DELETE 3 @ 3 : 7 @@ -52,20 +53,22 @@ ~ worldRendererIn, list1, bitset, afloat); -> INSERT 9 : 10 @ 9 +> INSERT 9 : 11 @ 9 + boolean isDeferred = DeferredStateManager.isDeferredRenderer(); ++ boolean isDynamicLights = isDeferred || DynamicLightsStateManager.isDynamicLightsRender(); > CHANGE 8 : 9 @ 8 : 9 ~ if (!isDeferred && block$enumoffsettype == Block.EnumOffsetType.XYZ) { -> CHANGE 4 : 8 @ 4 : 6 +> CHANGE 4 : 9 @ 4 : 6 ~ for (int i = 0, l = listQuadsIn.size(); i < l; ++i) { ~ BakedQuad bakedquad = listQuadsIn.get(i); -~ int[] vertData = isDeferred ? bakedquad.getVertexDataWithNormals() : bakedquad.getVertexData(); -~ this.fillQuadBounds(blockIn, vertData, bakedquad.getFace(), quadBounds, boundsFlags, isDeferred ? 8 : 7); +~ int[] vertData = isDynamicLights ? bakedquad.getVertexDataWithNormals() : bakedquad.getVertexData(); +~ this.fillQuadBounds(blockIn, vertData, bakedquad.getFace(), quadBounds, boundsFlags, +~ isDynamicLights ? 8 : 7); > CHANGE 2 : 3 @ 2 : 3 @@ -101,10 +104,11 @@ + private final BlockPos blockpos5 = new BlockPos(0, 0, 0); + -> CHANGE 2 : 4 @ 2 : 3 +> CHANGE 2 : 5 @ 2 : 3 ~ List listQuadsIn, BitSet boundsFlags, float[] quadBounds) { ~ boolean isDeferred = DeferredStateManager.isDeferredRenderer(); +~ boolean isDynamicLights = isDeferred || DynamicLightsStateManager.isDynamicLightsRender(); > CHANGE 11 : 12 @ 11 : 12 @@ -115,9 +119,9 @@ ~ for (int m = 0, n = listQuadsIn.size(); m < n; ++m) { ~ BakedQuad bakedquad = listQuadsIn.get(m); ~ EnumFacing facingIn = bakedquad.getFace(); -~ int[] vertData = isDeferred ? bakedquad.getVertexDataWithNormals() : bakedquad.getVertexData(); +~ int[] vertData = isDynamicLights ? bakedquad.getVertexDataWithNormals() : bakedquad.getVertexData(); ~ blockPosIn.offsetEvenFaster(facingIn, blockpos0); -~ this.fillQuadBounds(blockIn, vertData, facingIn, quadBounds, boundsFlags, isDeferred ? 8 : 7); +~ this.fillQuadBounds(blockIn, vertData, facingIn, quadBounds, boundsFlags, isDynamicLights ? 8 : 7); ~ boolean boundsFlags0 = boundsFlags.get(0); > CHANGE 1 : 2 @ 1 : 5 diff --git a/patches/minecraft/net/minecraft/client/renderer/ChunkRenderContainer.edit.java b/patches/minecraft/net/minecraft/client/renderer/ChunkRenderContainer.edit.java index 49100d5..f4b0620 100644 --- a/patches/minecraft/net/minecraft/client/renderer/ChunkRenderContainer.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/ChunkRenderContainer.edit.java @@ -7,13 +7,14 @@ > DELETE 2 @ 2 : 3 -> CHANGE 1 : 6 @ 1 : 2 +> CHANGE 1 : 7 @ 1 : 2 ~ ~ import com.google.common.collect.Lists; ~ ~ import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; ~ import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DeferredStateManager; +~ import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager; > INSERT 3 : 4 @ 3 @@ -23,17 +24,22 @@ ~ public void preRenderChunk(RenderChunk renderChunkIn, EnumWorldBlockLayer enumworldblocklayer) { -> CHANGE 1 : 11 @ 1 : 4 +> CHANGE 1 : 16 @ 1 : 4 ~ float posX = (float) ((double) blockpos.getX() - this.viewEntityX); ~ float posY = (float) ((double) blockpos.getY() - this.viewEntityY); ~ float posZ = (float) ((double) blockpos.getZ() - this.viewEntityZ); ~ GlStateManager.translate(posX, posY, posZ); ~ if (DeferredStateManager.isInForwardPass()) { -~ posX = (float) (blockpos.getX() - (MathHelper.floor_double(this.viewEntityX / 16.0) << 4)); // TODO +~ posX = (float) (blockpos.getX() - (MathHelper.floor_double(this.viewEntityX / 16.0) << 4)); ~ posY = (float) (blockpos.getY() - (MathHelper.floor_double(this.viewEntityY / 16.0) << 4)); ~ posZ = (float) (blockpos.getZ() - (MathHelper.floor_double(this.viewEntityZ / 16.0) << 4)); ~ DeferredStateManager.reportForwardRenderObjectPosition((int) posX, (int) posY, (int) posZ); +~ } else if (DynamicLightsStateManager.isInDynamicLightsPass()) { +~ posX = (float) (blockpos.getX() - (MathHelper.floor_double(this.viewEntityX / 16.0) << 4)); +~ posY = (float) (blockpos.getY() - (MathHelper.floor_double(this.viewEntityY / 16.0) << 4)); +~ posZ = (float) (blockpos.getZ() - (MathHelper.floor_double(this.viewEntityZ / 16.0) << 4)); +~ DynamicLightsStateManager.reportForwardRenderObjectPosition((int) posX, (int) posY, (int) posZ); ~ } > EOF diff --git a/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.edit.java b/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.edit.java index 8a74a37..9093648 100644 --- a/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.edit.java @@ -16,7 +16,7 @@ ~ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; ~ import net.lax1dude.eaglercraft.v1_8.HString; -> INSERT 1 : 31 @ 1 +> INSERT 1 : 32 @ 1 + + import com.google.common.base.Predicate; @@ -45,6 +45,7 @@ + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.ShadersRenderPassFuture; + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.gui.GuiShaderConfig; + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.texture.EmissiveItems; ++ import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager; + import net.lax1dude.eaglercraft.v1_8.vector.Vector4f; + import net.lax1dude.eaglercraft.v1_8.voice.VoiceTagRenderer; + import net.lax1dude.eaglercraft.v1_8.vector.Matrix4f; @@ -158,7 +159,13 @@ ~ (float) this.mc.displayWidth / (float) this.mc.displayHeight, 0.05F, farPlane); ~ DeferredStateManager.setGBufferNearFarPlanes(0.05f, farPlane); -> CHANGE 57 : 58 @ 57 : 58 +> INSERT 50 : 53 @ 50 + ++ if (DynamicLightsStateManager.isInDynamicLightsPass()) { ++ DynamicLightsStateManager.reportForwardRenderObjectPosition2(0.0f, 0.0f, 0.0f); ++ } + +> CHANGE 7 : 8 @ 7 : 8 ~ GlStateManager.gluPerspective(this.getFOVModifier(partialTicks, false), @@ -183,12 +190,13 @@ ~ this.lightmapColors[i] = short1 << 24 | j | k << 8 | l << 16; -> INSERT 3 : 17 @ 3 +> INSERT 3 : 18 @ 3 + + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + this.mc.getTextureManager().bindTexture(this.locationLightMap); -+ if (mc.gameSettings.fancyGraphics || mc.gameSettings.ambientOcclusion > 0) { ++ if (mc.gameSettings.fancyGraphics || mc.gameSettings.ambientOcclusion > 0 ++ || DynamicLightsStateManager.isDynamicLightsRender()) { + EaglercraftGPU.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + EaglercraftGPU.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + } else { @@ -290,11 +298,31 @@ + VoiceTagRenderer.clearTagsDrawnSet(); + -> CHANGE 4 : 5 @ 4 : 5 +> CHANGE 4 : 25 @ 4 : 12 +~ boolean dlights = DynamicLightsStateManager.isDynamicLightsRender(); +~ if (dlights) { +~ updateDynamicLightListEagler(partialTicks); +~ } ~ if (this.mc.gameSettings.anaglyph && !this.mc.gameSettings.shaders) { +~ if (dlights) { +~ GlStateManager.enableExtensionPipeline(); +~ } +~ try { +~ anaglyphField = 0; +~ GlStateManager.colorMask(false, true, true, false); +~ this.renderWorldPass(0, partialTicks, finishTimeNano); +~ anaglyphField = 1; +~ GlStateManager.colorMask(true, false, false, false); +~ this.renderWorldPass(1, partialTicks, finishTimeNano); +~ GlStateManager.colorMask(true, true, true, false); +~ } finally { +~ if (dlights) { +~ GlStateManager.disableExtensionPipeline(); +~ } +~ } -> CHANGE 8 : 24 @ 8 : 9 +> CHANGE 1 : 26 @ 1 : 2 ~ if (this.mc.gameSettings.shaders) { ~ try { @@ -310,7 +338,16 @@ ~ mc.effectRenderer.acceleratedParticleRenderer = EffectRenderer.vanillaAcceleratedParticleRenderer; ~ } else { ~ mc.effectRenderer.acceleratedParticleRenderer = EffectRenderer.vanillaAcceleratedParticleRenderer; -~ this.renderWorldPass(2, partialTicks, finishTimeNano); +~ if (dlights) { +~ GlStateManager.enableExtensionPipeline(); +~ } +~ try { +~ this.renderWorldPass(2, partialTicks, finishTimeNano); +~ } finally { +~ if (dlights) { +~ GlStateManager.disableExtensionPipeline(); +~ } +~ } ~ } > INSERT 2 : 6 @ 2 @@ -320,9 +357,22 @@ + } + -> DELETE 15 @ 15 : 17 +> INSERT 14 : 18 @ 14 -> CHANGE 12 : 15 @ 12 : 14 ++ boolean isDynamicLights = DynamicLightsStateManager.isDynamicLightsRender(); ++ if (isDynamicLights) { ++ DynamicLightsStateManager.setupInverseViewMatrix(); ++ } + +> DELETE 1 @ 1 : 3 + +> INSERT 6 : 9 @ 6 + ++ TileEntityRendererDispatcher.staticPlayerX = d0; // hack, needed for some eagler stuff ++ TileEntityRendererDispatcher.staticPlayerY = d1; ++ TileEntityRendererDispatcher.staticPlayerZ = d2; + +> CHANGE 6 : 9 @ 6 : 8 ~ float vigg = this.getFOVModifier(partialTicks, true); ~ GlStateManager.gluPerspective(vigg, (float) this.mc.displayWidth / (float) this.mc.displayHeight, 0.05F, @@ -342,9 +392,40 @@ + GlStateManager.shadeModel(7424); -> CHANGE 46 : 47 @ 46 : 47 +> INSERT 16 : 19 @ 16 ++ if (isDynamicLights) { ++ GlStateManager.disableExtensionPipeline(); ++ } + +> INSERT 2 : 5 @ 2 + ++ if (isDynamicLights) { ++ GlStateManager.enableExtensionPipeline(); ++ } + +> INSERT 8 : 11 @ 8 + ++ if (isDynamicLights) { ++ GlStateManager.disableExtensionPipeline(); ++ } + +> INSERT 3 : 6 @ 3 + ++ if (isDynamicLights) { ++ GlStateManager.enableExtensionPipeline(); ++ } + +> CHANGE 17 : 25 @ 17 : 18 + +~ if (isDynamicLights) { +~ DynamicLightsStateManager.bindAcceleratedEffectRenderer(effectrenderer); +~ DynamicLightsStateManager.reportForwardRenderObjectPosition2(0.0f, 0.0f, 0.0f); +~ } ~ effectrenderer.renderParticles(entity, partialTicks, 2); +~ if (isDynamicLights) { +~ effectrenderer.acceleratedParticleRenderer = null; +~ } > INSERT 30 : 34 @ 30 @@ -353,7 +434,24 @@ + ModAPI.callEvent("render", eventData); + -> CHANGE 14 : 15 @ 14 : 15 +> INSERT 9 : 23 @ 9 + ++ private void updateDynamicLightListEagler(float partialTicks) { ++ DynamicLightsStateManager.clearRenderList(); ++ Entity entity = this.mc.getRenderViewEntity(); ++ double d0 = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * (double) partialTicks; ++ double d1 = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double) partialTicks; ++ double d2 = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * (double) partialTicks; ++ AxisAlignedBB entityAABB = new AxisAlignedBB(d0 - 48.0, d1 - 32.0, d2 - 48.0, d0 + 48.0, d1 + 32.0, d2 + 48.0); ++ List entities = this.mc.theWorld.getEntitiesWithinAABB(Entity.class, entityAABB); ++ for (int i = 0, l = entities.size(); i < l; ++i) { ++ entities.get(i).renderDynamicLightsEaglerSimple(partialTicks); ++ } ++ DynamicLightsStateManager.commitLightSourceBuckets(d0, d1, d2); ++ } ++ + +> CHANGE 5 : 6 @ 5 : 6 ~ GlStateManager.gluPerspective(this.getFOVModifier(partialTicks, true), @@ -373,12 +471,15 @@ + boolean df = DeferredStateManager.isInDeferredPass(); -> CHANGE 9 : 25 @ 9 : 13 +> CHANGE 9 : 28 @ 9 : 13 ~ if (!df) { ~ GlStateManager.enableBlend(); ~ GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); ~ GlStateManager.alphaFunc(516, 0.1F); +~ if (DynamicLightsStateManager.isInDynamicLightsPass()) { +~ DynamicLightsStateManager.reportForwardRenderObjectPosition2(0.0f, 0.0f, 0.0f); +~ } ~ } else { ~ GlStateManager.enableAlpha(); ~ DeferredStateManager.setHDRTranslucentPassBlendFunc(); diff --git a/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.edit.java b/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.edit.java index 128721b..7fc3db9 100644 --- a/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.edit.java @@ -14,7 +14,7 @@ ~ import net.lax1dude.eaglercraft.v1_8.Keyboard; ~ -> INSERT 2 : 22 @ 2 +> INSERT 2 : 23 @ 2 + + import com.google.common.collect.Lists; @@ -34,6 +34,7 @@ + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.EaglerDeferredConfig; + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.EaglerDeferredPipeline; + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.SharedPipelineShaders; ++ import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager; + import net.lax1dude.eaglercraft.v1_8.vector.Vector3f; + import net.lax1dude.eaglercraft.v1_8.vector.Vector4f; @@ -142,7 +143,7 @@ + this.renderDistanceChunks = this.mc.gameSettings.renderDistanceChunks; + -> INSERT 19 : 75 @ 19 +> INSERT 19 : 85 @ 19 + + if (mc.gameSettings.shaders) { @@ -200,6 +201,16 @@ + } + SharedPipelineShaders.free(); + } ++ ++ if (DeferredStateManager.isDeferredRenderer()) { ++ DynamicLightsStateManager.disableDynamicLightsRender(false); ++ } else { ++ if (mc.gameSettings.enableDynamicLights) { ++ DynamicLightsStateManager.enableDynamicLightsRender(); ++ } else { ++ DynamicLightsStateManager.disableDynamicLightsRender(true); ++ } ++ } > DELETE 9 @ 9 : 13 @@ -600,16 +611,25 @@ > DELETE 17 @ 17 : 18 -> CHANGE 155 : 157 @ 155 : 156 +> CHANGE 155 : 159 @ 155 : 156 -~ worldRendererIn.begin(7, DeferredStateManager.isDeferredRenderer() ? VertexFormat.BLOCK_SHADERS -~ : DefaultVertexFormats.BLOCK); +~ worldRendererIn.begin(7, +~ (DeferredStateManager.isDeferredRenderer() || DynamicLightsStateManager.isDynamicLightsRender()) +~ ? VertexFormat.BLOCK_SHADERS +~ : DefaultVertexFormats.BLOCK); > CHANGE 19 : 20 @ 19 : 20 ~ EaglerTextureAtlasSprite textureatlassprite = this.destroyBlockIcons[i]; -> CHANGE 17 : 19 @ 17 : 18 +> INSERT 1 : 5 @ 1 + ++ if (DynamicLightsStateManager.isInDynamicLightsPass()) { ++ DynamicLightsStateManager.reportForwardRenderObjectPosition2(blockpos.x, blockpos.y, ++ blockpos.z); ++ } + +> CHANGE 16 : 18 @ 16 : 17 ~ if (partialTicks == 0 && movingObjectPositionIn != null ~ && movingObjectPositionIn.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.edit.java b/patches/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.edit.java index 888bd90..0f4527a 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.edit.java @@ -5,13 +5,14 @@ # Version: 1.0 # Author: lax1dude -> INSERT 2 : 7 @ 2 +> INSERT 2 : 8 @ 2 + import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerTextureAtlasSprite; + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.VertexMarkerState; + import net.lax1dude.eaglercraft.v1_8.vector.Matrix4f; + import net.lax1dude.eaglercraft.v1_8.vector.Vector3f; + import net.lax1dude.eaglercraft.v1_8.vector.Vector4f; ++ import net.minecraft.client.Minecraft; > DELETE 1 @ 1 : 6 @@ -70,9 +71,11 @@ ~ float[] sprite, EaglerTextureAtlasSprite modelRotationIn, ModelRotation partRotation, ~ BlockPartRotation uvLocked, boolean shade, boolean parFlag2, Vector3f calcNormal) { -> CHANGE 1 : 2 @ 1 : 2 +> CHANGE 1 : 4 @ 1 : 2 -~ int i = (parFlag2 && stride != 8) ? this.getFaceShadeColor(enumfacing) : -1; +~ int i = (parFlag2 && (stride != 8 || !Minecraft.getMinecraft().gameSettings.shaders)) +~ ? this.getFaceShadeColor(enumfacing) +~ : -1; > CHANGE 7 : 9 @ 7 : 8 @@ -84,12 +87,18 @@ ~ EaglerTextureAtlasSprite sprite, BlockFaceUV faceUV, EnumFacing facing, Vector3f calcNormal) { ~ int i = storeIndex * stride; -> INSERT 4 : 27 @ 4 +> INSERT 4 : 33 @ 4 + if (stride == 8) { -+ faceData[i] = Float.floatToRawIntBits(position.x * VertexMarkerState.localCoordDeriveHackX); -+ faceData[i + 1] = Float.floatToRawIntBits(position.y * VertexMarkerState.localCoordDeriveHackY); -+ faceData[i + 2] = Float.floatToRawIntBits(position.z * VertexMarkerState.localCoordDeriveHackZ); ++ if (!Minecraft.getMinecraft().gameSettings.shaders) { ++ faceData[i] = Float.floatToRawIntBits(position.x); ++ faceData[i + 1] = Float.floatToRawIntBits(position.y); ++ faceData[i + 2] = Float.floatToRawIntBits(position.z); ++ } else { ++ faceData[i] = Float.floatToRawIntBits(position.x * VertexMarkerState.localCoordDeriveHackX); ++ faceData[i + 1] = Float.floatToRawIntBits(position.y * VertexMarkerState.localCoordDeriveHackY); ++ faceData[i + 2] = Float.floatToRawIntBits(position.z * VertexMarkerState.localCoordDeriveHackZ); ++ } + if (calcNormal != null) { + int x = (byte) ((int) (calcNormal.x * 127.0F)) & 255; + int y = (byte) ((int) (calcNormal.y * 127.0F)) & 255; diff --git a/patches/minecraft/net/minecraft/client/renderer/chunk/RenderChunk.edit.java b/patches/minecraft/net/minecraft/client/renderer/chunk/RenderChunk.edit.java index 44bb643..c733169 100644 --- a/patches/minecraft/net/minecraft/client/renderer/chunk/RenderChunk.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/chunk/RenderChunk.edit.java @@ -7,7 +7,7 @@ > DELETE 2 @ 2 : 5 -> CHANGE 3 : 11 @ 3 : 4 +> CHANGE 3 : 12 @ 3 : 4 ~ ~ import com.google.common.collect.Maps; @@ -17,6 +17,7 @@ ~ import net.lax1dude.eaglercraft.v1_8.opengl.VertexFormat; ~ import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; ~ import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DeferredStateManager; +~ import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager; > DELETE 4 @ 4 : 7 @@ -152,10 +153,12 @@ ~ this.compileTask.setCompiledChunk(this.compiledChunk); ~ return this.compileTask; -> CHANGE 3 : 5 @ 3 : 4 +> CHANGE 3 : 7 @ 3 : 4 ~ worldRendererIn.begin(7, -~ DeferredStateManager.isDeferredRenderer() ? VertexFormat.BLOCK_SHADERS : DefaultVertexFormats.BLOCK); +~ (DeferredStateManager.isDeferredRenderer() || DynamicLightsStateManager.isDynamicLightsRender()) +~ ? VertexFormat.BLOCK_SHADERS +~ : DefaultVertexFormats.BLOCK); > CHANGE 5 : 7 @ 5 : 6 diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/RenderFallingBlock.edit.java b/patches/minecraft/net/minecraft/client/renderer/entity/RenderFallingBlock.edit.java index 0cc3b81..4ed39be 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/RenderFallingBlock.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/entity/RenderFallingBlock.edit.java @@ -5,20 +5,23 @@ # Version: 1.0 # Author: lax1dude -> INSERT 2 : 6 @ 2 +> INSERT 2 : 7 @ 2 + import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; + import net.lax1dude.eaglercraft.v1_8.opengl.VertexFormat; + import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DeferredStateManager; ++ import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager; > DELETE 4 @ 4 : 5 > DELETE 1 @ 1 : 4 -> CHANGE 28 : 30 @ 28 : 29 +> CHANGE 28 : 32 @ 28 : 29 -~ worldrenderer.begin(7, DeferredStateManager.isDeferredRenderer() ? VertexFormat.BLOCK_SHADERS -~ : DefaultVertexFormats.BLOCK); +~ worldrenderer.begin(7, +~ (DeferredStateManager.isDeferredRenderer() +~ || DynamicLightsStateManager.isDynamicLightsRender()) ? VertexFormat.BLOCK_SHADERS +~ : DefaultVertexFormats.BLOCK); > EOF diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/RenderManager.edit.java b/patches/minecraft/net/minecraft/client/renderer/entity/RenderManager.edit.java index c59f9a2..1542328 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/RenderManager.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/entity/RenderManager.edit.java @@ -7,7 +7,7 @@ > DELETE 2 @ 2 : 3 -> INSERT 1 : 10 @ 1 +> INSERT 1 : 11 @ 1 + + import com.google.common.collect.Maps; @@ -17,6 +17,7 @@ + import net.lax1dude.eaglercraft.v1_8.opengl.OpenGlHelper; + import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DeferredStateManager; ++ import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager; + import net.lax1dude.eaglercraft.v1_8.profile.RenderHighPoly; > INSERT 3 : 4 @ 3 @@ -61,7 +62,14 @@ ~ public Render getEntityRenderObject(Entity entityIn) { -> INSERT 85 : 86 @ 85 +> INSERT 82 : 86 @ 82 + ++ if (DynamicLightsStateManager.isInDynamicLightsPass()) { ++ DynamicLightsStateManager.reportForwardRenderObjectPosition2((float) (d0 - viewerPosX), ++ (float) (d1 - viewerPosY), (float) (d2 - viewerPosZ)); ++ } + +> INSERT 3 : 4 @ 3 + DeferredStateManager.setEmissionConstant(1.0f); diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.edit.java b/patches/minecraft/net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.edit.java index 64a370f..0abe69e 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.edit.java @@ -67,4 +67,13 @@ + return; + } +> INSERT 3 : 5 @ 3 + ++ GlStateManager.enablePolygonOffset(); ++ GlStateManager.doPolygonOffset(-0.025f, 1.0f); + +> INSERT 20 : 21 @ 20 + ++ GlStateManager.disablePolygonOffset(); + > EOF diff --git a/patches/minecraft/net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher.edit.java b/patches/minecraft/net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher.edit.java index 0814ccf..1fc12ec 100644 --- a/patches/minecraft/net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher.edit.java @@ -7,13 +7,14 @@ > DELETE 2 @ 2 : 3 -> INSERT 1 : 6 @ 1 +> INSERT 1 : 7 @ 1 + + import com.google.common.collect.Maps; + + import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; + import net.lax1dude.eaglercraft.v1_8.opengl.OpenGlHelper; ++ import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager; > DELETE 1 @ 1 : 3 @@ -24,4 +25,10 @@ ~ tileentityspecialrenderer = this ~ .getSpecialRendererByClass((Class) teClass.getSuperclass()); +> INSERT 52 : 55 @ 52 + ++ if (DynamicLightsStateManager.isInDynamicLightsPass()) { ++ DynamicLightsStateManager.reportForwardRenderObjectPosition2((float) x, (float) y, (float) z); ++ } + > EOF diff --git a/patches/minecraft/net/minecraft/client/settings/GameSettings.edit.java b/patches/minecraft/net/minecraft/client/settings/GameSettings.edit.java index c01413e..1684fc4 100644 --- a/patches/minecraft/net/minecraft/client/settings/GameSettings.edit.java +++ b/patches/minecraft/net/minecraft/client/settings/GameSettings.edit.java @@ -97,7 +97,7 @@ ~ public int guiScale = 3; -> INSERT 3 : 17 @ 3 +> INSERT 3 : 18 @ 3 + public boolean hudFps = true; + public boolean hudCoords = true; @@ -113,6 +113,7 @@ + public EaglerDeferredConfig deferredShaderConf = new EaglerDeferredConfig(); + public boolean enableUpdateSvc = true; + public boolean enableFNAWSkins = true; ++ public boolean enableDynamicLights = false; > CHANGE 1 : 7 @ 1 : 2 @@ -326,7 +327,7 @@ > DELETE 20 @ 20 : 37 -> INSERT 13 : 62 @ 13 +> INSERT 13 : 67 @ 13 + if (parOptions == GameSettings.Options.HUD_FPS) { + this.hudFps = !this.hudFps; @@ -377,6 +378,11 @@ + this.enableVsync = !this.enableVsync; + } + ++ if (parOptions == GameSettings.Options.EAGLER_DYNAMIC_LIGHTS) { ++ this.enableDynamicLights = !this.enableDynamicLights; ++ this.mc.renderGlobal.loadRenderers(); ++ } ++ > CHANGE 23 : 24 @ 23 : 34 @@ -386,7 +392,7 @@ > DELETE 2 @ 2 : 4 -> INSERT 8 : 30 @ 8 +> INSERT 8 : 32 @ 8 + case HUD_COORDS: + return this.hudCoords; @@ -410,6 +416,8 @@ + return this.enableFNAWSkins; + case EAGLER_VSYNC: + return this.enableVsync; ++ case EAGLER_DYNAMIC_LIGHTS: ++ return this.enableDynamicLights; > CHANGE 43 : 46 @ 43 : 47 @@ -620,13 +628,17 @@ ~ for (EnumPlayerModelParts enumplayermodelparts : EnumPlayerModelParts._VALUES) { -> INSERT 4 : 10 @ 4 +> INSERT 4 : 14 @ 4 + + if (astring[0].equals("enableFNAWSkins")) { + this.enableFNAWSkins = astring[1].equals("true"); + } + ++ if (astring[0].equals("enableDynamicLights")) { ++ this.enableDynamicLights = astring[1].equals("true"); ++ } ++ + deferredShaderConf.readOption(astring[0], astring[1]); > CHANGE 6 : 13 @ 6 : 7 @@ -678,7 +690,7 @@ > DELETE 13 @ 13 : 24 -> INSERT 5 : 21 @ 5 +> INSERT 5 : 22 @ 5 + printwriter.println("hudFps:" + this.hudFps); + printwriter.println("hudWorld:" + this.hudWorld); @@ -696,6 +708,7 @@ + printwriter.println("voiceSpeakVolume:" + this.voiceSpeakVolume); + printwriter.println("voicePTTKey:" + this.voicePTTKey); + printwriter.println("enableFNAWSkins:" + this.enableFNAWSkins); ++ printwriter.println("enableDynamicLights:" + this.enableDynamicLights); > CHANGE 5 : 8 @ 5 : 6 @@ -745,7 +758,7 @@ > CHANGE 4 : 5 @ 4 : 5 -~ RENDER_DISTANCE("options.renderDistance", true, false, 1.0F, 16.0F, 1.0F), +~ RENDER_DISTANCE("options.renderDistance", true, false, 1.0F, 18.0F, 1.0F), > CHANGE 8 : 10 @ 8 : 12 @@ -761,6 +774,6 @@ ~ FOG("options.fog", false, true), FXAA("options.fxaa", false, false), ~ FULLSCREEN("options.fullscreen", false, true), ~ FNAW_SKINS("options.skinCustomisation.enableFNAWSkins", false, true), -~ EAGLER_VSYNC("options.vsync", false, true); +~ EAGLER_VSYNC("options.vsync", false, true), EAGLER_DYNAMIC_LIGHTS("options.dynamicLights", false, true); > EOF diff --git a/patches/minecraft/net/minecraft/entity/Entity.edit.java b/patches/minecraft/net/minecraft/entity/Entity.edit.java index c0e65c6..c680019 100644 --- a/patches/minecraft/net/minecraft/entity/Entity.edit.java +++ b/patches/minecraft/net/minecraft/entity/Entity.edit.java @@ -5,7 +5,7 @@ # Version: 1.0 # Author: lax1dude -> CHANGE 3 : 11 @ 3 : 5 +> CHANGE 3 : 12 @ 3 : 5 ~ ~ import net.eaglerforge.api.BaseData; @@ -14,6 +14,7 @@ ~ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; ~ import net.lax1dude.eaglercraft.v1_8.HString; ~ import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DynamicLightManager; +~ import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager; ~ > INSERT 1 : 2 @ 1 @@ -479,7 +480,24 @@ + } + -> CHANGE 418 : 420 @ 418 : 419 +> CHANGE 115 : 121 @ 115 : 116 + +~ int i = 0; +~ if (DynamicLightsStateManager.isDynamicLightsRender()) { +~ i += (int) (getEaglerDynamicLightsValueSimple(var1) * 15.0f); +~ } +~ return this.worldObj.isBlockLoaded(blockpos) ? this.worldObj.getCombinedLight(blockpos, -i) +~ : (i > 15 ? 240 : (i << 4)); + +> CHANGE 4 : 9 @ 4 : 5 + +~ float f = this.worldObj.isBlockLoaded(blockpos) ? this.worldObj.getLightBrightness(blockpos) : 0.0F; +~ if (DynamicLightsStateManager.isDynamicLightsRender()) { +~ f = Math.min(f + getEaglerDynamicLightsValueSimple(var1), 1.0f); +~ } +~ return f; + +> CHANGE 297 : 299 @ 297 : 298 ~ this.entityUniqueID = new EaglercraftUUID(tagCompund.getLong("UUIDMost"), ~ tagCompund.getLong("UUIDLeast")); @@ -528,7 +546,7 @@ ~ public EaglercraftUUID getUniqueID() { -> INSERT 151 : 177 @ 151 +> INSERT 151 : 205 @ 151 + + public void renderDynamicLightsEagler(float partialTicks, boolean isInFrustum) { @@ -538,7 +556,8 @@ + double entityX2 = entityX - TileEntityRendererDispatcher.staticPlayerX; + double entityY2 = entityY - TileEntityRendererDispatcher.staticPlayerY; + double entityZ2 = entityZ - TileEntityRendererDispatcher.staticPlayerZ; -+ if (Math.sqrt(entityX2 * entityX2 + entityY2 * entityY2 + entityZ2 * entityZ2) < 48.0 * 48.0) { ++ if (entityX2 * entityX2 + entityY2 * entityY2 ++ + entityZ2 * entityZ2 < (isInFrustum ? (64.0 * 64.0) : (24.0 * 24.0))) { + renderDynamicLightsEaglerAt(entityX, entityY, entityZ, entityX2, entityY2, entityZ2, partialTicks, + isInFrustum); + } @@ -546,15 +565,42 @@ + + protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, + double renderY, double renderZ, float partialTicks, boolean isInFrustum) { ++ float size = Math.max(width, height); ++ if (size < 1.0f && !isInFrustum) { ++ return; ++ } + if (this.isBurning()) { -+ float size = Math.max(width, height); -+ if (size < 1.0f && !isInFrustum) { -+ return; -+ } + float mag = 5.0f * size; + DynamicLightManager.renderDynamicLight("entity_" + entityId + "_fire", entityX, entityY + height * 0.75, + entityZ, mag, 0.487f * mag, 0.1411f * mag, false); + } + } ++ ++ public void renderDynamicLightsEaglerSimple(float partialTicks) { ++ double entityX = prevPosX + (posX - prevPosX) * (double) partialTicks; ++ double entityY = prevPosY + (posY - prevPosY) * (double) partialTicks; ++ double entityZ = prevPosZ + (posZ - prevPosZ) * (double) partialTicks; ++ renderDynamicLightsEaglerSimpleAt(entityX, entityY, entityZ, partialTicks); ++ } ++ ++ protected void renderDynamicLightsEaglerSimpleAt(double entityX, double entityY, double entityZ, ++ float partialTicks) { ++ float renderBrightness = this.getEaglerDynamicLightsValueSimple(partialTicks); ++ if (renderBrightness > 0.1f) { ++ DynamicLightsStateManager.renderDynamicLight("entity_" + entityId + "_lightmap", entityX, ++ entityY + height * 0.85, entityZ, renderBrightness * 13.0f); ++ } ++ } ++ ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ float size = Math.max(width, height); ++ if (size < 1.0f) { ++ return 0.0f; ++ } ++ if (this.isBurning()) { ++ return size / 2.0f; ++ } ++ return 0.0f; ++ } > EOF diff --git a/patches/minecraft/net/minecraft/entity/EntityLivingBase.edit.java b/patches/minecraft/net/minecraft/entity/EntityLivingBase.edit.java index cd79229..6ddbb23 100644 --- a/patches/minecraft/net/minecraft/entity/EntityLivingBase.edit.java +++ b/patches/minecraft/net/minecraft/entity/EntityLivingBase.edit.java @@ -353,7 +353,7 @@ ~ for (int i = 0; i < inv.length; ++i) { ~ ItemStack itemstack1 = inv[i]; -> INSERT 1254 : 1265 @ 1254 +> INSERT 1254 : 1277 @ 1254 + + protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, @@ -366,5 +366,17 @@ + } + } + ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ float f = super.getEaglerDynamicLightsValueSimple(partialTicks); ++ ItemStack itm = this.getHeldItem(); ++ if (itm != null && itm.stackSize > 0) { ++ Item item = itm.getItem(); ++ if (item != null) { ++ float f2 = item.getHeldItemBrightnessEagler(); ++ f = Math.min(f + f2 * 0.5f, 1.0f) + f2 * 0.5f; ++ } ++ } ++ return f; ++ } > EOF diff --git a/patches/minecraft/net/minecraft/entity/ai/EntityAIBase.edit.java b/patches/minecraft/net/minecraft/entity/ai/EntityAIBase.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/entity/ai/EntityAIBase.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/entity/ai/EntityJumpHelper.edit.java b/patches/minecraft/net/minecraft/entity/ai/EntityJumpHelper.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/entity/ai/EntityJumpHelper.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/entity/ai/EntityLookHelper.edit.java b/patches/minecraft/net/minecraft/entity/ai/EntityLookHelper.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/entity/ai/EntityLookHelper.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/entity/ai/EntityMoveHelper.edit.java b/patches/minecraft/net/minecraft/entity/ai/EntityMoveHelper.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/entity/ai/EntityMoveHelper.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/entity/ai/EntitySenses.edit.java b/patches/minecraft/net/minecraft/entity/ai/EntitySenses.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/entity/ai/EntitySenses.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/entity/boss/EntityWither.edit.java b/patches/minecraft/net/minecraft/entity/boss/EntityWither.edit.java index 4da548e..8d6e6b9 100644 --- a/patches/minecraft/net/minecraft/entity/boss/EntityWither.edit.java +++ b/patches/minecraft/net/minecraft/entity/boss/EntityWither.edit.java @@ -21,4 +21,11 @@ ~ for (int i = 0, l = lst.size(); i < l; ++i) { ~ lst.get(i).triggerAchievement(AchievementList.killWither); +> INSERT 13 : 17 @ 13 + ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ return 1.0f; ++ } ++ + > EOF diff --git a/patches/minecraft/net/minecraft/entity/item/EntityEnderCrystal.edit.java b/patches/minecraft/net/minecraft/entity/item/EntityEnderCrystal.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/entity/item/EntityEnderCrystal.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/entity/item/EntityEnderEye.edit.java b/patches/minecraft/net/minecraft/entity/item/EntityEnderEye.edit.java index a8dd664..4c1585c 100644 --- a/patches/minecraft/net/minecraft/entity/item/EntityEnderEye.edit.java +++ b/patches/minecraft/net/minecraft/entity/item/EntityEnderEye.edit.java @@ -5,6 +5,28 @@ # Version: 1.0 # Author: lax1dude -> DELETE 3 @ 3 : 4 +> INSERT 2 : 3 @ 2 + ++ import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DynamicLightManager; + +> DELETE 1 @ 1 : 2 + +> INSERT 168 : 183 @ 168 + ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ return 0.5f; ++ } ++ ++ protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, ++ double renderY, double renderZ, float partialTicks, boolean isInFrustum) { ++ super.renderDynamicLightsEaglerAt(entityX, entityY, entityZ, renderX, renderY, renderZ, partialTicks, ++ isInFrustum); ++ if (isInFrustum && renderX * renderX + renderY * renderY + renderZ * renderZ < 150.0) { ++ float mag = 0.5f; ++ DynamicLightManager.renderDynamicLight("entity_" + getEntityId() + "_endereye", entityX, entityY + 0.2, ++ entityZ, mag * 0.1990f, mag * 0.7750f, mag * 0.4130f, false); ++ } ++ } ++ > EOF diff --git a/patches/minecraft/net/minecraft/entity/item/EntityEnderPearl.edit.java b/patches/minecraft/net/minecraft/entity/item/EntityEnderPearl.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/entity/item/EntityEnderPearl.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/entity/item/EntityFireworkRocket.edit.java b/patches/minecraft/net/minecraft/entity/item/EntityFireworkRocket.edit.java index 7572609..8a4467a 100644 --- a/patches/minecraft/net/minecraft/entity/item/EntityFireworkRocket.edit.java +++ b/patches/minecraft/net/minecraft/entity/item/EntityFireworkRocket.edit.java @@ -5,4 +5,11 @@ # Version: 1.0 # Author: lax1dude +> INSERT 156 : 160 @ 156 + ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ return 1.0f; ++ } ++ + > EOF diff --git a/patches/minecraft/net/minecraft/entity/item/EntityItem.edit.java b/patches/minecraft/net/minecraft/entity/item/EntityItem.edit.java index 667ee1d..05f4831 100644 --- a/patches/minecraft/net/minecraft/entity/item/EntityItem.edit.java +++ b/patches/minecraft/net/minecraft/entity/item/EntityItem.edit.java @@ -25,7 +25,7 @@ ~ for (int i = 0, l = lst.size(); i < l; ++i) { ~ this.combineItems(lst.get(i)); -> INSERT 258 : 267 @ 258 +> INSERT 258 : 280 @ 258 + + public boolean eaglerEmissiveFlag = false; @@ -36,5 +36,18 @@ + isInFrustum); + eaglerEmissiveFlag = Minecraft.getMinecraft().entityRenderer.renderItemEntityLight(this, 0.1f); + } ++ ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ float f = super.getEaglerDynamicLightsValueSimple(partialTicks); ++ ItemStack itm = this.getEntityItem(); ++ if (itm != null && itm.stackSize > 0) { ++ Item item = itm.getItem(); ++ if (item != null) { ++ float f2 = item.getHeldItemBrightnessEagler() * 0.75f; ++ f = Math.min(f + f2 * 0.5f, 1.0f) + f2 * 0.5f; ++ } ++ } ++ return f; ++ } > EOF diff --git a/patches/minecraft/net/minecraft/entity/item/EntityItemFrame.edit.java b/patches/minecraft/net/minecraft/entity/item/EntityItemFrame.edit.java index f670b53..d391f9b 100644 --- a/patches/minecraft/net/minecraft/entity/item/EntityItemFrame.edit.java +++ b/patches/minecraft/net/minecraft/entity/item/EntityItemFrame.edit.java @@ -9,7 +9,11 @@ + import net.minecraft.client.Minecraft; -> INSERT 189 : 198 @ 189 +> INSERT 5 : 6 @ 5 + ++ import net.minecraft.item.Item; + +> INSERT 184 : 206 @ 184 + + public boolean eaglerEmissiveFlag = false; @@ -20,5 +24,18 @@ + isInFrustum); + eaglerEmissiveFlag = Minecraft.getMinecraft().entityRenderer.renderItemEntityLight(this, 0.1f); + } ++ ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ float f = super.getEaglerDynamicLightsValueSimple(partialTicks); ++ ItemStack itm = this.getDisplayedItem(); ++ if (itm != null && itm.stackSize > 0) { ++ Item item = itm.getItem(); ++ if (item != null) { ++ float f2 = item.getHeldItemBrightnessEagler() * 0.75f; ++ f = Math.min(f + f2 * 0.5f, 1.0f) + f2 * 0.5f; ++ } ++ } ++ return f; ++ } > EOF diff --git a/patches/minecraft/net/minecraft/entity/item/EntityMinecartTNT.edit.java b/patches/minecraft/net/minecraft/entity/item/EntityMinecartTNT.edit.java index 970b21a..9b0490a 100644 --- a/patches/minecraft/net/minecraft/entity/item/EntityMinecartTNT.edit.java +++ b/patches/minecraft/net/minecraft/entity/item/EntityMinecartTNT.edit.java @@ -11,7 +11,7 @@ > DELETE 3 @ 3 : 4 -> INSERT 159 : 170 @ 159 +> INSERT 159 : 178 @ 159 + + protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, @@ -24,5 +24,13 @@ + entityZ, dynamicLightMag, dynamicLightMag * 0.7792f, dynamicLightMag * 0.618f, false); + } + } ++ ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ float f = super.getEaglerDynamicLightsValueSimple(partialTicks); ++ if (minecartTNTFuse > -1 && minecartTNTFuse / 5 % 2 == 0) { ++ f = Math.min(f + 0.75f, 1.25f); ++ } ++ return f; ++ } > EOF diff --git a/patches/minecraft/net/minecraft/entity/item/EntityTNTPrimed.edit.java b/patches/minecraft/net/minecraft/entity/item/EntityTNTPrimed.edit.java index ce06b6a..96792af 100644 --- a/patches/minecraft/net/minecraft/entity/item/EntityTNTPrimed.edit.java +++ b/patches/minecraft/net/minecraft/entity/item/EntityTNTPrimed.edit.java @@ -9,7 +9,7 @@ + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DynamicLightManager; -> INSERT 90 : 101 @ 90 +> INSERT 90 : 109 @ 90 + + protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, @@ -22,5 +22,13 @@ + entityZ, dynamicLightMag, dynamicLightMag * 0.7792f, dynamicLightMag * 0.618f, false); + } + } ++ ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ float f = super.getEaglerDynamicLightsValueSimple(partialTicks); ++ if (fuse / 5 % 2 == 0) { ++ f = Math.min(f + 0.75f, 1.25f); ++ } ++ return f; ++ } > EOF diff --git a/patches/minecraft/net/minecraft/entity/item/EntityXPOrb.edit.java b/patches/minecraft/net/minecraft/entity/item/EntityXPOrb.edit.java index 43a3622..dba6a86 100644 --- a/patches/minecraft/net/minecraft/entity/item/EntityXPOrb.edit.java +++ b/patches/minecraft/net/minecraft/entity/item/EntityXPOrb.edit.java @@ -9,7 +9,14 @@ + import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DynamicLightManager; -> INSERT 205 : 216 @ 205 +> INSERT 55 : 59 @ 55 + ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ return 0.25f; ++ } ++ + +> INSERT 150 : 161 @ 150 + + protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, diff --git a/patches/minecraft/net/minecraft/entity/monster/EntityBlaze.edit.java b/patches/minecraft/net/minecraft/entity/monster/EntityBlaze.edit.java index 0e688dc..b64736a 100644 --- a/patches/minecraft/net/minecraft/entity/monster/EntityBlaze.edit.java +++ b/patches/minecraft/net/minecraft/entity/monster/EntityBlaze.edit.java @@ -15,7 +15,14 @@ ~ this.dataWatcher.addObject(16, Byte.valueOf((byte) 0)); -> INSERT 185 : 192 @ 185 +> INSERT 22 : 26 @ 22 + ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ return 1.0f; ++ } ++ + +> INSERT 163 : 170 @ 163 + + protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, diff --git a/patches/minecraft/net/minecraft/entity/monster/EntityCreeper.edit.java b/patches/minecraft/net/minecraft/entity/monster/EntityCreeper.edit.java index 1953bed..8e40818 100644 --- a/patches/minecraft/net/minecraft/entity/monster/EntityCreeper.edit.java +++ b/patches/minecraft/net/minecraft/entity/monster/EntityCreeper.edit.java @@ -12,7 +12,7 @@ > DELETE 12 @ 12 : 14 -> INSERT 204 : 217 @ 204 +> INSERT 204 : 226 @ 204 + + protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, @@ -27,5 +27,14 @@ + DeferredStateManager.setEmissionConstant(1.0f); + } + } ++ ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ float f = super.getEaglerDynamicLightsValueSimple(partialTicks); ++ float ff = getCreeperFlashIntensity(partialTicks); ++ if ((int) (ff * 10.0F) % 2 != 0) { ++ f = Math.min(f + 0.5f, 1.15f); ++ } ++ return f; ++ } > EOF diff --git a/patches/minecraft/net/minecraft/entity/monster/EntityMagmaCube.edit.java b/patches/minecraft/net/minecraft/entity/monster/EntityMagmaCube.edit.java index a8dd664..19567d5 100644 --- a/patches/minecraft/net/minecraft/entity/monster/EntityMagmaCube.edit.java +++ b/patches/minecraft/net/minecraft/entity/monster/EntityMagmaCube.edit.java @@ -7,4 +7,11 @@ > DELETE 3 @ 3 : 4 +> INSERT 39 : 43 @ 39 + ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ return 1.0f; ++ } ++ + > EOF diff --git a/patches/minecraft/net/minecraft/entity/projectile/EntityFireball.edit.java b/patches/minecraft/net/minecraft/entity/projectile/EntityFireball.edit.java index f43a7b8..32fe8ad 100644 --- a/patches/minecraft/net/minecraft/entity/projectile/EntityFireball.edit.java +++ b/patches/minecraft/net/minecraft/entity/projectile/EntityFireball.edit.java @@ -27,4 +27,11 @@ ~ for (int i = 0, l = list.size(); i < l; ++i) { +> INSERT 156 : 160 @ 156 + ++ protected float getEaglerDynamicLightsValueSimple(float partialTicks) { ++ return 1.0f; ++ } ++ + > EOF diff --git a/patches/minecraft/net/minecraft/item/Item.edit.java b/patches/minecraft/net/minecraft/item/Item.edit.java index 0c0a068..5216112 100644 --- a/patches/minecraft/net/minecraft/item/Item.edit.java +++ b/patches/minecraft/net/minecraft/item/Item.edit.java @@ -82,4 +82,11 @@ + } + +> INSERT 864 : 868 @ 864 + ++ ++ public float getHeldItemBrightnessEagler() { ++ return 0.0f; ++ } + > EOF diff --git a/patches/minecraft/net/minecraft/item/ItemBlock.edit.java b/patches/minecraft/net/minecraft/item/ItemBlock.edit.java index 37072b7..262e598 100644 --- a/patches/minecraft/net/minecraft/item/ItemBlock.edit.java +++ b/patches/minecraft/net/minecraft/item/ItemBlock.edit.java @@ -7,4 +7,11 @@ > DELETE 9 @ 9 : 11 +> INSERT 120 : 124 @ 120 + ++ ++ public float getHeldItemBrightnessEagler() { ++ return this.block.getLightValue() * 0.06667f; ++ } + > EOF diff --git a/patches/minecraft/net/minecraft/pathfinding/PathPoint.edit.java b/patches/minecraft/net/minecraft/pathfinding/PathPoint.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/pathfinding/PathPoint.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/server/MinecraftServer.edit.java b/patches/minecraft/net/minecraft/server/MinecraftServer.edit.java index 1070e89..a5f3a73 100644 --- a/patches/minecraft/net/minecraft/server/MinecraftServer.edit.java +++ b/patches/minecraft/net/minecraft/server/MinecraftServer.edit.java @@ -120,7 +120,15 @@ > DELETE 1 @ 1 : 2 -> DELETE 32 @ 32 : 35 +> INSERT 6 : 11 @ 6 + ++ if (worldinfo.isOldEaglercraftRandom()) { ++ LogManager.getLogger("EaglerMinecraftServer") ++ .info("Detected a pre-u34 world, using old EaglercraftRandom implementation for world generation"); ++ } ++ + +> DELETE 26 @ 26 : 29 > CHANGE 3 : 11 @ 3 : 5 diff --git a/patches/minecraft/net/minecraft/server/management/ItemInWorldManager.edit.java b/patches/minecraft/net/minecraft/server/management/ItemInWorldManager.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/server/management/ItemInWorldManager.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/village/VillageDoorInfo.edit.java b/patches/minecraft/net/minecraft/village/VillageDoorInfo.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/village/VillageDoorInfo.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/world/Teleporter.edit.java b/patches/minecraft/net/minecraft/world/Teleporter.edit.java index b95a755..ce33e0a 100644 --- a/patches/minecraft/net/minecraft/world/Teleporter.edit.java +++ b/patches/minecraft/net/minecraft/world/Teleporter.edit.java @@ -17,6 +17,6 @@ > CHANGE 5 : 6 @ 5 : 6 -~ this.random = new EaglercraftRandom(worldIn.getSeed()); +~ this.random = new EaglercraftRandom(worldIn.getSeed(), !worldIn.getWorldInfo().isOldEaglercraftRandom()); > EOF diff --git a/patches/minecraft/net/minecraft/world/World.edit.java b/patches/minecraft/net/minecraft/world/World.edit.java index f605a5c..d4abe56 100644 --- a/patches/minecraft/net/minecraft/world/World.edit.java +++ b/patches/minecraft/net/minecraft/world/World.edit.java @@ -64,7 +64,16 @@ ~ return Chunk.getNoSkyLightValue(); -> INSERT 94 : 98 @ 94 +> CHANGE 74 : 80 @ 74 : 75 + +~ if (lightValue < 0) { +~ j += -lightValue; +~ if (j > 15) { +~ j = 15; +~ } +~ } else if (j < lightValue) { + +> INSERT 19 : 23 @ 19 + public Block getBlock(BlockPos pos) { + return getBlockState(pos).getBlock(); diff --git a/patches/minecraft/net/minecraft/world/WorldProvider.edit.java b/patches/minecraft/net/minecraft/world/WorldProvider.edit.java index 7ab1fe2..41997c4 100644 --- a/patches/minecraft/net/minecraft/world/WorldProvider.edit.java +++ b/patches/minecraft/net/minecraft/world/WorldProvider.edit.java @@ -7,7 +7,15 @@ > DELETE 6 @ 6 : 11 -> CHANGE 99 : 100 @ 99 : 100 +> INSERT 83 : 84 @ 83 + ++ float f2 = f; + +> CHANGE 1 : 2 @ 1 : 2 + +~ f = f2 + (f - f2) / 3.0F; + +> CHANGE 14 : 15 @ 14 : 15 ~ float f2 = 0.0F; diff --git a/patches/minecraft/net/minecraft/world/WorldType.edit.java b/patches/minecraft/net/minecraft/world/WorldType.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/world/WorldType.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeGenMesa.edit.java b/patches/minecraft/net/minecraft/world/biome/BiomeGenMesa.edit.java index 32a7a08..d1b0862 100644 --- a/patches/minecraft/net/minecraft/world/biome/BiomeGenMesa.edit.java +++ b/patches/minecraft/net/minecraft/world/biome/BiomeGenMesa.edit.java @@ -24,12 +24,21 @@ ~ public void genTerrainBlocks(World world, EaglercraftRandom random, ChunkPrimer chunkprimer, int i, int j, ~ double d0) { -> CHANGE 5 : 6 @ 5 : 6 +> CHANGE 1 : 2 @ 1 : 2 -~ EaglercraftRandom random1 = new EaglercraftRandom(this.field_150622_aD); +~ this.func_150619_a(world.getSeed(), !world.getWorldInfo().isOldEaglercraftRandom()); -> CHANGE 111 : 112 @ 111 : 112 +> CHANGE 3 : 5 @ 3 : 4 -~ EaglercraftRandom random = new EaglercraftRandom(parLong1); +~ EaglercraftRandom random1 = new EaglercraftRandom(this.field_150622_aD, +~ !world.getWorldInfo().isOldEaglercraftRandom()); + +> CHANGE 108 : 109 @ 108 : 109 + +~ private void func_150619_a(long parLong1, boolean scrambleRNG) { + +> CHANGE 2 : 3 @ 2 : 3 + +~ EaglercraftRandom random = new EaglercraftRandom(parLong1, scrambleRNG); > EOF diff --git a/patches/minecraft/net/minecraft/world/chunk/Chunk.edit.java b/patches/minecraft/net/minecraft/world/chunk/Chunk.edit.java index 5a0f735..40157c1 100644 --- a/patches/minecraft/net/minecraft/world/chunk/Chunk.edit.java +++ b/patches/minecraft/net/minecraft/world/chunk/Chunk.edit.java @@ -162,7 +162,11 @@ ~ public EaglercraftRandom getRandomWithSeed(long i) { ~ return new EaglercraftRandom(this.worldObj.getSeed() + (long) (this.xPosition * this.xPosition * 4987142) -> CHANGE 92 : 93 @ 92 : 93 +> CHANGE 1 : 2 @ 1 : 2 + +~ + (long) (this.zPosition * 389711) ^ i, !this.worldObj.getWorldInfo().isOldEaglercraftRandom()); + +> CHANGE 90 : 91 @ 90 : 91 ~ BlockPos blockpos = (BlockPos) this.tileEntityPosQueue.remove(0); diff --git a/patches/minecraft/net/minecraft/world/chunk/EmptyChunk.edit.java b/patches/minecraft/net/minecraft/world/chunk/EmptyChunk.edit.java index e50442f..9faa82c 100644 --- a/patches/minecraft/net/minecraft/world/chunk/EmptyChunk.edit.java +++ b/patches/minecraft/net/minecraft/world/chunk/EmptyChunk.edit.java @@ -16,9 +16,13 @@ > DELETE 8 @ 8 : 9 -> CHANGE 90 : 92 @ 90 : 92 +> CHANGE 90 : 96 @ 90 : 94 ~ public EaglercraftRandom getRandomWithSeed(long seed) { -~ return new EaglercraftRandom(this.getWorld().getSeed() + (long) (this.xPosition * this.xPosition * 4987142) +~ return new EaglercraftRandom( +~ this.getWorld().getSeed() + (long) (this.xPosition * this.xPosition * 4987142) +~ + (long) (this.xPosition * 5947611) + (long) (this.zPosition * this.zPosition) * 4392871L +~ + (long) (this.zPosition * 389711) ^ seed, +~ !this.getWorld().getWorldInfo().isOldEaglercraftRandom()); > EOF diff --git a/patches/minecraft/net/minecraft/world/demo/DemoWorldManager.edit.java b/patches/minecraft/net/minecraft/world/demo/DemoWorldManager.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/world/demo/DemoWorldManager.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/world/gen/ChunkProviderDebug.edit.java b/patches/minecraft/net/minecraft/world/gen/ChunkProviderDebug.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/world/gen/ChunkProviderDebug.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/world/gen/ChunkProviderEnd.edit.java b/patches/minecraft/net/minecraft/world/gen/ChunkProviderEnd.edit.java index e068c6a..a516a7c 100644 --- a/patches/minecraft/net/minecraft/world/gen/ChunkProviderEnd.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/ChunkProviderEnd.edit.java @@ -17,6 +17,6 @@ > CHANGE 16 : 17 @ 16 : 17 -~ this.endRNG = new EaglercraftRandom(parLong1); +~ this.endRNG = new EaglercraftRandom(parLong1, !worldIn.getWorldInfo().isOldEaglercraftRandom()); > EOF diff --git a/patches/minecraft/net/minecraft/world/gen/ChunkProviderFlat.edit.java b/patches/minecraft/net/minecraft/world/gen/ChunkProviderFlat.edit.java index 87c486a..1229f6c 100644 --- a/patches/minecraft/net/minecraft/world/gen/ChunkProviderFlat.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/ChunkProviderFlat.edit.java @@ -15,11 +15,32 @@ ~ private EaglercraftRandom random; -> CHANGE 10 : 11 @ 10 : 11 +> CHANGE 10 : 12 @ 10 : 11 -~ this.random = new EaglercraftRandom(seed); +~ boolean scramble = !worldIn.getWorldInfo().isOldEaglercraftRandom(); +~ this.random = new EaglercraftRandom(seed, scramble); -> CHANGE 110 : 112 @ 110 : 111 +> CHANGE 9 : 10 @ 9 : 10 + +~ this.structureGenerators.add(new MapGenVillage(map1, scramble)); + +> CHANGE 3 : 4 @ 3 : 4 + +~ this.structureGenerators.add(new MapGenScatteredFeature((Map) map.get("biome_1"), scramble)); + +> CHANGE 3 : 4 @ 3 : 4 + +~ this.structureGenerators.add(new MapGenMineshaft((Map) map.get("mineshaft"), scramble)); + +> CHANGE 3 : 4 @ 3 : 4 + +~ this.structureGenerators.add(new MapGenStronghold((Map) map.get("stronghold"), scramble)); + +> CHANGE 3 : 4 @ 3 : 4 + +~ this.structureGenerators.add(new StructureOceanMonument((Map) map.get("oceanmonument"), scramble)); + +> CHANGE 84 : 86 @ 84 : 85 ~ for (int m = 0, n = this.structureGenerators.size(); m < n; ++m) { ~ MapGenStructure mapgenstructure = this.structureGenerators.get(m); diff --git a/patches/minecraft/net/minecraft/world/gen/ChunkProviderGenerate.edit.java b/patches/minecraft/net/minecraft/world/gen/ChunkProviderGenerate.edit.java index 82a06c5..92cb66b 100644 --- a/patches/minecraft/net/minecraft/world/gen/ChunkProviderGenerate.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/ChunkProviderGenerate.edit.java @@ -15,8 +15,26 @@ ~ private EaglercraftRandom rand; -> CHANGE 32 : 33 @ 32 : 33 +> CHANGE 15 : 22 @ 15 : 22 -~ this.rand = new EaglercraftRandom(parLong1); +~ private MapGenBase caveGenerator; +~ private MapGenStronghold strongholdGenerator; +~ private MapGenVillage villageGenerator; +~ private MapGenMineshaft mineshaftGenerator; +~ private MapGenScatteredFeature scatteredFeatureGenerator; +~ private MapGenBase ravineGenerator; +~ private StructureOceanMonument oceanMonumentGenerator; + +> CHANGE 10 : 19 @ 10 : 11 + +~ boolean scramble = !worldIn.getWorldInfo().isOldEaglercraftRandom(); +~ this.rand = new EaglercraftRandom(parLong1, scramble); +~ this.caveGenerator = new MapGenCaves(scramble); +~ this.strongholdGenerator = new MapGenStronghold(scramble); +~ this.villageGenerator = new MapGenVillage(scramble); +~ this.mineshaftGenerator = new MapGenMineshaft(scramble); +~ this.scatteredFeatureGenerator = new MapGenScatteredFeature(scramble); +~ this.ravineGenerator = new MapGenRavine(scramble); +~ this.oceanMonumentGenerator = new StructureOceanMonument(scramble); > EOF diff --git a/patches/minecraft/net/minecraft/world/gen/ChunkProviderHell.edit.java b/patches/minecraft/net/minecraft/world/gen/ChunkProviderHell.edit.java index f90a6ac..eb8b4d2 100644 --- a/patches/minecraft/net/minecraft/world/gen/ChunkProviderHell.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/ChunkProviderHell.edit.java @@ -15,8 +15,16 @@ ~ private final EaglercraftRandom hellRNG; -> CHANGE 31 : 32 @ 31 : 32 +> CHANGE 20 : 22 @ 20 : 22 -~ this.hellRNG = new EaglercraftRandom(parLong1); +~ private final MapGenNetherBridge genNetherBridge; +~ private final MapGenBase netherCaveGenerator; + +> CHANGE 9 : 13 @ 9 : 10 + +~ boolean scramble = !worldIn.getWorldInfo().isOldEaglercraftRandom(); +~ this.hellRNG = new EaglercraftRandom(parLong1, scramble); +~ this.genNetherBridge = new MapGenNetherBridge(scramble); +~ this.netherCaveGenerator = new MapGenCavesHell(scramble); > EOF diff --git a/patches/minecraft/net/minecraft/world/gen/MapGenBase.edit.java b/patches/minecraft/net/minecraft/world/gen/MapGenBase.edit.java index c73afac..e80100d 100644 --- a/patches/minecraft/net/minecraft/world/gen/MapGenBase.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/MapGenBase.edit.java @@ -11,6 +11,17 @@ > CHANGE 6 : 7 @ 6 : 7 -~ protected EaglercraftRandom rand = new EaglercraftRandom(); +~ protected EaglercraftRandom rand; + +> INSERT 2 : 10 @ 2 + ++ public MapGenBase() { ++ this(true); ++ } ++ ++ public MapGenBase(boolean scramble) { ++ rand = new EaglercraftRandom(scramble); ++ } ++ > EOF diff --git a/patches/minecraft/net/minecraft/world/gen/MapGenCaves.edit.java b/patches/minecraft/net/minecraft/world/gen/MapGenCaves.edit.java index 51803e7..5e01856 100644 --- a/patches/minecraft/net/minecraft/world/gen/MapGenCaves.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/MapGenCaves.edit.java @@ -11,8 +11,16 @@ > DELETE 8 @ 8 : 9 -> CHANGE 15 : 16 @ 15 : 16 +> INSERT 2 : 7 @ 2 -~ EaglercraftRandom random = new EaglercraftRandom(parLong1); ++ ++ public MapGenCaves(boolean scramble) { ++ super(scramble); ++ } ++ + +> CHANGE 13 : 14 @ 13 : 14 + +~ EaglercraftRandom random = new EaglercraftRandom(parLong1, this.rand.isScramble()); > EOF diff --git a/patches/minecraft/net/minecraft/world/gen/MapGenCavesHell.edit.java b/patches/minecraft/net/minecraft/world/gen/MapGenCavesHell.edit.java index 7fd6bd1..cb88eab 100644 --- a/patches/minecraft/net/minecraft/world/gen/MapGenCavesHell.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/MapGenCavesHell.edit.java @@ -11,8 +11,16 @@ > DELETE 5 @ 5 : 6 -> CHANGE 15 : 16 @ 15 : 16 +> INSERT 2 : 7 @ 2 -~ EaglercraftRandom random = new EaglercraftRandom(parLong1); ++ ++ public MapGenCavesHell(boolean scramble) { ++ super(scramble); ++ } ++ + +> CHANGE 13 : 14 @ 13 : 14 + +~ EaglercraftRandom random = new EaglercraftRandom(parLong1, this.rand.isScramble()); > EOF diff --git a/patches/minecraft/net/minecraft/world/gen/MapGenRavine.edit.java b/patches/minecraft/net/minecraft/world/gen/MapGenRavine.edit.java index d24d97d..dd0c9d7 100644 --- a/patches/minecraft/net/minecraft/world/gen/MapGenRavine.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/MapGenRavine.edit.java @@ -11,8 +11,15 @@ > DELETE 6 @ 6 : 7 -> CHANGE 7 : 8 @ 7 : 8 +> INSERT 4 : 8 @ 4 -~ EaglercraftRandom random = new EaglercraftRandom(parLong1); ++ public MapGenRavine(boolean scramble) { ++ super(scramble); ++ } ++ + +> CHANGE 3 : 4 @ 3 : 4 + +~ EaglercraftRandom random = new EaglercraftRandom(parLong1, this.rand.isScramble()); > EOF diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.edit.java b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.edit.java index 028bd7b..e18e15a 100644 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.edit.java @@ -36,6 +36,6 @@ > CHANGE 2 : 3 @ 2 : 3 -~ this.rand = new EaglercraftRandom(rand.nextLong()); +~ this.rand = new EaglercraftRandom(rand.nextLong(), !worldIn.getWorldInfo().isOldEaglercraftRandom()); > EOF diff --git a/patches/minecraft/net/minecraft/world/gen/layer/IntCache.edit.java b/patches/minecraft/net/minecraft/world/gen/layer/IntCache.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/world/gen/layer/IntCache.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/world/gen/structure/MapGenMineshaft.edit.java b/patches/minecraft/net/minecraft/world/gen/structure/MapGenMineshaft.edit.java index 3e397c6..466eb65 100644 --- a/patches/minecraft/net/minecraft/world/gen/structure/MapGenMineshaft.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/structure/MapGenMineshaft.edit.java @@ -7,4 +7,14 @@ > DELETE 5 @ 5 : 8 +> CHANGE 4 : 6 @ 4 : 5 + +~ public MapGenMineshaft(boolean scramble) { +~ super(scramble); + +> CHANGE 6 : 8 @ 6 : 7 + +~ public MapGenMineshaft(Map parMap, boolean scramble) { +~ super(scramble); + > EOF diff --git a/patches/minecraft/net/minecraft/world/gen/structure/MapGenNetherBridge.edit.java b/patches/minecraft/net/minecraft/world/gen/structure/MapGenNetherBridge.edit.java index 3d6c1e4..3b6005e 100644 --- a/patches/minecraft/net/minecraft/world/gen/structure/MapGenNetherBridge.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/structure/MapGenNetherBridge.edit.java @@ -11,7 +11,12 @@ > DELETE 6 @ 6 : 10 -> CHANGE 36 : 37 @ 36 : 37 +> CHANGE 4 : 6 @ 4 : 5 + +~ public MapGenNetherBridge(boolean scramble) { +~ super(scramble); + +> CHANGE 31 : 32 @ 31 : 32 ~ public Start(World worldIn, EaglercraftRandom parRandom, int parInt1, int parInt2) { diff --git a/patches/minecraft/net/minecraft/world/gen/structure/MapGenScatteredFeature.edit.java b/patches/minecraft/net/minecraft/world/gen/structure/MapGenScatteredFeature.edit.java index c01d22c..ee1230e 100644 --- a/patches/minecraft/net/minecraft/world/gen/structure/MapGenScatteredFeature.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/structure/MapGenScatteredFeature.edit.java @@ -11,7 +11,17 @@ > DELETE 6 @ 6 : 10 -> CHANGE 45 : 46 @ 45 : 46 +> CHANGE 8 : 10 @ 8 : 9 + +~ public MapGenScatteredFeature(boolean scramble) { +~ super(scramble); + +> CHANGE 6 : 8 @ 6 : 8 + +~ public MapGenScatteredFeature(Map parMap, boolean scramble) { +~ this(scramble); + +> CHANGE 28 : 29 @ 28 : 29 ~ EaglercraftRandom random = this.worldObj.setRandomSeed(i1, j1, 14357617); diff --git a/patches/minecraft/net/minecraft/world/gen/structure/MapGenStronghold.edit.java b/patches/minecraft/net/minecraft/world/gen/structure/MapGenStronghold.edit.java index 94c4878..c597da1 100644 --- a/patches/minecraft/net/minecraft/world/gen/structure/MapGenStronghold.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/structure/MapGenStronghold.edit.java @@ -11,15 +11,25 @@ > DELETE 6 @ 6 : 10 -> CHANGE 14 : 17 @ 14 : 15 +> CHANGE 8 : 10 @ 8 : 9 + +~ public MapGenStronghold(boolean scramble) { +~ super(scramble); + +> CHANGE 5 : 8 @ 5 : 6 ~ BiomeGenBase[] biomes = BiomeGenBase.getBiomeGenArray(); ~ for (int i = 0; i < biomes.length; ++i) { ~ BiomeGenBase biomegenbase = biomes[i]; -> CHANGE 31 : 32 @ 31 : 32 +> CHANGE 7 : 9 @ 7 : 9 -~ EaglercraftRandom random = new EaglercraftRandom(); +~ public MapGenStronghold(Map parMap, boolean scramble) { +~ this(scramble); + +> CHANGE 22 : 23 @ 22 : 23 + +~ EaglercraftRandom random = new EaglercraftRandom(!this.worldObj.getWorldInfo().isOldEaglercraftRandom()); > CHANGE 26 : 28 @ 26 : 27 diff --git a/patches/minecraft/net/minecraft/world/gen/structure/MapGenStructure.edit.java b/patches/minecraft/net/minecraft/world/gen/structure/MapGenStructure.edit.java index 22b85de..f0081ac 100644 --- a/patches/minecraft/net/minecraft/world/gen/structure/MapGenStructure.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/structure/MapGenStructure.edit.java @@ -17,7 +17,18 @@ > DELETE 11 @ 11 : 16 -> CHANGE 30 : 31 @ 30 : 31 +> INSERT 7 : 15 @ 7 + ++ public MapGenStructure() { ++ super(); ++ } ++ ++ public MapGenStructure(boolean scramble) { ++ super(scramble); ++ } ++ + +> CHANGE 23 : 24 @ 23 : 24 ~ HString.format("%d,%d", new Object[] { Integer.valueOf(i), Integer.valueOf(j) })); diff --git a/patches/minecraft/net/minecraft/world/gen/structure/MapGenStructureData.edit.java b/patches/minecraft/net/minecraft/world/gen/structure/MapGenStructureData.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/world/gen/structure/MapGenStructureData.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/world/gen/structure/MapGenVillage.edit.java b/patches/minecraft/net/minecraft/world/gen/structure/MapGenVillage.edit.java index 24eb3b5..daff0b1 100644 --- a/patches/minecraft/net/minecraft/world/gen/structure/MapGenVillage.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/structure/MapGenVillage.edit.java @@ -11,7 +11,17 @@ > DELETE 5 @ 5 : 9 -> CHANGE 44 : 45 @ 44 : 45 +> CHANGE 8 : 10 @ 8 : 9 + +~ public MapGenVillage(boolean scramble) { +~ super(scramble); + +> CHANGE 4 : 6 @ 4 : 6 + +~ public MapGenVillage(Map parMap, boolean scramble) { +~ this(scramble); + +> CHANGE 29 : 30 @ 29 : 30 ~ EaglercraftRandom random = this.worldObj.setRandomSeed(i1, j1, 10387312); diff --git a/patches/minecraft/net/minecraft/world/gen/structure/StructureBoundingBox.edit.java b/patches/minecraft/net/minecraft/world/gen/structure/StructureBoundingBox.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/world/gen/structure/StructureBoundingBox.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/world/gen/structure/StructureOceanMonument.edit.java b/patches/minecraft/net/minecraft/world/gen/structure/StructureOceanMonument.edit.java index d4f37bc..c004a4b 100644 --- a/patches/minecraft/net/minecraft/world/gen/structure/StructureOceanMonument.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/structure/StructureOceanMonument.edit.java @@ -11,7 +11,17 @@ > DELETE 11 @ 11 : 15 -> CHANGE 45 : 46 @ 45 : 46 +> CHANGE 8 : 10 @ 8 : 9 + +~ public StructureOceanMonument(boolean scramble) { +~ super(scramble); + +> CHANGE 4 : 6 @ 4 : 6 + +~ public StructureOceanMonument(Map parMap, boolean scramble) { +~ this(scramble); + +> CHANGE 30 : 31 @ 30 : 31 ~ EaglercraftRandom random = this.worldObj.setRandomSeed(i1, j1, 10387313); diff --git a/patches/minecraft/net/minecraft/world/pathfinder/NodeProcessor.edit.java b/patches/minecraft/net/minecraft/world/pathfinder/NodeProcessor.edit.java deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/world/pathfinder/NodeProcessor.edit.java +++ /dev/null @@ -1,8 +0,0 @@ - -# Eagler Context Redacted Diff -# Copyright (c) 2024 lax1dude. All rights reserved. - -# Version: 1.0 -# Author: lax1dude - -> EOF diff --git a/patches/minecraft/net/minecraft/world/storage/WorldInfo.edit.java b/patches/minecraft/net/minecraft/world/storage/WorldInfo.edit.java index d18b8b7..78992be 100644 --- a/patches/minecraft/net/minecraft/world/storage/WorldInfo.edit.java +++ b/patches/minecraft/net/minecraft/world/storage/WorldInfo.edit.java @@ -10,7 +10,38 @@ + import net.lax1dude.eaglercraft.v1_8.HString; + -> CHANGE 539 : 540 @ 539 : 540 +> INSERT 39 : 42 @ 39 + ++ public static final int eaglerVersionCurrent = 1; ++ private int eaglerVersion = eaglerVersionCurrent; ++ + +> INSERT 116 : 117 @ 116 + ++ this.eaglerVersion = nbt.getInteger("eaglerVersionSerial"); + +> INSERT 102 : 103 @ 102 + ++ nbt.setInteger("eaglerVersionSerial", this.eaglerVersion); + +> INSERT 274 : 288 @ 274 + ++ public int getEaglerVersion() { ++ return this.eaglerVersion; ++ } ++ ++ public boolean isOldEaglercraftRandom() { ++ return this.eaglerVersion == 0; ++ } ++ ++ public static void initEaglerVersion(NBTTagCompound compound) { ++ if (!compound.hasKey("eaglerVersionSerial", 99)) { ++ compound.setInteger("eaglerVersionSerial", eaglerVersionCurrent); ++ } ++ } ++ + +> CHANGE 8 : 9 @ 8 : 9 ~ return HString.format("ID %02d - %s, ver %d. Features enabled: %b", diff --git a/patches/resources/assets/minecraft/lang/en_US.edit.lang b/patches/resources/assets/minecraft/lang/en_US.edit.lang index 3125d03..c945d4c 100644 --- a/patches/resources/assets/minecraft/lang/en_US.edit.lang +++ b/patches/resources/assets/minecraft/lang/en_US.edit.lang @@ -12,7 +12,7 @@ ~ eaglercraft.recording.start=Record Screen... ~ eaglercraft.soundCategory.voice=Recording Voice -> INSERT 1 : 246 @ 1 +> INSERT 1 : 247 @ 1 + eaglercraft.resourcePack.prompt.title=What do you want to do with '%s'? + eaglercraft.resourcePack.prompt.text=Tip: Hold Shift to skip this screen when selecting a resource pack! @@ -123,6 +123,7 @@ + eaglercraft.options.fastMath.0=OFF + eaglercraft.options.fastMath.1=Low + eaglercraft.options.fastMath.2=High ++ eaglercraft.options.dynamicLights=Dynamic Lights + + eaglercraft.key.function=Function + eaglercraft.key.zoomCamera=Zoom Camera @@ -260,7 +261,7 @@ + eaglerforge.menu.mods.info=(Only .js files) + -> INSERT 163 : 404 @ 163 +> INSERT 163 : 409 @ 163 + eaglercraft.singleplayer.busy.killTask=Cancel Task + eaglercraft.singleplayer.busy.cancelWarning=Are you sure? @@ -418,7 +419,12 @@ + eaglercraft.singleplayer.demo.create.join=Join Shared World + eaglercraft.singleplayer.demo.create.join.tooltip=Join someone else's world and play multiplayer + -+ eaglercraft.createWorld.seedNote=Note: Vanilla seeds do not work! ++ eaglercraft.createWorld.seedNote=Note: Vanilla seeds now work! ++ ++ eaglercraft.singleplayer.oldseedwarning.title=Old World Detected! ++ eaglercraft.singleplayer.oldseedwarning.msg1=Please use EaglercraftX u32 or older to "Re-Create" this world ++ eaglercraft.singleplayer.oldseedwarning.msg2=The world's seed will not be the same otherwise :( ++ eaglercraft.singleplayer.oldseedwarning.ok=OK + + eaglercraft.singleplayer.outdatedLANServerKick=This is a 1.5.2 LAN world! + diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopClientConfigAdapter.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopClientConfigAdapter.java index 1380861..2709b2b 100644 --- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopClientConfigAdapter.java +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopClientConfigAdapter.java @@ -142,6 +142,11 @@ public class DesktopClientConfigAdapter implements IClientConfigAdapter { return EaglercraftVersion.localStorageNamespace; } + @Override + public boolean isEnableMinceraft() { + return true; + } + @Override public IClientConfigAdapterHooks getHooks() { return hooks; diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/EaglerInputStream.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/EaglerInputStream.java index d35b115..bf1466c 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/EaglerInputStream.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/EaglerInputStream.java @@ -121,20 +121,24 @@ public class EaglerInputStream extends InputStream { } public static byte[] inputStreamToBytes(InputStream is) throws IOException { - if (is instanceof EaglerInputStream) { - return ((EaglerInputStream) is).getAsArray(); - } else if (is instanceof ByteArrayInputStream) { - byte[] ret = new byte[is.available()]; - is.read(ret); - return ret; - } else { - EaglerOutputStream os = new EaglerOutputStream(1024); - byte[] buf = new byte[1024]; - int i; - while ((i = is.read(buf)) != -1) { - os.write(buf, 0, i); + try { + if (is instanceof EaglerInputStream) { + return ((EaglerInputStream) is).getAsArray(); + } else if (is instanceof ByteArrayInputStream) { + byte[] ret = new byte[is.available()]; + is.read(ret); + return ret; + } else { + EaglerOutputStream os = new EaglerOutputStream(1024); + byte[] buf = new byte[1024]; + int i; + while ((i = is.read(buf)) != -1) { + os.write(buf, 0, i); + } + return os.toByteArray(); } - return os.toByteArray(); + }finally { + is.close(); } } diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftRandom.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftRandom.java index 2f98334..93484c5 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftRandom.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftRandom.java @@ -3,7 +3,7 @@ package net.lax1dude.eaglercraft.v1_8; import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; /** - * Copyright (c) 2022 lax1dude. All Rights Reserved. + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED @@ -25,19 +25,46 @@ public class EaglercraftRandom { private static final double DOUBLE_UNIT = 0x1.0p-53; private long seed = 69; - - private static int yee = 0; + private final boolean enableScramble; public EaglercraftRandom() { this(PlatformRuntime.randomSeed()); } public EaglercraftRandom(long seed) { + this(seed, true); + } + + public EaglercraftRandom(boolean scramble) { + this(PlatformRuntime.randomSeed(), scramble); + } + + /** + * Older versions of EaglercraftX (and Eaglercraft) are missing the + * "initialScramble" function from their setSeed function, which was what caused + * world generation to not match vanilla. The "enableScramble" boolean is used + * when players play on an old world created before the bug was fixed. + */ + public EaglercraftRandom(long seed, boolean scramble) { + enableScramble = scramble; setSeed(seed); } + private static long initialScramble(long seed) { + return (seed ^ multiplier) & mask; + } + public void setSeed(long yeed) { - seed = yeed; + if(enableScramble) { + seed = initialScramble(yeed); + }else { + seed = yeed; + } + haveNextNextGaussian = true; + } + + public boolean isScramble() { + return enableScramble; } protected int next(int bits) { diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java index c899287..63b3203 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java @@ -23,7 +23,7 @@ public class EaglercraftVersion { public static final String projectOriginName = "EaglercraftX"; public static final String projectOriginAuthor = "lax1dude"; public static final String projectOriginRevision = "1.8"; - public static final String projectOriginVersion = "u32"; + public static final String projectOriginVersion = "u35"; public static final String projectOriginURL = "https://gitlab.com/lax1dude/eaglercraftx-1.8"; // rest in peace diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapter.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapter.java index d2e0492..f28f78a 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapter.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapter.java @@ -74,6 +74,8 @@ public interface IClientConfigAdapter { String getLocalStorageNamespace(); + boolean isEnableMinceraft(); + IClientConfigAdapterHooks getHooks(); } diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/FixedFunctionPipeline.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/FixedFunctionPipeline.java index 605bccf..1b714c0 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/FixedFunctionPipeline.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/FixedFunctionPipeline.java @@ -19,6 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; import net.lax1dude.eaglercraft.v1_8.log4j.Logger; import net.lax1dude.eaglercraft.v1_8.opengl.StreamBuffer.StreamBufferInstance; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager; import net.lax1dude.eaglercraft.v1_8.vector.Matrix4f; import net.lax1dude.eaglercraft.v1_8.vector.Vector4f; import net.minecraft.util.MathHelper; @@ -904,7 +905,9 @@ public class FixedFunctionPipeline { _wglUniform3f(stateLightingAmbientUniform3f, r, g, b); } } - + } + + if(stateEnableMCLighting || DynamicLightsStateManager.isInDynamicLightsPass()) { if(!stateHasAttribNormal) { serial = GlStateManager.stateNormalSerial; if(stateNormalSerial != serial) { diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GlStateManager.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GlStateManager.java index c9acc59..2c1b2db 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GlStateManager.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GlStateManager.java @@ -810,6 +810,22 @@ public class GlStateManager extends ModData { } } + public static final void getFloat(int pname, FloatBuffer params) { + switch(pname) { + case GL_MODELVIEW_MATRIX: + modelMatrixStack[modelMatrixStackPointer].store(params); + break; + case GL_PROJECTION_MATRIX: + projectionMatrixStack[projectionMatrixStackPointer].store(params); + break; + case GL_TEXTURE_MATRIX: + textureMatrixStack[activeTexture][textureMatrixStackPointer[activeTexture]].store(params); + break; + default: + throw new UnsupportedOperationException("glGetFloat can only be used to retrieve matricies!"); + } + } + public static final void ortho(double left, double right, double bottom, double top, double zNear, double zFar) { Matrix4f matrix; switch(stateMatrixMode) { diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedParticleRenderer.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedParticleRenderer.java index 4307e41..32b4b8c 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedParticleRenderer.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedParticleRenderer.java @@ -49,8 +49,8 @@ public class InstancedParticleRenderer { private static IUniformGL u_matrixTransform = null; private static FloatBuffer matrixCopyBuffer = null; private static IUniformGL u_texCoordSize2f_particleSize1f = null; - private static IUniformGL u_transformParam_1_2_3_4_f = null; - private static IUniformGL u_transformParam_5_f = null; + private static IUniformGL u_transformParam_1_2_5_f = null; + private static IUniformGL u_transformParam_3_4_f = null; private static IUniformGL u_color4f = null; private static IBufferArrayGL vertexArray = null; @@ -154,8 +154,8 @@ public class InstancedParticleRenderer { u_matrixTransform = _wglGetUniformLocation(shaderProgram, "u_matrixTransform"); u_texCoordSize2f_particleSize1f = _wglGetUniformLocation(shaderProgram, "u_texCoordSize2f_particleSize1f"); - u_transformParam_1_2_3_4_f = _wglGetUniformLocation(shaderProgram, "u_transformParam_1_2_3_4_f"); - u_transformParam_5_f = _wglGetUniformLocation(shaderProgram, "u_transformParam_5_f"); + u_transformParam_1_2_5_f = _wglGetUniformLocation(shaderProgram, "u_transformParam_1_2_5_f"); + u_transformParam_3_4_f = _wglGetUniformLocation(shaderProgram, "u_transformParam_3_4_f"); u_color4f = _wglGetUniformLocation(shaderProgram, "u_color4f"); _wglUniform1i(_wglGetUniformLocation(shaderProgram, "u_inputTexture"), 0); @@ -260,17 +260,17 @@ public class InstancedParticleRenderer { } if (transformParam1 != stateTransformParam1 || transformParam2 != stateTransformParam2 - || transformParam3 != stateTransformParam3 || transformParam4 != stateTransformParam4) { - _wglUniform4f(u_transformParam_1_2_3_4_f, transformParam1, transformParam2, transformParam3, transformParam4); + || transformParam5 != stateTransformParam5) { + _wglUniform3f(u_transformParam_1_2_5_f, transformParam1, transformParam2, transformParam5); stateTransformParam1 = transformParam1; stateTransformParam2 = transformParam2; - stateTransformParam3 = transformParam3; - stateTransformParam4 = transformParam4; + stateTransformParam5 = transformParam5; } - if (transformParam5 != stateTransformParam5) { - _wglUniform1f(u_transformParam_5_f, transformParam5); - stateTransformParam5 = transformParam5; + if (transformParam3 != stateTransformParam3 || transformParam4 != stateTransformParam4) { + _wglUniform2f(u_transformParam_3_4_f, transformParam3, transformParam4); + stateTransformParam3 = transformParam3; + stateTransformParam4 = transformParam4; } int serial = GlStateManager.stateColorSerial; @@ -319,4 +319,8 @@ public class InstancedParticleRenderer { _wglDrawArraysInstanced(GL_TRIANGLES, 0, 6, particleCount); } + public static void stupidColorSetHack(IUniformGL color4f) { + _wglUniform4f(color4f, GlStateManager.stateColorR, GlStateManager.stateColorG, GlStateManager.stateColorB, GlStateManager.stateColorA); + } + } diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DeferredStateManager.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DeferredStateManager.java index 9aa9dc1..68d5d0a 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DeferredStateManager.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DeferredStateManager.java @@ -107,7 +107,7 @@ public class DeferredStateManager { } public static final boolean isInDeferredPass() { - return GlStateManager.isExtensionPipeline(); + return EaglerDeferredPipeline.instance != null && GlStateManager.isExtensionPipeline(); } public static final boolean isInForwardPass() { @@ -153,10 +153,17 @@ public class DeferredStateManager { } public static final void reportForwardRenderObjectPosition2(float x, float y, float z) { - float posX = (float)((x + TileEntityRendererDispatcher.staticPlayerX) - (MathHelper.floor_double(TileEntityRendererDispatcher.staticPlayerX / 16.0) << 4)); - float posY = (float)((y + TileEntityRendererDispatcher.staticPlayerY) - (MathHelper.floor_double(TileEntityRendererDispatcher.staticPlayerY / 16.0) << 4)); - float posZ = (float)((z + TileEntityRendererDispatcher.staticPlayerZ) - (MathHelper.floor_double(TileEntityRendererDispatcher.staticPlayerZ / 16.0) << 4)); - reportForwardRenderObjectPosition((int)posX, (int)posY, (int)posZ); + EaglerDeferredPipeline instance = EaglerDeferredPipeline.instance; + if(instance != null && enableForwardRender) { + EaglerDeferredConfig cfg = instance.config; + if(!cfg.is_rendering_dynamicLights || !cfg.shaderPackInfo.DYNAMIC_LIGHTS) { + return; + } + float posX = (float)((x + TileEntityRendererDispatcher.staticPlayerX) - (MathHelper.floor_double(TileEntityRendererDispatcher.staticPlayerX / 16.0) << 4)); + float posY = (float)((y + TileEntityRendererDispatcher.staticPlayerY) - (MathHelper.floor_double(TileEntityRendererDispatcher.staticPlayerY / 16.0) << 4)); + float posZ = (float)((z + TileEntityRendererDispatcher.staticPlayerZ) - (MathHelper.floor_double(TileEntityRendererDispatcher.staticPlayerZ / 16.0) << 4)); + instance.loadLightSourceBucket((int)posX, (int)posY, (int)posZ); + } } public static final void setHDRTranslucentPassBlendFunc() { diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/EaglerDeferredPipeline.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/EaglerDeferredPipeline.java index ffd3961..6e0fa7e 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/EaglerDeferredPipeline.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/EaglerDeferredPipeline.java @@ -66,7 +66,6 @@ import static net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.ExtGLEnums.*; import java.io.DataInputStream; import java.io.IOException; -import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; import java.util.List; @@ -2049,6 +2048,8 @@ public class EaglerDeferredPipeline { } } + truncateOverflowingLightBuffers(); + DeferredStateManager.checkGLError("combineGBuffersAndIlluminate(): RENDER DYNAMIC LIGHTS"); } @@ -2305,6 +2306,19 @@ public class EaglerDeferredPipeline { return radius2 >= 0.0f; } + private void truncateOverflowingLightBuffers() { + for(int i = 0; i < this.lightSourceBuckets.length; ++i) { + List lst = this.lightSourceBuckets[i]; + int k = lst.size(); + if(k > MAX_LIGHTS_PER_CHUNK) { + lst.sort(comparatorLightRadius); + for(int l = MAX_LIGHTS_PER_CHUNK - 1; l >= MAX_LIGHTS_PER_CHUNK; --l) { + lst.remove(l); + } + } + } + } + public void updateLightSourceUBO() { if(currentLightSourceBucket == null) { currentBoundLightSourceBucket = null; @@ -2332,7 +2346,6 @@ public class EaglerDeferredPipeline { } } - private static final List tmpListLights = new ArrayList(32); private static final Comparator comparatorLightRadius = (l1, l2) -> { return l1.radius < l2.radius ? 1 : -1; }; @@ -2340,10 +2353,6 @@ public class EaglerDeferredPipeline { private void populateLightSourceUBOFromBucket(List lights) { int max = lights.size(); if(max > MAX_LIGHTS_PER_CHUNK) { - tmpListLights.clear(); - tmpListLights.addAll(lights); - lights = tmpListLights; - lights.sort(comparatorLightRadius); max = MAX_LIGHTS_PER_CHUNK; } chunkLightingDataCopyBuffer.clear(); diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ForwardAcceleratedEffectRenderer.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ForwardAcceleratedEffectRenderer.java index b272b48..5571027 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ForwardAcceleratedEffectRenderer.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ForwardAcceleratedEffectRenderer.java @@ -124,8 +124,13 @@ public class ForwardAcceleratedEffectRenderer extends AbstractAcceleratedEffectR shaderProgram.useProgram(); _wglUniform3f(shaderProgram.uniforms.u_texCoordSize2f_particleSize1f, texCoordWidth, texCoordHeight, 0.0625f); - _wglUniform4f(shaderProgram.uniforms.u_transformParam_1_2_3_4_f, f1, f5, f2, f3); - _wglUniform1f(shaderProgram.uniforms.u_transformParam_5_f, f4); + if(shaderProgram.uniforms.u_transformParam_1_2_5_f != null) { + _wglUniform3f(shaderProgram.uniforms.u_transformParam_1_2_5_f, f1, f5, f4); + _wglUniform2f(shaderProgram.uniforms.u_transformParam_3_4_f, f2, f3); + }else { + _wglUniform4f(shaderProgram.uniforms.u_transformParam_1_2_3_4_f, f1, f5, f2, f3); + _wglUniform1f(shaderProgram.uniforms.u_transformParam_5_f, f4); + } if(isMaterialNormalTexture) { _wglUniform2f(shaderProgram.uniforms.u_textureYScale2f, 0.5f, 0.5f); }else { diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferAcceleratedEffectRenderer.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferAcceleratedEffectRenderer.java index 691080f..45655d1 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferAcceleratedEffectRenderer.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferAcceleratedEffectRenderer.java @@ -124,8 +124,13 @@ public class GBufferAcceleratedEffectRenderer extends AbstractAcceleratedEffectR shaderProgram.useProgram(); _wglUniform3f(shaderProgram.uniforms.u_texCoordSize2f_particleSize1f, texCoordWidth, texCoordHeight, 0.0625f); - _wglUniform4f(shaderProgram.uniforms.u_transformParam_1_2_3_4_f, f1, f5, f2, f3); - _wglUniform1f(shaderProgram.uniforms.u_transformParam_5_f, f4); + if(shaderProgram.uniforms.u_transformParam_1_2_5_f != null) { + _wglUniform3f(shaderProgram.uniforms.u_transformParam_1_2_5_f, f1, f5, f4); + _wglUniform2f(shaderProgram.uniforms.u_transformParam_3_4_f, f2, f3); + }else { + _wglUniform4f(shaderProgram.uniforms.u_transformParam_1_2_3_4_f, f1, f5, f2, f3); + _wglUniform1f(shaderProgram.uniforms.u_transformParam_5_f, f4); + } if(isMaterialNormalTexture) { _wglUniform2f(shaderProgram.uniforms.u_textureYScale2f, 0.5f, 0.5f); }else { diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderAccelParticleForward.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderAccelParticleForward.java index ac2749a..a9f18bc 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderAccelParticleForward.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderAccelParticleForward.java @@ -69,6 +69,8 @@ public class PipelineShaderAccelParticleForward extends ShaderProgram sourceCache = new HashMap(); private static boolean isHighP = false; diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EaglerBitwisePackedTexture.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EaglerBitwisePackedTexture.java index 5d37d21..72bcf5f 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EaglerBitwisePackedTexture.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EaglerBitwisePackedTexture.java @@ -3,6 +3,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.texture; import java.io.IOException; import java.io.InputStream; +import net.lax1dude.eaglercraft.v1_8.IOUtils; import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; /** @@ -75,4 +76,15 @@ public class EaglerBitwisePackedTexture { return img; } + public static ImageData loadTextureSafe(InputStream is, int alpha) throws IOException { + ImageData bufferedimage; + try { + bufferedimage = loadTexture(is, alpha); + } finally { + IOUtils.closeQuietly(is); + } + + return bufferedimage; + } + } diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/PBRTextureMapUtils.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/PBRTextureMapUtils.java index 2e4b77d..e29938f 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/PBRTextureMapUtils.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/PBRTextureMapUtils.java @@ -73,7 +73,7 @@ public class PBRTextureMapUtils { }catch(Throwable t) { } try { - return EaglerBitwisePackedTexture.loadTexture(resMgr.getResource(new ResourceLocation("eagler:glsl/deferred/assets_pbr/" + fname + ".ebp")).getInputStream(), 255); + return EaglerBitwisePackedTexture.loadTextureSafe(resMgr.getResource(new ResourceLocation("eagler:glsl/deferred/assets_pbr/" + fname + ".ebp")).getInputStream(), 255); }catch(Throwable t) { // dead code because teavm t.toString(); diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightBucketLoader.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightBucketLoader.java new file mode 100644 index 0000000..8f06214 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightBucketLoader.java @@ -0,0 +1,286 @@ +package net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights; + +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.*; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; +import static net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.ExtGLEnums.*; + +import java.util.Comparator; +import java.util.List; + +import net.lax1dude.eaglercraft.v1_8.EagRuntime; +import net.lax1dude.eaglercraft.v1_8.internal.IBufferGL; +import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; +import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.ArrayListSerial; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.EaglerDeferredPipeline; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.ListSerial; +import net.minecraft.util.MathHelper; + +/** + * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class DynamicLightBucketLoader { + + public IBufferGL buffer_chunkLightingData; + private ByteBuffer chunkLightingDataCopyBuffer; + private boolean isChunkLightingEnabled = false; + public ListSerial currentBoundLightSourceBucket; + + public final ListSerial[] lightSourceBuckets; + public ListSerial currentLightSourceBucket; + + public static final int MAX_LIGHTS_PER_CHUNK = 12; + + private final int lightSourceBucketsWidth; + private final int lightSourceBucketsHeight; + + private double currentRenderX = 0.0; + private double currentRenderY = 0.0; + private double currentRenderZ = 0.0; + + public DynamicLightBucketLoader() { + this.lightSourceBucketsWidth = 5; + this.lightSourceBucketsHeight = 3; + int cnt = 5 * 3 * 5; + this.lightSourceBuckets = new ListSerial[cnt]; + } + + public void initialize() { + destroy(); + + buffer_chunkLightingData = _wglGenBuffers(); + EaglercraftGPU.bindGLUniformBuffer(buffer_chunkLightingData); + int lightingDataLength = 4 * MAX_LIGHTS_PER_CHUNK + 4; + chunkLightingDataCopyBuffer = EagRuntime.allocateByteBuffer(lightingDataLength << 2); + for(int i = 0; i < lightingDataLength; ++i) { + chunkLightingDataCopyBuffer.putInt(0); + } + chunkLightingDataCopyBuffer.flip(); + _wglBufferData(_GL_UNIFORM_BUFFER, chunkLightingDataCopyBuffer, GL_DYNAMIC_DRAW); + + for(int i = 0; i < this.lightSourceBuckets.length; ++i) { + this.lightSourceBuckets[i] = new ArrayListSerial(16); + } + } + + public void clearBuckets() { + for(int i = 0; i < this.lightSourceBuckets.length; ++i) { + this.lightSourceBuckets[i].clear(); + } + } + + public void loadLightSourceBucket(int relativeBlockX, int relativeBlockY, int relativeBlockZ) { + int hw = lightSourceBucketsWidth / 2; + int hh = lightSourceBucketsHeight / 2; + int bucketX = (relativeBlockX >> 4) + hw; + int bucketY = (relativeBlockY >> 4) + hh; + int bucketZ = (relativeBlockZ >> 4) + hw; + if(bucketX >= 0 && bucketY >= 0 && bucketZ >= 0 && bucketX < lightSourceBucketsWidth + && bucketY < lightSourceBucketsHeight && bucketZ < lightSourceBucketsWidth) { + currentLightSourceBucket = lightSourceBuckets[bucketY * lightSourceBucketsWidth * lightSourceBucketsWidth + + bucketZ * lightSourceBucketsWidth + bucketX]; + }else { + currentLightSourceBucket = null; + } + updateLightSourceUBO(); + } + + public ListSerial getLightSourceBucketRelativeChunkCoords(int cx, int cy, int cz) { + int hw = lightSourceBucketsWidth / 2; + int hh = lightSourceBucketsHeight / 2; + cx += hw; + cy += hh; + cz += hw; + if(cx < 0 || cx >= lightSourceBucketsWidth || cy < 0 || cy >= lightSourceBucketsHeight || cz < 0 + || cz >= lightSourceBucketsWidth) { + return null; + }else { + return lightSourceBuckets[cy * lightSourceBucketsWidth * lightSourceBucketsWidth + + cz * lightSourceBucketsWidth + cx]; + } + } + + public void addLightSourceToBucket(int cx, int cy, int cz, DynamicLightInstance dl) { + ListSerial lst = getLightSourceBucketRelativeChunkCoords(cx, cy, cz); + if(lst != null) { + lst.add(dl); + } + } + + public void bucketLightSource(float x, float y, float z, DynamicLightInstance dl) { + int bucketX = MathHelper.floor_float(x / 16.0f); + int bucketY = MathHelper.floor_float(y / 16.0f); + int bucketZ = MathHelper.floor_float(z / 16.0f); + addLightSourceToBucket(bucketX, bucketY, bucketZ, dl); + int minX = bucketX, maxX = bucketX; + int minY = bucketY, maxY = bucketY; + int minZ = bucketZ, maxZ = bucketZ; + float lightLocalX = x - (bucketX << 4); + float lightLocalY = y - (bucketY << 4); + float lightLocalZ = z - (bucketZ << 4); + float radius = dl.radius; + boolean outOfBounds = false; + if(lightLocalX - radius < 0.0f) { + minX -= 1; + outOfBounds = true; + addLightSourceToBucket(bucketX - 1, bucketY, bucketZ, dl); + } + if(lightLocalY - radius < 0.0f) { + minY -= 1; + outOfBounds = true; + addLightSourceToBucket(bucketX, bucketY - 1, bucketZ, dl); + } + if(lightLocalZ - radius < 0.0f) { + minZ -= 1; + outOfBounds = true; + addLightSourceToBucket(bucketX, bucketY, bucketZ - 1, dl); + } + if(lightLocalX + radius >= 16.0f) { + maxX += 1; + outOfBounds = true; + addLightSourceToBucket(bucketX + 1, bucketY, bucketZ, dl); + } + if(lightLocalY + radius >= 16.0f) { + maxY += 1; + outOfBounds = true; + addLightSourceToBucket(bucketX, bucketY + 1, bucketZ, dl); + } + if(lightLocalZ + radius >= 16.0f) { + maxZ += 1; + outOfBounds = true; + addLightSourceToBucket(bucketX, bucketY, bucketZ + 1, dl); + } + if(!outOfBounds) { + return; + } + radius *= radius; + for(int yy = minY; yy <= maxY; ++yy) { + for(int zz = minZ; zz <= maxZ; ++zz) { + for(int xx = minX; xx <= maxX; ++xx) { + if((xx == bucketX ? 1 : 0) + (yy == bucketY ? 1 : 0) + (zz == bucketZ ? 1 : 0) > 1) { + continue; + } + List lst = getLightSourceBucketRelativeChunkCoords(xx, yy, zz); + if(lst != null) { + int bucketBoundsX = xx << 4; + int bucketBoundsY = yy << 4; + int bucketBoundsZ = zz << 4; + if (EaglerDeferredPipeline.testAabSphere(bucketBoundsX, bucketBoundsY, bucketBoundsZ, + bucketBoundsX + 16, bucketBoundsY + 16, bucketBoundsZ + 16, x, y, z, radius)) { + lst.add(dl); + } + } + } + } + } + } + + public void truncateOverflowingBuffers() { + for(int i = 0; i < this.lightSourceBuckets.length; ++i) { + List lst = this.lightSourceBuckets[i]; + int k = lst.size(); + if(k > MAX_LIGHTS_PER_CHUNK) { + lst.sort(comparatorLightRadius); + for(int l = MAX_LIGHTS_PER_CHUNK - 1; l >= MAX_LIGHTS_PER_CHUNK; --l) { + lst.remove(l); + } + } + } + } + + public void updateLightSourceUBO() { + if(currentLightSourceBucket == null) { + currentBoundLightSourceBucket = null; + if(isChunkLightingEnabled) { + isChunkLightingEnabled = false; + EaglercraftGPU.bindGLUniformBuffer(buffer_chunkLightingData); + chunkLightingDataCopyBuffer.clear(); + chunkLightingDataCopyBuffer.putInt(0); + chunkLightingDataCopyBuffer.flip(); + _wglBufferSubData(_GL_UNIFORM_BUFFER, 0, chunkLightingDataCopyBuffer); + } + }else { + boolean isNew; + if(!isChunkLightingEnabled) { + isChunkLightingEnabled = true; + isNew = true; + }else { + isNew = currentLightSourceBucket != currentBoundLightSourceBucket; + } + currentBoundLightSourceBucket = currentLightSourceBucket; + if(isNew || currentBoundLightSourceBucket.eaglerCheck()) { + populateLightSourceUBOFromBucket(currentBoundLightSourceBucket); + currentBoundLightSourceBucket.eaglerResetCheck(); + } + } + } + + private static final Comparator comparatorLightRadius = (l1, l2) -> { + return l1.radius < l2.radius ? 1 : -1; + }; + + private void populateLightSourceUBOFromBucket(List lights) { + int max = lights.size(); + if(max > MAX_LIGHTS_PER_CHUNK) { + //tmpListLights.clear(); + //tmpListLights.addAll(lights); + //lights = tmpListLights; + //lights.sort(comparatorLightRadius); + max = MAX_LIGHTS_PER_CHUNK; + } + chunkLightingDataCopyBuffer.clear(); + chunkLightingDataCopyBuffer.putInt(max); + if(max > 0) { + chunkLightingDataCopyBuffer.putInt(0); //padding + chunkLightingDataCopyBuffer.putInt(0); //padding + chunkLightingDataCopyBuffer.putInt(0); //padding + for(int i = 0; i < max; ++i) { + DynamicLightInstance dl = lights.get(i); + chunkLightingDataCopyBuffer.putFloat((float)(dl.posX - currentRenderX)); + chunkLightingDataCopyBuffer.putFloat((float)(dl.posY - currentRenderY)); + chunkLightingDataCopyBuffer.putFloat((float)(dl.posZ - currentRenderZ)); + chunkLightingDataCopyBuffer.putFloat(dl.radius); + } + } + chunkLightingDataCopyBuffer.flip(); + EaglercraftGPU.bindGLUniformBuffer(buffer_chunkLightingData); + _wglBufferSubData(_GL_UNIFORM_BUFFER, 0, chunkLightingDataCopyBuffer); + } + + public void setRenderPos(double currentRenderX, double currentRenderY, double currentRenderZ) { + this.currentRenderX = currentRenderX; + this.currentRenderY = currentRenderY; + this.currentRenderZ = currentRenderZ; + } + + public void bindUniformBuffer(int index) { + EaglercraftGPU.bindGLUniformBuffer(buffer_chunkLightingData); + EaglercraftGPU.bindUniformBufferRange(index, buffer_chunkLightingData, 0, chunkLightingDataCopyBuffer.capacity()); + } + + public void destroy() { + if(chunkLightingDataCopyBuffer != null) { + EagRuntime.freeByteBuffer(chunkLightingDataCopyBuffer); + chunkLightingDataCopyBuffer = null; + } + if(buffer_chunkLightingData != null) { + _wglDeleteBuffers(buffer_chunkLightingData); + buffer_chunkLightingData = null; + } + for(int i = 0; i < this.lightSourceBuckets.length; ++i) { + this.lightSourceBuckets[i] = null; + } + } +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightInstance.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightInstance.java new file mode 100644 index 0000000..e6b388a --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightInstance.java @@ -0,0 +1,39 @@ +package net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights; + +/** + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +class DynamicLightInstance { + + double posX; + double posY; + double posZ; + float radius; + + public DynamicLightInstance() { + } + + public void updateLight(double posX, double posY, double posZ, float radius) { + this.posX = posX; + this.posY = posY; + this.posZ = posZ; + this.radius = radius; + } + + public float getRadiusInWorld() { + return radius; + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsAcceleratedEffectRenderer.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsAcceleratedEffectRenderer.java new file mode 100644 index 0000000..cc38016 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsAcceleratedEffectRenderer.java @@ -0,0 +1,230 @@ +package net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights; + +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.*; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; + +import net.lax1dude.eaglercraft.v1_8.EagRuntime; +import net.lax1dude.eaglercraft.v1_8.internal.IBufferArrayGL; +import net.lax1dude.eaglercraft.v1_8.internal.IBufferGL; +import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; +import net.lax1dude.eaglercraft.v1_8.internal.buffer.FloatBuffer; +import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; +import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.lax1dude.eaglercraft.v1_8.opengl.InstancedParticleRenderer; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.AbstractAcceleratedEffectRenderer; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.program.DynamicLightsAccelParticleShader; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.entity.Entity; +import net.minecraft.util.MathHelper; + +/** + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class DynamicLightsAcceleratedEffectRenderer extends AbstractAcceleratedEffectRenderer { + + private static final Logger logger = LogManager.getLogger("DynamicLightsAcceleratedEffectRenderer"); + + private ByteBuffer particleBuffer = null; + private int particleCount = 0; + private boolean particlesHasOverflowed = false; + + private static final int BYTES_PER_PARTICLE = 24; + private static final int PARTICLE_LIMIT = 5461; + + private DynamicLightsAccelParticleShader shaderProgram = null; + + private IBufferArrayGL vertexArray = null; + private IBufferGL vertexBuffer = null; + + private IBufferGL instancesBuffer = null; + + private float f1; + private float f2; + private float f3; + private float f4; + private float f5; + + public static boolean isMaterialNormalTexture = false; + + public void initialize() { + destroy(); + + if(DynamicLightsPipelineCompiler.matrixCopyBuffer == null) { + DynamicLightsPipelineCompiler.matrixCopyBuffer = GLAllocation.createDirectFloatBuffer(16); + } + + shaderProgram = DynamicLightsAccelParticleShader.compile(); + shaderProgram.loadUniforms(); + + particleBuffer = EagRuntime.allocateByteBuffer(PARTICLE_LIMIT * BYTES_PER_PARTICLE); + + vertexArray = _wglGenVertexArrays(); + vertexBuffer = _wglGenBuffers(); + instancesBuffer = _wglGenBuffers(); + + FloatBuffer verts = EagRuntime.allocateFloatBuffer(12); + verts.put(new float[] { + -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, + -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f + }); + verts.flip(); + + EaglercraftGPU.bindGLBufferArray(vertexArray); + + EaglercraftGPU.bindGLArrayBuffer(vertexBuffer); + _wglBufferData(GL_ARRAY_BUFFER, verts, GL_STATIC_DRAW); + + EagRuntime.freeFloatBuffer(verts); + + _wglEnableVertexAttribArray(0); + _wglVertexAttribPointer(0, 2, GL_FLOAT, false, 8, 0); + _wglVertexAttribDivisor(0, 0); + + EaglercraftGPU.bindGLArrayBuffer(instancesBuffer); + _wglBufferData(GL_ARRAY_BUFFER, particleBuffer.remaining(), GL_STREAM_DRAW); + + _wglEnableVertexAttribArray(1); + _wglVertexAttribPointer(1, 3, GL_FLOAT, false, 24, 0); + _wglVertexAttribDivisor(1, 1); + + _wglEnableVertexAttribArray(2); + _wglVertexAttribPointer(2, 2, GL_UNSIGNED_SHORT, false, 24, 12); + _wglVertexAttribDivisor(2, 1); + + _wglEnableVertexAttribArray(3); + _wglVertexAttribPointer(3, 2, GL_UNSIGNED_BYTE, true, 24, 16); + _wglVertexAttribDivisor(3, 1); + + _wglEnableVertexAttribArray(4); + _wglVertexAttribPointer(4, 2, GL_UNSIGNED_BYTE, false, 24, 18); + _wglVertexAttribDivisor(4, 1); + + _wglEnableVertexAttribArray(5); + _wglVertexAttribPointer(5, 4, GL_UNSIGNED_BYTE, true, 24, 20); + _wglVertexAttribDivisor(5, 1); + + } + + @Override + public void draw(float texCoordWidth, float texCoordHeight) { + if(particleCount == 0) { + return; + } + + shaderProgram.useProgram(); + + _wglUniform3f(shaderProgram.uniforms.u_texCoordSize2f_particleSize1f, texCoordWidth, texCoordHeight, 0.0625f); + _wglUniform3f(shaderProgram.uniforms.u_transformParam_1_2_5_f, f1, f5, f4); + _wglUniform2f(shaderProgram.uniforms.u_transformParam_3_4_f, f2, f3); + InstancedParticleRenderer.stupidColorSetHack(shaderProgram.uniforms.u_color4f); + + FloatBuffer buf = DynamicLightsPipelineCompiler.matrixCopyBuffer; + buf.clear(); + GlStateManager.getFloat(GL_MODELVIEW_MATRIX, buf); + buf.flip(); + _wglUniformMatrix4fv(shaderProgram.uniforms.u_modelViewMatrix4f, false, buf); + buf.clear(); + GlStateManager.getFloat(GL_PROJECTION_MATRIX, buf); + buf.flip(); + _wglUniformMatrix4fv(shaderProgram.uniforms.u_projectionMatrix4f, false, buf); + buf.clear(); + DynamicLightsStateManager.inverseViewMatrix.store(buf); + buf.flip(); + _wglUniformMatrix4fv(shaderProgram.uniforms.u_inverseViewMatrix4f, false, buf); + + EaglercraftGPU.bindGLArrayBuffer(instancesBuffer); + EaglercraftGPU.bindGLBufferArray(vertexArray); + + int p = particleBuffer.position(); + int l = particleBuffer.limit(); + + particleBuffer.flip(); + _wglBufferSubData(GL_ARRAY_BUFFER, 0, particleBuffer); + + particleBuffer.position(p); + particleBuffer.limit(l); + + _wglDrawArraysInstanced(GL_TRIANGLES, 0, 6, particleCount); + } + + @Override + public void begin(float partialTicks) { + this.partialTicks = partialTicks; + + particleBuffer.clear(); + particleCount = 0; + particlesHasOverflowed = false; + + Entity et = Minecraft.getMinecraft().getRenderViewEntity(); + if(et != null) { + f1 = MathHelper.cos(et.rotationYaw * 0.017453292F); + f2 = MathHelper.sin(et.rotationYaw * 0.017453292F); + f3 = -f2 * MathHelper.sin(et.rotationPitch * 0.017453292F); + f4 = f1 * MathHelper.sin(et.rotationPitch * 0.017453292F); + f5 = MathHelper.cos(et.rotationPitch * 0.017453292F); + } + } + + @Override + public void drawParticle(float posX, float posY, float posZ, int particleIndexX, int particleIndexY, + int lightMapData, int texSize, float particleSize, int rgba) { + if(particlesHasOverflowed) { + return; + } + if(particleCount >= PARTICLE_LIMIT) { + particlesHasOverflowed = true; + logger.error("Particle buffer has overflowed! Exceeded {} particles, no more particles will be rendered.", PARTICLE_LIMIT); + return; + } + ++particleCount; + ByteBuffer buf = particleBuffer; + buf.putFloat(posX); + buf.putFloat(posY); + buf.putFloat(posZ); + buf.putShort((short)particleIndexX); + buf.putShort((short)particleIndexY); + buf.put((byte)(lightMapData & 0xFF)); + buf.put((byte)((lightMapData >> 16) & 0xFF)); + buf.put((byte)(particleSize * 16.0f)); + buf.put((byte)texSize); + buf.putInt(rgba); + } + + public void destroy() { + if(particleBuffer != null) { + EagRuntime.freeByteBuffer(particleBuffer); + particleBuffer = null; + } + if(shaderProgram != null) { + shaderProgram.destroy(); + shaderProgram = null; + } + if(vertexArray != null) { + _wglDeleteVertexArrays(vertexArray); + vertexArray = null; + } + if(vertexBuffer != null) { + _wglDeleteBuffers(vertexBuffer); + vertexBuffer = null; + } + if(instancesBuffer != null) { + _wglDeleteBuffers(instancesBuffer); + instancesBuffer = null; + } + } +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsPipelineCompiler.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsPipelineCompiler.java new file mode 100644 index 0000000..bb501c0 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsPipelineCompiler.java @@ -0,0 +1,104 @@ +package net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights; + +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.*; + +import net.lax1dude.eaglercraft.v1_8.internal.IProgramGL; +import net.lax1dude.eaglercraft.v1_8.internal.buffer.FloatBuffer; +import net.lax1dude.eaglercraft.v1_8.opengl.FixedFunctionShader.FixedFunctionState; +import net.lax1dude.eaglercraft.v1_8.opengl.IExtPipelineCompiler; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.ShaderSource; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.program.DynamicLightsExtPipelineShader; +import net.minecraft.client.renderer.GLAllocation; + +/** + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class DynamicLightsPipelineCompiler implements IExtPipelineCompiler { + + static FloatBuffer matrixCopyBuffer = null; + + private static class PipelineInstance { + + private final int coreBits; + private final int extBits; + + private DynamicLightsExtPipelineShader shader; + + public PipelineInstance(int coreBits, int extBits) { + this.coreBits = coreBits; + this.extBits = extBits; + } + + } + + @Override + public String[] getShaderSource(int stateCoreBits, int stateExtBits, Object[] userPointer) { + if(matrixCopyBuffer == null) { + matrixCopyBuffer = GLAllocation.createDirectFloatBuffer(16); + } + userPointer[0] = new PipelineInstance(stateCoreBits, stateExtBits); + return new String[] { + ShaderSource.getSourceFor(ShaderSource.core_dynamiclights_vsh), + ShaderSource.getSourceFor(ShaderSource.core_dynamiclights_fsh) + }; + } + + @Override + public int getExtensionStatesCount() { + return 0; + } + + @Override + public int getCurrentExtensionStateBits(int stateCoreBits) { + return 0; + } + + @Override + public int getCoreStateMask(int stateExtBits) { + return 0xFFFFFFFF; + } + + @Override + public void initializeNewShader(IProgramGL compiledProg, int stateCoreBits, int stateExtBits, + Object[] userPointer) { + DynamicLightsExtPipelineShader newShader = new DynamicLightsExtPipelineShader(compiledProg, stateCoreBits); + ((PipelineInstance)userPointer[0]).shader = newShader; + newShader.loadUniforms(); + } + + @Override + public void updatePipeline(IProgramGL compiledProg, int stateCoreBits, int stateExtBits, Object[] userPointer) { + if((stateCoreBits & FixedFunctionState.STATE_ENABLE_LIGHTMAP) != 0) { + DynamicLightsExtPipelineShader.Uniforms uniforms = ((PipelineInstance)userPointer[0]).shader.uniforms; + if(uniforms.u_inverseViewMatrix4f != null) { + int serial = DynamicLightsStateManager.inverseViewMatrixSerial; + if(uniforms.inverseViewMatrixSerial != serial) { + uniforms.inverseViewMatrixSerial = serial; + FloatBuffer buf = matrixCopyBuffer; + buf.clear(); + DynamicLightsStateManager.inverseViewMatrix.store(buf); + buf.flip(); + _wglUniformMatrix4fv(uniforms.u_inverseViewMatrix4f, false, buf); + } + } + } + } + + @Override + public void destroyPipeline(IProgramGL shaderProgram, int stateCoreBits, int stateExtBits, Object[] userPointer) { + + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsStateManager.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsStateManager.java new file mode 100644 index 0000000..0495c29 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsStateManager.java @@ -0,0 +1,177 @@ +package net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import net.lax1dude.eaglercraft.v1_8.opengl.FixedFunctionPipeline; +import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.lax1dude.eaglercraft.v1_8.vector.Matrix4f; +import net.minecraft.client.particle.EffectRenderer; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.util.MathHelper; + +/** + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class DynamicLightsStateManager { + + static final DynamicLightsPipelineCompiler deferredExtPipeline = new DynamicLightsPipelineCompiler(); + private static List lightInstancePool = new ArrayList(); + private static int instancePoolIndex = 0; + private static int maxListLengthTracker = 0; + static final List lightRenderList = new LinkedList(); + static final Matrix4f inverseViewMatrix = new Matrix4f(); + static int inverseViewMatrixSerial = 0; + static DynamicLightBucketLoader bucketLoader = null; + static DynamicLightsAcceleratedEffectRenderer accelParticleRenderer = null; + static int lastTotal = 0; + private static long lastTick = 0l; + + public static final void enableDynamicLightsRender() { + if(bucketLoader == null) { + bucketLoader = new DynamicLightBucketLoader(); + bucketLoader.initialize(); + bucketLoader.bindUniformBuffer(0); + FixedFunctionPipeline.loadExtensionPipeline(deferredExtPipeline); + } + if(accelParticleRenderer == null) { + accelParticleRenderer = new DynamicLightsAcceleratedEffectRenderer(); + accelParticleRenderer.initialize(); + } + lightRenderList.clear(); + instancePoolIndex = 0; + maxListLengthTracker = 0; + } + + public static final void bindAcceleratedEffectRenderer(EffectRenderer renderer) { + renderer.acceleratedParticleRenderer = accelParticleRenderer; + } + + public static final void disableDynamicLightsRender(boolean unloadPipeline) { + if(bucketLoader != null) { + bucketLoader.destroy(); + bucketLoader = null; + if(unloadPipeline) { + FixedFunctionPipeline.loadExtensionPipeline(null); + } + } + if(accelParticleRenderer != null) { + accelParticleRenderer.destroy(); + accelParticleRenderer = null; + } + destroyAll(); + lightRenderList.clear(); + instancePoolIndex = 0; + maxListLengthTracker = 0; + } + + public static final boolean isDynamicLightsRender() { + return bucketLoader != null; + } + + public static final boolean isInDynamicLightsPass() { + return GlStateManager.isExtensionPipeline() && bucketLoader != null; + } + + public static final void reportForwardRenderObjectPosition(int centerX, int centerY, int centerZ) { + if(bucketLoader != null) { + bucketLoader.loadLightSourceBucket(centerX, centerY, centerZ); + } + } + + public static final void reportForwardRenderObjectPosition2(float x, float y, float z) { + if(bucketLoader != null) { + float posX = (float)((x + TileEntityRendererDispatcher.staticPlayerX) - (MathHelper.floor_double(TileEntityRendererDispatcher.staticPlayerX / 16.0) << 4)); + float posY = (float)((y + TileEntityRendererDispatcher.staticPlayerY) - (MathHelper.floor_double(TileEntityRendererDispatcher.staticPlayerY / 16.0) << 4)); + float posZ = (float)((z + TileEntityRendererDispatcher.staticPlayerZ) - (MathHelper.floor_double(TileEntityRendererDispatcher.staticPlayerZ / 16.0) << 4)); + bucketLoader.loadLightSourceBucket((int)posX, (int)posY, (int)posZ); + } + } + + public static final void renderDynamicLight(String lightName, double posX, double posY, double posZ, float radius) { + if(bucketLoader != null) { + DynamicLightInstance dl; + if(instancePoolIndex < lightInstancePool.size()) { + dl = lightInstancePool.get(instancePoolIndex); + }else { + lightInstancePool.add(dl = new DynamicLightInstance()); + } + ++instancePoolIndex; + dl.updateLight(posX, posY, posZ, radius); + lightRenderList.add(dl); + } + } + + public static final void clearRenderList() { + if(instancePoolIndex > maxListLengthTracker) { + maxListLengthTracker = instancePoolIndex; + } + lightRenderList.clear(); + instancePoolIndex = 0; + } + + public static final void commitLightSourceBuckets(double renderPosX, double renderPosY, double renderPosZ) { + lastTotal = lightRenderList.size(); + if(bucketLoader != null) { + bucketLoader.clearBuckets(); + int entityChunkOriginX = MathHelper.floor_double(renderPosX / 16.0) << 4; + int entityChunkOriginY = MathHelper.floor_double(renderPosY / 16.0) << 4; + int entityChunkOriginZ = MathHelper.floor_double(renderPosZ / 16.0) << 4; + Iterator itr = lightRenderList.iterator(); + while(itr.hasNext()) { + DynamicLightInstance dl = itr.next(); + float lightChunkPosX = (float)(dl.posX - entityChunkOriginX); + float lightChunkPosY = (float)(dl.posY - entityChunkOriginY); + float lightChunkPosZ = (float)(dl.posZ - entityChunkOriginZ); + bucketLoader.bucketLightSource(lightChunkPosX, lightChunkPosY, lightChunkPosZ, dl); + } + bucketLoader.setRenderPos(renderPosX, renderPosY, renderPosZ); + bucketLoader.truncateOverflowingBuffers(); + } + updateTimers(); + clearRenderList(); + } + + public static final void setupInverseViewMatrix() { + Matrix4f.invert(GlStateManager.getModelViewReference(), inverseViewMatrix); + inverseViewMatrixSerial = GlStateManager.getModelViewSerial(); + } + + private static final void updateTimers() { + long millis = System.currentTimeMillis(); + if(millis - lastTick > 5000l) { + lastTick = millis; + if(maxListLengthTracker < (lightInstancePool.size() >> 1)) { + List newPool = new ArrayList(Math.max(maxListLengthTracker, 16)); + for(int i = 0; i < maxListLengthTracker; ++i) { + newPool.add(lightInstancePool.get(i)); + } + lightInstancePool = newPool; + } + maxListLengthTracker = 0; + } + } + + public static final void destroyAll() { + lightInstancePool = new ArrayList(); + } + + public static String getF3String() { + return "DynamicLightsTotal: " + lastTotal; + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsAccelParticleShader.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsAccelParticleShader.java new file mode 100644 index 0000000..ff16f55 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsAccelParticleShader.java @@ -0,0 +1,91 @@ +package net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.program; + +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.*; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; + +import net.lax1dude.eaglercraft.v1_8.internal.IProgramGL; +import net.lax1dude.eaglercraft.v1_8.internal.IShaderGL; +import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.IProgramUniforms; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.ShaderCompiler; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.ShaderProgram; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.ShaderSource; + +/** + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class DynamicLightsAccelParticleShader extends ShaderProgram { + + public static DynamicLightsAccelParticleShader compile() { + IShaderGL accelParticleVSH = ShaderCompiler.compileShader("accel_particle_dynamiclights", GL_VERTEX_SHADER, + ShaderSource.accel_particle_dynamiclights_vsh); + IShaderGL accelParticleFSH = null; + try { + accelParticleFSH = ShaderCompiler.compileShader("accel_particle_dynamiclights", GL_FRAGMENT_SHADER, + ShaderSource.accel_particle_dynamiclights_fsh); + IProgramGL prog = ShaderCompiler.linkProgram("accel_particle_dynamiclights", accelParticleVSH, accelParticleFSH); + return new DynamicLightsAccelParticleShader(prog); + }finally { + if(accelParticleVSH != null) { + accelParticleVSH.free(); + } + if(accelParticleFSH != null) { + accelParticleFSH.free(); + } + } + } + + private DynamicLightsAccelParticleShader(IProgramGL prog) { + super(prog, new Uniforms()); + } + + public static class Uniforms implements IProgramUniforms { + + public IUniformGL u_color4f = null; + public IUniformGL u_modelViewMatrix4f = null; + public IUniformGL u_projectionMatrix4f = null; + public IUniformGL u_inverseViewMatrix4f = null; + public IUniformGL u_texCoordSize2f_particleSize1f = null; + public IUniformGL u_transformParam_1_2_5_f = null; + public IUniformGL u_transformParam_3_4_f = null; + + public int u_chunkLightingDataBlockBinding = -1; + + private Uniforms() { + } + + @Override + public void loadUniforms(IProgramGL prog) { + u_modelViewMatrix4f = _wglGetUniformLocation(prog, "u_modelViewMatrix4f"); + u_projectionMatrix4f = _wglGetUniformLocation(prog, "u_projectionMatrix4f"); + u_inverseViewMatrix4f = _wglGetUniformLocation(prog, "u_inverseViewMatrix4f"); + u_texCoordSize2f_particleSize1f = _wglGetUniformLocation(prog, "u_texCoordSize2f_particleSize1f"); + u_transformParam_1_2_5_f = _wglGetUniformLocation(prog, "u_transformParam_1_2_5_f"); + u_transformParam_3_4_f = _wglGetUniformLocation(prog, "u_transformParam_3_4_f"); + u_color4f = _wglGetUniformLocation(prog, "u_color4f"); + _wglUniform1i(_wglGetUniformLocation(prog, "u_inputTexture"), 0); + _wglUniform1i(_wglGetUniformLocation(prog, "u_lightmapTexture"), 1); + int blockIndex = _wglGetUniformBlockIndex(prog, "u_chunkLightingData"); + if(blockIndex != -1) { + _wglUniformBlockBinding(prog, blockIndex, 0); + u_chunkLightingDataBlockBinding = 0; + }else { + u_chunkLightingDataBlockBinding = -1; + } + } + + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsExtPipelineShader.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsExtPipelineShader.java new file mode 100644 index 0000000..2e23c32 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsExtPipelineShader.java @@ -0,0 +1,58 @@ +package net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.program; + +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.*; + +import net.lax1dude.eaglercraft.v1_8.internal.IProgramGL; +import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.IProgramUniforms; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.ShaderProgram; + +/** + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class DynamicLightsExtPipelineShader extends ShaderProgram { + + public final int coreState; + + public DynamicLightsExtPipelineShader(IProgramGL program, int coreState) { + super(program, new Uniforms()); + this.coreState = coreState; + } + + public static class Uniforms implements IProgramUniforms { + + public int u_chunkLightingDataBlockBinding = -1; + + public int inverseViewMatrixSerial = -1; + public IUniformGL u_inverseViewMatrix4f = null; + + Uniforms() { + } + + @Override + public void loadUniforms(IProgramGL prog) { + u_inverseViewMatrix4f = _wglGetUniformLocation(prog, "u_inverseViewMatrix4f"); + int blockIndex = _wglGetUniformBlockIndex(prog, "u_chunkLightingData"); + if(blockIndex != -1) { + _wglUniformBlockBinding(prog, blockIndex, 0); + u_chunkLightingDataBlockBinding = 0; + }else { + u_chunkLightingDataBlockBinding = -1; + } + } + + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerServerController.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerServerController.java index 6d57a8b..f9ce153 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerServerController.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerServerController.java @@ -72,6 +72,8 @@ public class SingleplayerServerController extends ModData implements ISaveFormat public static final ClientIntegratedServerNetworkManager localPlayerNetworkManager = new ClientIntegratedServerNetworkManager(PLAYER_CHANNEL); private static final List openLANChannels = new ArrayList(); + private static final IPCPacketManager packetManagerInstance = new IPCPacketManager(); + private SingleplayerServerController() { } @@ -249,7 +251,7 @@ public class SingleplayerServerController extends ModData implements ISaveFormat if(packetData.channel.equals(SingleplayerServerController.IPC_CHANNEL)) { IPCPacketBase ipc; try { - ipc = IPCPacketManager.IPCDeserialize(packetData.contents); + ipc = packetManagerInstance.IPCDeserialize(packetData.contents); }catch(IOException ex) { throw new RuntimeException("Failed to deserialize IPC packet", ex); } @@ -404,7 +406,7 @@ public class SingleplayerServerController extends ModData implements ISaveFormat public static void sendIPCPacket(IPCPacketBase ipc) { byte[] pkt; try { - pkt = IPCPacketManager.IPCSerialize(ipc); + pkt = packetManagerInstance.IPCSerialize(ipc); }catch (IOException ex) { throw new RuntimeException("Failed to serialize IPC packet", ex); } diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenBackupWorldSelection.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenBackupWorldSelection.java index 80051fc..5c3904c 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenBackupWorldSelection.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenBackupWorldSelection.java @@ -11,6 +11,7 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiYesNo; import net.minecraft.client.resources.I18n; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.storage.WorldInfo; /** @@ -38,6 +39,7 @@ public class GuiScreenBackupWorldSelection extends GuiScreen { private GuiButton worldConvert = null; private GuiButton worldBackup = null; private long worldSeed; + private boolean oldRNG; private NBTTagCompound levelDat; private String worldName; @@ -47,6 +49,7 @@ public class GuiScreenBackupWorldSelection extends GuiScreen { this.worldName = worldName; this.levelDat = levelDat; this.worldSeed = levelDat.getCompoundTag("Data").getLong("RandomSeed"); + this.oldRNG = levelDat.getCompoundTag("Data").getInteger("eaglerVersionSerial") == 0; } public void initGui() { @@ -62,7 +65,11 @@ public class GuiScreenBackupWorldSelection extends GuiScreen { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, I18n.format("singleplayer.backup.title", worldName), this.width / 2, this.height / 5 - 35, 16777215); - this.drawCenteredString(this.fontRendererObj, I18n.format("singleplayer.backup.seed") + " " + worldSeed, this.width / 2, this.height / 5 + 62, 0xAAAAFF); + if(oldRNG) { + this.drawCenteredString(this.fontRendererObj, I18n.format("singleplayer.backup.seed") + " " + worldSeed + " " + EnumChatFormatting.RED + "(pre-u34)", this.width / 2, this.height / 5 + 62, 0xAAAAFF); + }else { + this.drawCenteredString(this.fontRendererObj, I18n.format("singleplayer.backup.seed") + " " + worldSeed, this.width / 2, this.height / 5 + 62, 0xAAAAFF); + } int toolTipColor = 0xDDDDAA; if(worldRecreate.isMouseOver()) { @@ -85,8 +92,13 @@ public class GuiScreenBackupWorldSelection extends GuiScreen { this.mc.displayGuiScreen(selectWorld); }else if(par1GuiButton.id == 1) { GuiCreateWorld cw = new GuiCreateWorld(selectWorld); - cw.func_146318_a(new WorldInfo(this.levelDat.getCompoundTag("Data"))); - this.mc.displayGuiScreen(cw); + WorldInfo inf = new WorldInfo(this.levelDat.getCompoundTag("Data")); + cw.func_146318_a(inf); + if(inf.isOldEaglercraftRandom()) { + this.mc.displayGuiScreen(new GuiScreenOldSeedWarning(cw)); + }else { + this.mc.displayGuiScreen(cw); + } }else if(par1GuiButton.id == 2) { this.mc.displayGuiScreen(new GuiRenameWorld(this.selectWorld, this.worldName, true)); }else if(par1GuiButton.id == 3) { diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenOldSeedWarning.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenOldSeedWarning.java new file mode 100644 index 0000000..c13e4aa --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenOldSeedWarning.java @@ -0,0 +1,48 @@ +package net.lax1dude.eaglercraft.v1_8.sp.gui; + +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.resources.I18n; + +/** + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class GuiScreenOldSeedWarning extends GuiScreen { + + private final GuiScreen cont; + + public GuiScreenOldSeedWarning(GuiScreen cont) { + this.cont = cont; + } + + public void initGui() { + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 96, I18n.format("singleplayer.oldseedwarning.ok"))); + } + + public void drawScreen(int par1, int par2, float par3) { + this.drawDefaultBackground(); + this.drawCenteredString(fontRendererObj, I18n.format("singleplayer.oldseedwarning.title"), this.width / 2, 70, 11184810); + this.drawCenteredString(fontRendererObj, I18n.format("singleplayer.oldseedwarning.msg1"), this.width / 2, 90, 16777215); + this.drawCenteredString(fontRendererObj, I18n.format("singleplayer.oldseedwarning.msg2"), this.width / 2, 105, 16777215); + super.drawScreen(par1, par2, par3); + } + + protected void actionPerformed(GuiButton par1GuiButton) { + if(par1GuiButton.id == 0) { + this.mc.displayGuiScreen(cont); + } + } +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketManager.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketManager.java index f85176d..f501c67 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketManager.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketManager.java @@ -25,11 +25,11 @@ public class IPCPacketManager { public static final HashMap> mappings = new HashMap(); - public static final IPCInputStream IPC_INPUT_STREAM = new IPCInputStream(); - public static final IPCOutputStream IPC_OUTPUT_STREAM = new IPCOutputStream(); + public final IPCInputStream IPC_INPUT_STREAM = new IPCInputStream(); + public final IPCOutputStream IPC_OUTPUT_STREAM = new IPCOutputStream(); - public static final DataInputStream IPC_DATA_INPUT_STREAM = new DataInputStream(IPC_INPUT_STREAM); - public static final DataOutputStream IPC_DATA_OUTPUT_STREAM = new DataOutputStream(IPC_OUTPUT_STREAM); + public final DataInputStream IPC_DATA_INPUT_STREAM = new DataInputStream(IPC_INPUT_STREAM); + public final DataOutputStream IPC_DATA_OUTPUT_STREAM = new DataOutputStream(IPC_OUTPUT_STREAM); static { mappings.put(IPCPacket00StartServer.ID, IPCPacket00StartServer::new); @@ -60,7 +60,7 @@ public class IPCPacketManager { mappings.put(IPCPacketFFProcessKeepAlive.ID, IPCPacketFFProcessKeepAlive::new); } - public static byte[] IPCSerialize(IPCPacketBase pkt) throws IOException { + public byte[] IPCSerialize(IPCPacketBase pkt) throws IOException { IPC_OUTPUT_STREAM.feedBuffer(new byte[pkt.size() + 1], pkt.getClass().getSimpleName()); IPC_OUTPUT_STREAM.write(pkt.id()); @@ -69,7 +69,7 @@ public class IPCPacketManager { return IPC_OUTPUT_STREAM.returnBuffer(); } - public static IPCPacketBase IPCDeserialize(byte[] pkt) throws IOException { + public IPCPacketBase IPCDeserialize(byte[] pkt) throws IOException { IPC_INPUT_STREAM.feedBuffer(pkt); int i = IPC_INPUT_STREAM.read(); diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerIntegratedServerWorker.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerIntegratedServerWorker.java index 73fb100..20c96be 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerIntegratedServerWorker.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerIntegratedServerWorker.java @@ -60,6 +60,8 @@ public class EaglerIntegratedServerWorker { private static final Map openChannels = new HashMap(); + private static final IPCPacketManager packetManagerInstance = new IPCPacketManager(); + private static void processAsyncMessageQueue() { List pktList = ServerPlatformSingleplayer.recieveAllPacket(); if(pktList != null) { @@ -69,7 +71,7 @@ public class EaglerIntegratedServerWorker { if(packetData.channel.equals(SingleplayerServerController.IPC_CHANNEL)) { IPCPacketBase ipc; try { - ipc = IPCPacketManager.IPCDeserialize(packetData.contents); + ipc = packetManagerInstance.IPCDeserialize(packetData.contents); }catch(IOException ex) { throw new RuntimeException("Failed to deserialize IPC packet", ex); } @@ -422,7 +424,7 @@ public class EaglerIntegratedServerWorker { public static void sendIPCPacket(IPCPacketBase ipc) { byte[] pkt; try { - pkt = IPCPacketManager.IPCSerialize(ipc); + pkt = packetManagerInstance.IPCSerialize(ipc); }catch (IOException ex) { throw new RuntimeException("Failed to serialize IPC packet", ex); } diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterEPK.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterEPK.java index fc085c0..bf6ae1a 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterEPK.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterEPK.java @@ -12,6 +12,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.EaglerIntegratedServerWorker; import net.lax1dude.eaglercraft.v1_8.sp.server.EaglerSaveFormat; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.storage.WorldInfo; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. @@ -66,6 +67,9 @@ public class WorldConverterEPK { NBTTagCompound worldDatNBT = CompressedStreamTools.readCompressed(new EaglerInputStream(b)); worldDatNBT.getCompoundTag("Data").setString("LevelName", newName); worldDatNBT.getCompoundTag("Data").setLong("LastPlayed", System.currentTimeMillis()); + if(has152Format) { + WorldInfo.initEaglerVersion(worldDatNBT.getCompoundTag("Data")); + } EaglerOutputStream tmp = new EaglerOutputStream(); CompressedStreamTools.writeCompressed(worldDatNBT, tmp); b = tmp.toByteArray(); diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterMCA.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterMCA.java index 0c058fb..ce8e590 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterMCA.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterMCA.java @@ -20,6 +20,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.EaglerChunkLoader; import net.lax1dude.eaglercraft.v1_8.sp.server.EaglerIntegratedServerWorker; import net.lax1dude.eaglercraft.v1_8.sp.server.EaglerSaveFormat; import net.minecraft.world.chunk.storage.RegionFile; +import net.minecraft.world.storage.WorldInfo; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; @@ -98,9 +99,9 @@ public class WorldConverterMCA { gameRulesNBT.setString("colorCodes", s); gameRulesNBT.setString("doSignEditing", s); worldDatNBT.getCompoundTag("Data").setTag("GameRules", gameRulesNBT); - worldDatNBT.getCompoundTag("Data").setString("LevelName", newName); worldDatNBT.getCompoundTag("Data").setLong("LastPlayed", System.currentTimeMillis()); + WorldInfo.initEaglerVersion(worldDatNBT.getCompoundTag("Data")); EaglerOutputStream bo = new EaglerOutputStream(); CompressedStreamTools.writeCompressed(worldDatNBT, bo); b = bo.toByteArray(); diff --git a/sources/resources/assets/eagler/glsl/accel_particle.vsh b/sources/resources/assets/eagler/glsl/accel_particle.vsh index f4ab94e..59becc7 100644 --- a/sources/resources/assets/eagler/glsl/accel_particle.vsh +++ b/sources/resources/assets/eagler/glsl/accel_particle.vsh @@ -33,8 +33,8 @@ out vec4 v_color4f; uniform mat4 u_matrixTransform; uniform vec3 u_texCoordSize2f_particleSize1f; -uniform vec4 u_transformParam_1_2_3_4_f; -uniform float u_transformParam_5_f; +uniform vec3 u_transformParam_1_2_5_f; +uniform vec2 u_transformParam_3_4_f; uniform vec4 u_color4f; uniform sampler2D u_lightmapTexture; @@ -51,11 +51,8 @@ void main() { vec3 pos3f = p_position3f; vec2 spos2f = a_position2f * particleSize; - pos3f.x += u_transformParam_1_2_3_4_f.x * spos2f.x; - pos3f.x += u_transformParam_1_2_3_4_f.w * spos2f.y; - pos3f.y += u_transformParam_1_2_3_4_f.y * spos2f.y; - pos3f.z += u_transformParam_1_2_3_4_f.z * spos2f.x; - pos3f.z += u_transformParam_5_f * spos2f.y; + pos3f += u_transformParam_1_2_5_f * spos2f.xyy; + pos3f.zx += u_transformParam_3_4_f * spos2f; gl_Position = u_matrixTransform * vec4(pos3f, 1.0); } diff --git a/sources/resources/assets/eagler/glsl/core.fsh b/sources/resources/assets/eagler/glsl/core.fsh index eb9fcd1..5a01a79 100644 --- a/sources/resources/assets/eagler/glsl/core.fsh +++ b/sources/resources/assets/eagler/glsl/core.fsh @@ -170,7 +170,7 @@ void main() { #ifdef COMPILE_ENABLE_FOG vec3 fogPos = v_position4f.xyz / v_position4f.w; - float dist = sqrt(dot(fogPos, fogPos)); + float dist = length(fogPos); float fogDensity = u_fogParameters4f.y; float fogStart = u_fogParameters4f.z; float fogEnd = u_fogParameters4f.w; diff --git a/sources/resources/assets/eagler/glsl/deferred/accel_particle.vsh b/sources/resources/assets/eagler/glsl/deferred/accel_particle.vsh index fc68f1b..b750732 100644 --- a/sources/resources/assets/eagler/glsl/deferred/accel_particle.vsh +++ b/sources/resources/assets/eagler/glsl/deferred/accel_particle.vsh @@ -43,8 +43,8 @@ uniform mat4 u_matrixTransform; #endif uniform vec3 u_texCoordSize2f_particleSize1f; -uniform vec4 u_transformParam_1_2_3_4_f; -uniform float u_transformParam_5_f; +uniform vec3 u_transformParam_1_2_5_f; +uniform vec2 u_transformParam_3_4_f; void main() { v_color4f = p_color4f.bgra; @@ -59,11 +59,8 @@ void main() { vec3 pos3f = p_position3f; vec2 spos2f = a_position2f * particleSize; - pos3f.x += u_transformParam_1_2_3_4_f.x * spos2f.x; - pos3f.x += u_transformParam_1_2_3_4_f.w * spos2f.y; - pos3f.y += u_transformParam_1_2_3_4_f.y * spos2f.y; - pos3f.z += u_transformParam_1_2_3_4_f.z * spos2f.x; - pos3f.z += u_transformParam_5_f * spos2f.y; + pos3f += u_transformParam_1_2_5_f * spos2f.xyy; + pos3f.zx += u_transformParam_3_4_f * spos2f; #ifdef COMPILE_GBUFFER_VSH gl_Position = u_matrixTransform * vec4(pos3f, 1.0); diff --git a/sources/resources/assets/eagler/glsl/deferred/deferred_fog.fsh b/sources/resources/assets/eagler/glsl/deferred/deferred_fog.fsh index b179645..8130c07 100644 --- a/sources/resources/assets/eagler/glsl/deferred/deferred_fog.fsh +++ b/sources/resources/assets/eagler/glsl/deferred/deferred_fog.fsh @@ -69,7 +69,7 @@ void main() { fragPos4f.xyz /= fragPos4f.w; fragPos4f.w = 1.0; - float l = sqrt(dot(fragPos4f.xyz, fragPos4f.xyz)); + float l = length(fragPos4f.xyz); #ifdef COMPILE_FOG_LINEAR float f = (l - u_linearFogParam2f.x) / (u_linearFogParam2f.y - u_linearFogParam2f.x); #else diff --git a/sources/resources/assets/eagler/glsl/deferred/emissive_items.csv b/sources/resources/assets/eagler/glsl/deferred/emissive_items.csv index 6056c8b..f7814db 100644 --- a/sources/resources/assets/eagler/glsl/deferred/emissive_items.csv +++ b/sources/resources/assets/eagler/glsl/deferred/emissive_items.csv @@ -6,4 +6,5 @@ minecraft:torch,0,1.0000,0.5983,0.2655,10.0 minecraft:redstone_torch,0,1.0000,0.1578,0.0000,4.0 minecraft:sea_lantern,0,0.5530,0.6468,1.0000,10.0, minecraft:lava_bucket,0,1.0000,0.4461,0.1054,6.0, -minecraft:nether_star,0,0.5711,0.6611,1.0000,6.0 \ No newline at end of file +minecraft:nether_star,0,0.5711,0.6611,1.0000,6.0 +minecraft:ender_eye,0,0.1990,0.7750,0.4130,4.0 \ No newline at end of file diff --git a/sources/resources/assets/eagler/glsl/deferred/forward_core.fsh b/sources/resources/assets/eagler/glsl/deferred/forward_core.fsh index 65f98d0..4e6a375 100644 --- a/sources/resources/assets/eagler/glsl/deferred/forward_core.fsh +++ b/sources/resources/assets/eagler/glsl/deferred/forward_core.fsh @@ -431,7 +431,7 @@ void main() { float type = u_fogParameters4f.x - atmos; fogBlend4f = mix(u_fogColorLight4f, u_fogColorDark4f, lightmapCoords2f.g); - float l = sqrt(dot(v_position4f.xyz, v_position4f.xyz)); + float l = length(v_position4f.xyz); if(type == 1.0) { f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z); }else { diff --git a/sources/resources/assets/eagler/glsl/deferred/forward_glass_highlights.fsh b/sources/resources/assets/eagler/glsl/deferred/forward_glass_highlights.fsh index 72925fd..5f0100f 100644 --- a/sources/resources/assets/eagler/glsl/deferred/forward_glass_highlights.fsh +++ b/sources/resources/assets/eagler/glsl/deferred/forward_glass_highlights.fsh @@ -292,7 +292,7 @@ void main() { fogFade = mix(u_fogColorDark4f.a, u_fogColorLight4f.a, lightmapCoords2f.g); float f; - float l = sqrt(dot(v_position4f.xyz, v_position4f.xyz)); + float l = length(v_position4f.xyz); if(type == 1.0) { f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z); }else { diff --git a/sources/resources/assets/eagler/glsl/deferred/realistic_water_render.fsh b/sources/resources/assets/eagler/glsl/deferred/realistic_water_render.fsh index f5f9869..5413ff5 100644 --- a/sources/resources/assets/eagler/glsl/deferred/realistic_water_render.fsh +++ b/sources/resources/assets/eagler/glsl/deferred/realistic_water_render.fsh @@ -397,7 +397,7 @@ void main() { float type = u_fogParameters4f.x - atmos; fogBlend4f = mix(u_fogColorLight4f, u_fogColorDark4f, lightmapCoords2f.g); - float f, l = sqrt(dot(v_position4f.xyz, v_position4f.xyz)); + float f, l = length(v_position4f.xyz); if(type == 1.0) { f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z); }else { diff --git a/sources/resources/assets/eagler/glsl/deferred/shader_pack_info.json b/sources/resources/assets/eagler/glsl/deferred/shader_pack_info.json index 556d342..af5f511 100644 --- a/sources/resources/assets/eagler/glsl/deferred/shader_pack_info.json +++ b/sources/resources/assets/eagler/glsl/deferred/shader_pack_info.json @@ -1,7 +1,7 @@ { "name": "§eHigh Performance PBR", "desc": "Pack made from scratch specifically for this client, designed to give what I call the best balance between quality and performance possible in a browser but obviously that's just my opinion", - "vers": "1.1.0", + "vers": "1.2.1", "author": "lax1dude", "api_vers": 1, "features": [ diff --git a/sources/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.fsh b/sources/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.fsh new file mode 100644 index 0000000..c8289e8 --- /dev/null +++ b/sources/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.fsh @@ -0,0 +1,71 @@ +#line 2 + +/* + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision mediump float; +precision mediump sampler2D; + +in vec4 v_position4f; +in vec2 v_texCoord2f; +in vec4 v_color4f; +in vec2 v_lightmap2f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_inputTexture; +uniform sampler2D u_lightmapTexture; + +uniform mat4 u_inverseViewMatrix4f; + +layout(std140) uniform u_chunkLightingData { + mediump int u_dynamicLightCount1i; + mediump int _paddingA_; + mediump int _paddingB_; + mediump int _paddingC_; + mediump vec4 u_dynamicLightArray[12]; +}; + +void main() { + vec4 color = texture(u_inputTexture, v_texCoord2f) * v_color4f; + + if(color.a < 0.004) { + discard; + } + + vec4 light; + float blockLight = v_lightmap2f.x; + float diffuse = 0.0; + float len; + if(u_dynamicLightCount1i > 0) { + vec4 worldPosition4f = u_inverseViewMatrix4f * v_position4f; + worldPosition4f.xyz /= worldPosition4f.w; + vec3 normalVector3f = normalize(u_inverseViewMatrix4f[2].xyz); + int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; + for(int i = 0; i < safeLightCount; ++i) { + light = u_dynamicLightArray[i]; + light.xyz = light.xyz - worldPosition4f.xyz; + len = length(light.xyz); + diffuse += max(dot(light.xyz / len, normalVector3f) * 0.8 + 0.2, 0.0) * max(light.w - len, 0.0); + } + blockLight = min(blockLight + diffuse * 0.066667, 1.0); + } + + color *= texture(u_lightmapTexture, vec2(blockLight, v_lightmap2f.y)); + + output4f = color; +} diff --git a/sources/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.vsh b/sources/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.vsh new file mode 100644 index 0000000..202bd15 --- /dev/null +++ b/sources/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.vsh @@ -0,0 +1,61 @@ +#line 2 + +/* + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision mediump sampler2D; + +layout(location = 0) in vec2 a_position2f; + +layout(location = 1) in vec3 p_position3f; +layout(location = 2) in vec2 p_texCoords2i; +layout(location = 3) in vec2 p_lightMap2f; +layout(location = 4) in vec2 p_particleSize_texCoordsSize_2i; +layout(location = 5) in vec4 p_color4f; + +out vec4 v_position4f; +out vec2 v_texCoord2f; +out vec4 v_color4f; +out vec2 v_lightmap2f; + +uniform mat4 u_modelViewMatrix4f; +uniform mat4 u_projectionMatrix4f; +uniform vec3 u_texCoordSize2f_particleSize1f; +uniform vec3 u_transformParam_1_2_5_f; +uniform vec2 u_transformParam_3_4_f; +uniform vec4 u_color4f; + +void main() { + v_color4f = u_color4f * p_color4f.bgra; + v_lightmap2f = p_lightMap2f; + + vec2 tex2f = a_position2f * 0.5 + 0.5; + tex2f.y = 1.0 - tex2f.y; + tex2f = p_texCoords2i + tex2f * p_particleSize_texCoordsSize_2i.y; + v_texCoord2f = tex2f * u_texCoordSize2f_particleSize1f.xy; + + float particleSize = u_texCoordSize2f_particleSize1f.z * p_particleSize_texCoordsSize_2i.x; + + vec3 pos3f = p_position3f; + vec2 spos2f = a_position2f * particleSize; + pos3f += u_transformParam_1_2_5_f * spos2f.xyy; + pos3f.zx += u_transformParam_3_4_f * spos2f; + + v_position4f = u_modelViewMatrix4f * vec4(pos3f, 1.0); + gl_Position = u_projectionMatrix4f * v_position4f; +} diff --git a/sources/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.fsh b/sources/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.fsh new file mode 100644 index 0000000..aa3bc51 --- /dev/null +++ b/sources/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.fsh @@ -0,0 +1,218 @@ +#line 2 + +/* + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +in vec4 v_position4f; + +#ifdef COMPILE_TEXTURE_ATTRIB +in vec2 v_texture2f; +#endif + +uniform vec4 u_color4f; + +#ifdef COMPILE_BLEND_ADD +uniform vec4 u_colorBlendSrc4f; +uniform vec4 u_colorBlendAdd4f; +#endif + +#ifdef COMPILE_COLOR_ATTRIB +in vec4 v_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB +in vec3 v_normal3f; +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 v_lightmap2f; +#endif + +#ifdef COMPILE_ENABLE_TEXTURE2D +uniform sampler2D u_samplerTexture; +#if !defined(COMPILE_TEXTURE_ATTRIB) && !defined(COMPILE_ENABLE_TEX_GEN) +uniform vec2 u_textureCoords01; +#endif +#endif + +#ifdef COMPILE_ENABLE_LIGHTMAP +uniform sampler2D u_samplerLightmap; +#ifndef COMPILE_LIGHTMAP_ATTRIB +uniform vec2 u_textureCoords02; +#endif +#endif + +#ifdef COMPILE_ENABLE_ALPHA_TEST +uniform float u_alphaTestRef1f; +#endif + +#ifdef COMPILE_ENABLE_MC_LIGHTING +uniform int u_lightsEnabled1i; +uniform vec4 u_lightsDirections4fv[4]; +uniform vec3 u_lightsAmbient3f; +#endif + +#ifndef COMPILE_NORMAL_ATTRIB +uniform vec3 u_uniformNormal3f; +#endif + +#ifdef COMPILE_ENABLE_FOG +uniform vec4 u_fogParameters4f; +uniform vec4 u_fogColor4f; +#endif + +#ifdef COMPILE_ENABLE_TEX_GEN +in vec3 v_objectPosition3f; +uniform ivec4 u_texGenPlane4i; +uniform vec4 u_texGenS4f; +uniform vec4 u_texGenT4f; +uniform vec4 u_texGenR4f; +uniform vec4 u_texGenQ4f; +uniform mat4 u_textureMat4f01; +#endif + +#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX +uniform vec2 u_textureAnisotropicFix; +#endif + +uniform mat4 u_inverseViewMatrix4f; + +layout(std140) uniform u_chunkLightingData { + mediump int u_dynamicLightCount1i; + mediump int _paddingA_; + mediump int _paddingB_; + mediump int _paddingC_; + mediump vec4 u_dynamicLightArray[12]; +}; + +layout(location = 0) out vec4 output4f; + +void main() { + +#ifdef COMPILE_COLOR_ATTRIB + vec4 color = v_color4f * u_color4f; +#else + vec4 color = u_color4f; +#endif + +#ifdef COMPILE_ENABLE_TEX_GEN + vec4 texGenVector; + + vec4 texGenPosSrc[2]; + texGenPosSrc[0] = vec4(v_objectPosition3f, 1.0); + texGenPosSrc[1] = v_position4f; + + texGenVector.x = dot(texGenPosSrc[u_texGenPlane4i.x], u_texGenS4f); + texGenVector.y = dot(texGenPosSrc[u_texGenPlane4i.y], u_texGenT4f); + texGenVector.z = dot(texGenPosSrc[u_texGenPlane4i.z], u_texGenR4f); + texGenVector.w = dot(texGenPosSrc[u_texGenPlane4i.w], u_texGenQ4f); + + texGenVector = u_textureMat4f01 * texGenVector; + color *= texture(u_samplerTexture, texGenVector.xy / texGenVector.w); + +#ifdef COMPILE_ENABLE_ALPHA_TEST + if(color.a < u_alphaTestRef1f) discard; +#endif + +#else + +#ifdef COMPILE_ENABLE_TEXTURE2D +#ifdef COMPILE_TEXTURE_ATTRIB +#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX + // d3d11 doesn't support GL_NEAREST upscaling with anisotropic + // filtering enabled, so it needs this stupid fix to 'work' + vec2 uv = floor(v_texture2f * u_textureAnisotropicFix) + 0.5; + color *= texture(u_samplerTexture, uv / u_textureAnisotropicFix); +#else + color *= texture(u_samplerTexture, v_texture2f); +#endif +#else + color *= texture(u_samplerTexture, u_textureCoords01); +#endif +#endif + +#ifdef COMPILE_NORMAL_ATTRIB + vec3 normal = normalize(v_normal3f); +#else + vec3 normal = u_uniformNormal3f; +#endif + +#ifdef COMPILE_ENABLE_LIGHTMAP + float diffuse = 0.0; +#ifdef COMPILE_LIGHTMAP_ATTRIB + float blockLight = v_lightmap2f.x; +#else + float blockLight = u_textureCoords02.x; +#endif + float len; + vec4 light; + if(u_dynamicLightCount1i > 0) { + vec4 worldPosition4f = u_inverseViewMatrix4f * v_position4f; + worldPosition4f.xyz /= worldPosition4f.w; + vec3 normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normal); + int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; + for(int i = 0; i < safeLightCount; ++i) { + light = u_dynamicLightArray[i]; + light.xyz = light.xyz - worldPosition4f.xyz; + len = length(light.xyz); + diffuse += max(dot(light.xyz / len, normalVector3f) * 0.8 + 0.2, 0.0) * max(light.w - len, 0.0); + } + blockLight = min(blockLight + diffuse * 0.066667, 1.0); + } +#ifdef COMPILE_LIGHTMAP_ATTRIB + color *= texture(u_samplerLightmap, vec2(blockLight, v_lightmap2f.y)); +#else + color *= texture(u_samplerLightmap, vec2(blockLight, u_textureCoords02.y)); +#endif +#endif + +#ifdef COMPILE_BLEND_ADD + color = color * u_colorBlendSrc4f + u_colorBlendAdd4f; +#endif + +#ifdef COMPILE_ENABLE_ALPHA_TEST + if(color.a < u_alphaTestRef1f) discard; +#endif + +#endif + +#ifdef COMPILE_ENABLE_MC_LIGHTING +#ifndef COMPILE_ENABLE_LIGHTMAP + vec4 light; + float diffuse = 0.0; +#else + diffuse = 0.0; +#endif + for(int i = 0; i < u_lightsEnabled1i; ++i) { + light = u_lightsDirections4fv[i]; + diffuse += max(dot(light.xyz, normal), 0.0) * light.w; + } + color.rgb *= min(u_lightsAmbient3f + vec3(diffuse), 1.0); +#endif + +#ifdef COMPILE_ENABLE_FOG + vec3 fogPos = v_position4f.xyz / v_position4f.w; + float dist = sqrt(dot(fogPos, fogPos)); + float fogDensity = u_fogParameters4f.y; + float fogStart = u_fogParameters4f.z; + float fogEnd = u_fogParameters4f.w; + float f = u_fogParameters4f.x > 0.0 ? 1.0 - exp(-fogDensity * dist) : + (dist - fogStart) / (fogEnd - fogStart); + color.rgb = mix(color.rgb, u_fogColor4f.rgb, clamp(f, 0.0, 1.0) * u_fogColor4f.a); +#endif + + output4f = color; +} diff --git a/sources/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.vsh b/sources/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.vsh new file mode 100644 index 0000000..023b204 --- /dev/null +++ b/sources/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.vsh @@ -0,0 +1,80 @@ +#line 2 + +/* + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +in vec3 a_position3f; + +out vec4 v_position4f; + +#ifdef COMPILE_ENABLE_TEX_GEN +out vec3 v_objectPosition3f; +#endif + +#ifdef COMPILE_TEXTURE_ATTRIB +in vec2 a_texture2f; +out vec2 v_texture2f; +uniform mat4 u_textureMat4f01; +#endif + +#ifdef COMPILE_COLOR_ATTRIB +in vec4 a_color4f; +out vec4 v_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB +in vec4 a_normal4f; +out vec3 v_normal3f; +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 a_lightmap2f; +out vec2 v_lightmap2f; +uniform mat4 u_textureMat4f02; +#endif + +uniform mat4 u_modelviewMat4f; +uniform mat4 u_projectionMat4f; + +#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) + +void main() { +#ifdef COMPILE_ENABLE_TEX_GEN + v_objectPosition3f = a_position3f; +#endif + + v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0); + +#ifdef COMPILE_TEXTURE_ATTRIB + vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0); + v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z; +#endif + +#ifdef COMPILE_COLOR_ATTRIB + v_color4f = a_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB + v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB + vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); + v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; +#endif + + gl_Position = u_projectionMat4f * v_position4f; +} diff --git a/sources/resources/assets/eagler/mesh/readme.txt b/sources/resources/assets/eagler/mesh/readme.txt new file mode 100644 index 0000000..6c8b2bd --- /dev/null +++ b/sources/resources/assets/eagler/mesh/readme.txt @@ -0,0 +1,9 @@ +THESE ARE NOT DOOM/GMOD MODELS! + +The FNAW skins are stored in a proprietary format created by lax1dude. + +The format is a container for raw OpenGL vertex buffer and index buffer data intended to be copied directly into the GPU's memory, along with a small amount of metadata. + +Data is rendered in GL_TRIANGLES mode using glDrawElements. + +See "net/lax1dude/eaglercraft/v1_8/opengl/EaglerMeshLoader.java" and "net/lax1dude/eaglercraft/v1_8/opengl/HighPolyMesh.java" for more details. \ No newline at end of file diff --git a/sources/resources/assets/minecraft/textures/gui/title/background/enable_blur.txt b/sources/resources/assets/minecraft/textures/gui/title/background/enable_blur.txt new file mode 100644 index 0000000..3fd898d --- /dev/null +++ b/sources/resources/assets/minecraft/textures/gui/title/background/enable_blur.txt @@ -0,0 +1,2 @@ +# Change to 0 to disable blur +enable_blur=1 \ No newline at end of file diff --git a/sources/resources/plugin_download.zip b/sources/resources/plugin_download.zip index 5975d288b59d84e0ef0b14079ec328a4614c02c6..391713ad5a88d04b309a1bc081e358269962ab53 100644 GIT binary patch delta 211684 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⪼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

gcVGJmW+oO62jjkSJ2 z(+RFCLYQM2vv*+spd34D<7C%2_}CgyxYB)tV%$X`@Vnf7-5)?%>GGANctTUX;p)H> zD8+jVR@*LXMiwZNd*T{-;`9W>*1Pl-<6qNtqVzEp-sYvVPs-(ypZD%AvmhlFO$h>h9XVjU;0%UPhgzKRrY%=szqzU=yd;w5#3Fvyu4} zW{4tuV?NgT;F$|o6v)ZLFSwI?fIQyrOQzR>K9@uP0bS8)N|h&qY9<(gp9Sd}yKK1x ztQC+Cd)~j{&H*QRr>nK9OM~mbOse;1A7`ZJhkuc20oQ91oIEQOM+E#` zFgd?Za3-nf>iADyD7O1Au~Le9-d-GyU#hJ(M3f@dgL{ z&VBoipzN7*{C}20c;#C9;az&?ZpXg)oq!o)j+$|Dy6spr&x*p-=|I4Mu6pVo(Hk74 z=F~P|W;D~wLPy%Bc>0GkF{?1q6Pfni@q>87-NFO>!n~Y~HEvcY_|68`D`VLZ?}enL z;hiwH_!nVnjjoY(-9mlq${J~@%O9oHCfepmmVU~Vg@0DV=5^dqZOfa@I7yY=4-(s8 zg;u9ulBSd6IFvCugTEi$u>HPpcNix{_Wkl-f4-$GItgj_Md+RLU++ltTl(%4&J#h0 z*xi5r)uuf?AOb$PXZdDD@c^hH98V!5wrB9xm}kbJcvSLev2J;RWg>-lNlX!6nk z<*>YGgMUNMHamKyKgWqaU+0wa)I8SpmnkBAhYU%R%RO^0NY??yX$xRw*&~!6XP=6qh#~B;)jNCJ%5PPYolY6OG#m^D9 zP1ajE5ny0`jich+r~A|RFKMk$yAMc8CAJxJq`5K{z|DfNR{Blh*I4suOir#psGP|7 zW4%Y7V z1b@jF2xm$xR3uB6N7Gh>Kda7bs)*g|z>VznMoJZFFqm&fW6!+IsCVBmP6Kr=rR-!u zP6uUlfU0|7wJbKh#B5`<5!;9zCY_soXYeQcA5=Bx<%ySHSFigF^%hqyO!gRZh90^! z^Tg9OyVl)op9%PJqgDalr}qmM#**f@9Dfu)+R7Bg-PV6yI7`Z&HL6qanJl9MMz9FZ z;IkKV2@N;wtXJ)Lx}sa`+;d$~T3(ZfD(bzcIjSkChNO|5Fv1)GJS(L_CwN?=^*6Mk zh>@g2x%9XX(TqVX6e36Zv?2}PvUrF`O~E3H{MqY_y5$fEnKRS6W#Zj7 zuO1VA;Y>hLo|H&J4&T6=B0*Pi3}a;$Y*EbL2k#i zO}=sW5x>Lm7VGElJt0@AbN#1p(0{2Q>7h&W1?)Alv;-IY-xF8zon!uWYiBxe?RYD^ zUp6edHb&vb+)~c90@Cf)4c8N-Mdn157NJ&-5oHTlm~!|7nYj_7Cc?bza@9d()q95| zIYHlnJ4UUTJWtPRmF5#_+h}%w^z|d{p*~+Dazsm%2V`eEP%5*?v__Wn_03*&&M5dGwE7OGs}dW7(8L~+*PD~8x(0$Yi{#hEPa4IjO-}a?2^VdgiM%`qUzP5CBD-jvE

to*y;c;vP{i}1Q*eWIWc_v{zUEF9 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

lDAgO&dHmmcBngtP{)N z<*qX02T%qEx#E0zpY~9TjWof+D67H~p61PDNB1l|a$g@v0{03>4E33f=WfvtGMsrw`7jfme3BIm zR@Bl%i+BnDm>n*JPb+TsWX3~C>8Kc`A_l>((Mx=64KZVUE3%pFTB&-C+~n9kPY}e* znU8;GX3WItd;Ff$RP7mJ@Mm3VEa{DVXTuV)3fwi*Y@gN-Li)Uz_qc6F#7|;c?35pz z0TvEWWFqmFxRzw5(K76}zExozk}sYdrPX(Ae8>oA^FT7~*1S+;Tt1aa-j!8YjJ1Gy z1|1x2v7fn1G-gyJ{hS=Fhuja?7W}j-d5FhgG?Ewl^=pr02~a~M$T{`ME_bT2nZ+$Hb~vWqa}9l8tDH9{%iT~ME|el!h?XI zfRO#)O`?DM;J@@%_Aai@ZYHi)4)!h#uAZ*{U7^bTprN+yKNZsCkHGPuo{qr(z55^O CB$iSD delta 211253 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 diff --git a/sources/resources/plugin_version.json b/sources/resources/plugin_version.json index 38fd724..fc71aa9 100644 --- a/sources/resources/plugin_version.json +++ b/sources/resources/plugin_version.json @@ -1 +1 @@ -{"pluginName":"EaglercraftXBungee","pluginVersion":"1.2.3","pluginButton":"Download \"EaglerXBungee-1.2.3.jar\"","pluginFilename":"EaglerXBungee.zip"} \ No newline at end of file +{"pluginName":"EaglercraftXBungee","pluginVersion":"1.2.6","pluginButton":"Download \"EaglerXBungee-1.2.6.jar\"","pluginFilename":"EaglerXBungee.zip"} \ No newline at end of file diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java index 073fa6a..14da64d 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java @@ -19,7 +19,6 @@ import org.teavm.jso.dom.html.HTMLCanvasElement; import org.teavm.jso.dom.html.HTMLDocument; import org.teavm.jso.dom.html.HTMLInputElement; import org.teavm.jso.typedarrays.ArrayBuffer; -import org.teavm.jso.typedarrays.Uint8Array; import net.lax1dude.eaglercraft.v1_8.Base64; import net.lax1dude.eaglercraft.v1_8.EagRuntime; @@ -200,7 +199,7 @@ public class PlatformApplication { if(name == null) { fileChooserResultObject = null; }else { - fileChooserResultObject = new FileChooserResult(name, TeaVMUtils.wrapUnsignedByteArray(Uint8Array.create(buffer))); + fileChooserResultObject = new FileChooserResult(name, TeaVMUtils.wrapByteArrayBuffer(buffer)); } } @@ -296,7 +295,7 @@ public class PlatformApplication { private static final native void downloadBytesImpl(String str, ArrayBuffer buf); public static final void downloadFileWithName(String str, byte[] dat) { - downloadBytesImpl(str, TeaVMUtils.unwrapUnsignedByteArray(dat).getBuffer()); + downloadBytesImpl(str, TeaVMUtils.unwrapArrayBuffer(dat)); } public static void showDebugConsole() { diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java index 0e2d783..678d99d 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java @@ -16,7 +16,6 @@ import org.teavm.jso.dom.html.HTMLCanvasElement; import org.teavm.jso.dom.html.HTMLImageElement; import org.teavm.jso.dom.xml.Document; import org.teavm.jso.typedarrays.ArrayBuffer; -import org.teavm.jso.typedarrays.Int32Array; import org.teavm.jso.typedarrays.Uint8ClampedArray; import net.lax1dude.eaglercraft.v1_8.EaglerInputStream; @@ -54,7 +53,7 @@ public class PlatformAssets { ArrayBuffer file = PlatformRuntime.downloadRemoteURI( ClientMain.configLocalesFolder + "/" + path.substring(22)); if(file != null && file.getByteLength() > 0) { - data = TeaVMUtils.arrayBufferToBytes(file); + data = TeaVMUtils.wrapByteArrayBuffer(file); assets.put(path, data); return data; }else { @@ -79,12 +78,15 @@ public class PlatformAssets { private static CanvasRenderingContext2D imageLoadContext = null; public static ImageData loadImageFile(byte[] data) { - return loadImageFile(TeaVMUtils.unwrapUnsignedByteArray(data).getBuffer()); + return loadImageFile(TeaVMUtils.unwrapArrayBuffer(data)); } @JSBody(params = { }, script = "return { willReadFrequently: true };") public static native JSObject youEagler(); + @JSBody(params = { "ctx" }, script = "ctx.imageSmoothingEnabled = false;") + private static native void disableImageSmoothing(CanvasRenderingContext2D ctx); + @Async private static native ImageData loadImageFile(ArrayBuffer data); @@ -105,6 +107,7 @@ public class PlatformAssets { } if(imageLoadContext == null) { imageLoadContext = (CanvasRenderingContext2D) imageLoadCanvas.getContext("2d", youEagler()); + disableImageSmoothing(imageLoadContext); } imageLoadContext.clearRect(0, 0, toLoad.getWidth(), toLoad.getHeight()); imageLoadContext.drawImage(toLoad, 0, 0, toLoad.getWidth(), toLoad.getHeight()); @@ -116,7 +119,7 @@ public class PlatformAssets { ret.complete(null); return; } - ret.complete(new ImageData(pxlsDat.getWidth(), pxlsDat.getHeight(), TeaVMUtils.wrapIntArray(Int32Array.create(pxls.getBuffer())), true)); + ret.complete(new ImageData(pxlsDat.getWidth(), pxlsDat.getHeight(), TeaVMUtils.wrapIntArrayBuffer(pxls.getBuffer()), true)); } }); toLoad.addEventListener("error", new EventListener() { diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java index c110a3a..4fcedd5 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java @@ -214,7 +214,7 @@ public class PlatformAudio { if(buffer == null) { byte[] file = PlatformAssets.getResourceBytes(filename); if(file == null) return null; - buffer = new BrowserAudioResource(decodeAudioAsync(TeaVMUtils.unwrapUnsignedByteArray(file).getBuffer(), filename)); + buffer = new BrowserAudioResource(decodeAudioAsync(TeaVMUtils.unwrapArrayBuffer(file), filename)); if(holdInCache) { synchronized(soundCache) { soundCache.put(filename, buffer); diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformNetworking.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformNetworking.java index 17c32c3..3dccd21 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformNetworking.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformNetworking.java @@ -12,7 +12,6 @@ import org.teavm.jso.dom.events.Event; import org.teavm.jso.dom.events.EventListener; import org.teavm.jso.dom.events.MessageEvent; import org.teavm.jso.typedarrays.ArrayBuffer; -import org.teavm.jso.typedarrays.Uint8Array; import org.teavm.jso.websocket.WebSocket; import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMServerQuery; @@ -120,7 +119,7 @@ public class PlatformNetworking { } }else { synchronized(readPackets) { - readPackets.add(TeaVMUtils.wrapUnsignedByteArray(Uint8Array.create(evt.getDataAsArray()))); + readPackets.add(TeaVMUtils.wrapByteArrayBuffer(evt.getDataAsArray())); } } } @@ -181,7 +180,7 @@ public class PlatformNetworking { public static void writePlayPacket(byte[] pkt) { if(sock != null && !sockIsConnecting) { - nativeBinarySend(sock, TeaVMUtils.unwrapUnsignedByteArray(pkt).getBuffer()); + nativeBinarySend(sock, TeaVMUtils.unwrapArrayBuffer(pkt)); } } diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java index ea661f0..3254e18 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java @@ -29,7 +29,6 @@ import org.teavm.jso.dom.html.HTMLCanvasElement; import org.teavm.jso.dom.html.HTMLDocument; import org.teavm.jso.dom.html.HTMLElement; import org.teavm.jso.typedarrays.ArrayBuffer; -import org.teavm.jso.typedarrays.Uint8Array; import org.teavm.jso.webaudio.MediaStream; import org.teavm.jso.webgl.WebGLFramebuffer; @@ -311,7 +310,7 @@ public class PlatformRuntime { } public static void downloadRemoteURIByteArray(String assetPackageURI, final Consumer cb) { - downloadRemoteURI(assetPackageURI, arr -> cb.accept(TeaVMUtils.wrapUnsignedByteArray(Uint8Array.create(arr)))); + downloadRemoteURI(assetPackageURI, arr -> cb.accept(TeaVMUtils.wrapByteArrayBuffer(arr))); } public static void downloadRemoteURI(String assetPackageURI, final Consumer cb) { diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformUpdateSvc.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformUpdateSvc.java index 7a1dcc0..c1b7a0e 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformUpdateSvc.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformUpdateSvc.java @@ -2,7 +2,6 @@ package net.lax1dude.eaglercraft.v1_8.internal; import org.teavm.jso.JSBody; import org.teavm.jso.typedarrays.ArrayBuffer; -import org.teavm.jso.typedarrays.Uint8Array; import net.lax1dude.eaglercraft.v1_8.EagRuntime; import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUpdateThread; @@ -62,7 +61,7 @@ public class PlatformUpdateSvc { logger.error("Failed to download client bundle or signature URL!"); return null; } - return TeaVMUtils.wrapUnsignedByteArray(Uint8Array.create(buf)); + return TeaVMUtils.wrapByteArrayBuffer(buf); } public static byte[] getClientSignatureData() { diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java index 234fc68..06624f1 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java @@ -24,7 +24,6 @@ import org.teavm.jso.dom.events.Event; import org.teavm.jso.dom.events.EventListener; import org.teavm.jso.json.JSON; import org.teavm.jso.typedarrays.ArrayBuffer; -import org.teavm.jso.typedarrays.Uint8Array; import org.teavm.jso.websocket.WebSocket; import com.google.common.collect.LinkedListMultimap; @@ -211,7 +210,7 @@ public class PlatformWebRTC { TeaVMUtils.addEventListener(dataChannel, "message", (EventListener) evt -> { synchronized(clientLANPacketBuffer) { - clientLANPacketBuffer.add(TeaVMUtils.wrapUnsignedByteArray(Uint8Array.create(getData(evt)))); + clientLANPacketBuffer.add(TeaVMUtils.wrapByteArrayBuffer(getData(evt))); } }); @@ -326,7 +325,7 @@ public class PlatformWebRTC { serverLANEventBuffer.put(peerId, new LANPeerEvent.LANPeerDataChannelEvent(peerId)); } TeaVMUtils.addEventListener(dataChannel, "message", (EventListener) evt2 -> { - LANPeerEvent.LANPeerPacketEvent e = new LANPeerEvent.LANPeerPacketEvent(peerId, TeaVMUtils.wrapUnsignedByteArray(Uint8Array.create(getData(evt2)))); + LANPeerEvent.LANPeerPacketEvent e = new LANPeerEvent.LANPeerPacketEvent(peerId, TeaVMUtils.wrapByteArrayBuffer(getData(evt2))); synchronized(serverLANEventBuffer) { serverLANEventBuffer.put(peerId, e); } @@ -538,10 +537,6 @@ public class PlatformWebRTC { @JSBody(params = { "obj" }, script = "return typeof obj === \"string\";") private static native boolean isString(JSObject obj); - private static ArrayBuffer convertToArrayBuffer(byte[] arr) { - return TeaVMUtils.unwrapUnsignedByteArray(arr).getBuffer(); - } - private static final Map relayQueryLimited = new HashMap<>(); private static final Map relayQueryBlocked = new HashMap<>(); @@ -587,7 +582,7 @@ public class PlatformWebRTC { sock.onOpen(evt -> { try { connectionPingStart = System.currentTimeMillis(); - PlatformNetworking.nativeBinarySend(sock, convertToArrayBuffer( + PlatformNetworking.nativeBinarySend(sock, TeaVMUtils.unwrapArrayBuffer( IPacket.writePacket(new IPacket00Handshake(0x03, RelayManager.preferredRelayVersion, "")) )); } catch (IOException e) { @@ -599,7 +594,7 @@ public class PlatformWebRTC { sock.onMessage(evt -> { if(evt.getData() != null && !isString(evt.getData())) { hasRecievedAnyData = true; - byte[] arr = TeaVMUtils.wrapUnsignedByteArray(Uint8Array.create(evt.getDataAsArray())); + byte[] arr = TeaVMUtils.wrapByteArrayBuffer(evt.getDataAsArray()); if(arr.length == 2 && arr[0] == (byte)0xFC) { long millis = System.currentTimeMillis(); if(arr[1] == (byte)0x00 || arr[1] == (byte)0x01) { @@ -842,7 +837,7 @@ public class PlatformWebRTC { sock = s; sock.onOpen(evt -> { try { - PlatformNetworking.nativeBinarySend(sock, convertToArrayBuffer( + PlatformNetworking.nativeBinarySend(sock, TeaVMUtils.unwrapArrayBuffer( IPacket.writePacket(new IPacket00Handshake(0x04, RelayManager.preferredRelayVersion, "")) )); } catch (IOException e) { @@ -855,7 +850,7 @@ public class PlatformWebRTC { sock.onMessage(evt -> { if(evt.getData() != null && !isString(evt.getData())) { hasRecievedAnyData = true; - byte[] arr = TeaVMUtils.wrapUnsignedByteArray(Uint8Array.create(evt.getDataAsArray())); + byte[] arr = TeaVMUtils.wrapByteArrayBuffer(evt.getDataAsArray()); if(arr.length == 2 && arr[0] == (byte)0xFC) { long millis = System.currentTimeMillis(); if(arr[1] == (byte)0x00 || arr[1] == (byte)0x01) { @@ -1065,7 +1060,7 @@ public class PlatformWebRTC { if(evt.getData() != null && !isString(evt.getData())) { hasRecievedAnyData = true; try { - IPacket pkt = IPacket.readPacket(new DataInputStream(new EaglerInputStream(TeaVMUtils.wrapUnsignedByteArray(Uint8Array.create(evt.getDataAsArray()))))); + IPacket pkt = IPacket.readPacket(new DataInputStream(new EaglerInputStream(TeaVMUtils.wrapByteArrayBuffer(evt.getDataAsArray())))); if(pkt instanceof IPacket70SpecialUpdate) { IPacket70SpecialUpdate ipkt = (IPacket70SpecialUpdate)pkt; if(ipkt.operation == IPacket70SpecialUpdate.OPERATION_UPDATE_CERTIFICATE) { @@ -1136,7 +1131,7 @@ public class PlatformWebRTC { @Override public void writePacket(IPacket pkt) { try { - PlatformNetworking.nativeBinarySend(sock, convertToArrayBuffer(IPacket.writePacket(pkt))); + PlatformNetworking.nativeBinarySend(sock, TeaVMUtils.unwrapArrayBuffer(IPacket.writePacket(pkt))); } catch (Throwable e) { logger.error("Relay connection error: {}", e.toString()); EagRuntime.debugPrintStackTrace(e); @@ -1283,7 +1278,7 @@ public class PlatformWebRTC { // todo: ArrayBuffer version public static void clientLANSendPacket(byte[] pkt) { - rtcLANClient.sendPacketToServer(convertToArrayBuffer(pkt)); + rtcLANClient.sendPacketToServer(TeaVMUtils.unwrapArrayBuffer(pkt)); } public static byte[] clientLANReadPacket() { @@ -1409,7 +1404,7 @@ public class PlatformWebRTC { } public static void serverLANWritePacket(String peer, byte[] data) { - rtcLANServer.sendPacketToRemoteClient(peer, TeaVMUtils.unwrapUnsignedByteArray(data).getBuffer()); + rtcLANServer.sendPacketToRemoteClient(peer, TeaVMUtils.unwrapArrayBuffer(data)); } public static void serverLANCreatePeer(String peer) { diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapter.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapter.java index a679dde..7078eae 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapter.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapter.java @@ -60,6 +60,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { private boolean allowFNAWSkins = true; private String localStorageNamespace = "_eaglercraftX"; private final TeaVMClientConfigAdapterHooks hooks = new TeaVMClientConfigAdapterHooks(); + private boolean enableMinceraft = true; public void loadNative(JSObject jsObject) { integratedServerOpts = new JSONObject(); @@ -81,6 +82,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { allowVoiceClient = eaglercraftXOpts.getAllowVoiceClient(true); allowFNAWSkins = !demoMode && eaglercraftXOpts.getAllowFNAWSkins(true); localStorageNamespace = eaglercraftXOpts.getLocalStorageNamespace(EaglercraftVersion.localStorageNamespace); + enableMinceraft = eaglercraftXOpts.getEnableMinceraft(true); JSEaglercraftXOptsHooks hooksObj = eaglercraftXOpts.getHooks(); if(hooksObj != null) { hooks.loadHooks(hooksObj); @@ -175,6 +177,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { allowVoiceClient = eaglercraftOpts.optBoolean("allowVoiceClient", true); allowFNAWSkins = eaglercraftOpts.optBoolean("allowFNAWSkins", true); localStorageNamespace = eaglercraftOpts.optString("localStorageNamespace", EaglercraftVersion.localStorageNamespace); + enableMinceraft = eaglercraftOpts.optBoolean("enableMinceraft", true); JSONArray serversArray = eaglercraftOpts.optJSONArray("servers"); if(serversArray != null) { for(int i = 0, l = serversArray.length(); i < l; ++i) { @@ -332,6 +335,11 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { return localStorageNamespace; } + @Override + public boolean isEnableMinceraft() { + return enableMinceraft; + } + @Override public IClientConfigAdapterHooks getHooks() { return hooks; @@ -357,6 +365,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { jsonObject.put("allowVoiceClient", allowVoiceClient); jsonObject.put("allowFNAWSkins", allowFNAWSkins); jsonObject.put("localStorageNamespace", localStorageNamespace); + jsonObject.put("enableMinceraft", enableMinceraft); JSONArray serversArr = new JSONArray(); for(int i = 0, l = defaultServers.size(); i < l; ++i) { DefaultServer srv = defaultServers.get(i); diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMServerQuery.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMServerQuery.java index adeb7ab..550078c 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMServerQuery.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMServerQuery.java @@ -10,7 +10,6 @@ import org.teavm.jso.dom.events.Event; import org.teavm.jso.dom.events.EventListener; import org.teavm.jso.dom.events.MessageEvent; import org.teavm.jso.typedarrays.ArrayBuffer; -import org.teavm.jso.typedarrays.Uint8Array; import org.teavm.jso.websocket.WebSocket; import net.lax1dude.eaglercraft.v1_8.internal.EnumServerRateLimit; @@ -116,7 +115,7 @@ public class TeaVMServerQuery implements IServerQuery { } }else { synchronized(queryResponsesBytes) { - queryResponsesBytes.add(TeaVMUtils.wrapUnsignedByteArray(Uint8Array.create(evt.getDataAsArray()))); + queryResponsesBytes.add(TeaVMUtils.wrapByteArrayBuffer(evt.getDataAsArray())); } } } @@ -143,7 +142,7 @@ public class TeaVMServerQuery implements IServerQuery { @Override public void send(byte[] bytes) { if(open) { - nativeBinarySend(sock, TeaVMUtils.unwrapByteArray(bytes).getBuffer()); + nativeBinarySend(sock, TeaVMUtils.unwrapArrayBuffer(bytes)); } } diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUpdateThread.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUpdateThread.java index 1d071a5..862d068 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUpdateThread.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUpdateThread.java @@ -16,7 +16,6 @@ import org.teavm.jso.browser.Window; import org.teavm.jso.dom.events.Event; import org.teavm.jso.dom.events.EventListener; import org.teavm.jso.typedarrays.ArrayBuffer; -import org.teavm.jso.typedarrays.Uint8Array; import com.google.common.collect.ListMultimap; @@ -220,7 +219,7 @@ public class TeaVMUpdateThread implements Runnable { if(xhr.getStatus() == 200) { ArrayBuffer data = (ArrayBuffer)xhr.getResponse(); if(data.getByteLength() == updateCert.bundleDataLength) { - cb.complete(TeaVMUtils.wrapUnsignedByteArray(Uint8Array.create(data))); + cb.complete(TeaVMUtils.wrapByteArrayBuffer(data)); }else { logger.error("Unexpected response length {} (expect: {}) from URL: {}", xhr.getStatus(), xhr.getStatusText(), url); cb.complete(null); diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUtils.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUtils.java index 0a8edf7..a135a90 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUtils.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUtils.java @@ -51,89 +51,199 @@ public class TeaVMUtils { } public static Int8Array unwrapByteArray(byte[] buf) { + if(buf == null) { + return null; + } return Int8Array.create(((TeaVMArrayObject)(Object)buf).getData().getBuffer()); } public static ArrayBuffer unwrapArrayBuffer(byte[] buf) { + if(buf == null) { + return null; + } return ((TeaVMArrayObject)(Object)buf).getData().getBuffer(); } public static ArrayBufferView unwrapArrayBufferView(byte[] buf) { + if(buf == null) { + return null; + } return ((TeaVMArrayObject)(Object)buf).getData(); } - @JSBody(params = { "buf" }, script = "return $rt_createByteArray(buf.buffer)") + @JSBody(params = { "buf" }, script = "return $rt_createByteArray(buf)") private static native JSObject wrapByteArray0(JSObject buf); public static byte[] wrapByteArray(Int8Array buf) { + if(buf == null) { + return null; + } + return (byte[])(Object)wrapByteArray0(buf.getBuffer()); + } + + public static byte[] wrapByteArrayBuffer(ArrayBuffer buf) { + if(buf == null) { + return null; + } return (byte[])(Object)wrapByteArray0(buf); } + public static byte[] wrapByteArrayBufferView(ArrayBufferView buf) { + if(buf == null) { + return null; + } + return (byte[])(Object)wrapByteArray0(buf.getBuffer()); + } + public static Uint8Array unwrapUnsignedByteArray(byte[] buf) { + if(buf == null) { + return null; + } return Uint8Array.create(((TeaVMArrayObject)(Object)buf).getData().getBuffer()); } public static byte[] wrapUnsignedByteArray(Uint8Array buf) { - return (byte[])(Object)wrapByteArray0(buf); + if(buf == null) { + return null; + } + return (byte[])(Object)wrapByteArray0(buf.getBuffer()); } public static Int32Array unwrapIntArray(int[] buf) { + if(buf == null) { + return null; + } return Int32Array.create(((TeaVMArrayObject)(Object)buf).getData().getBuffer()); } public static ArrayBuffer unwrapArrayBuffer(int[] buf) { + if(buf == null) { + return null; + } return ((TeaVMArrayObject)(Object)buf).getData().getBuffer(); } public static ArrayBufferView unwrapArrayBufferView(int[] buf) { + if(buf == null) { + return null; + } return ((TeaVMArrayObject)(Object)buf).getData(); } - @JSBody(params = { "buf" }, script = "return $rt_createIntArray(buf.buffer)") + @JSBody(params = { "buf" }, script = "return $rt_createIntArray(buf)") private static native JSObject wrapIntArray0(JSObject buf); public static int[] wrapIntArray(Int32Array buf) { + if(buf == null) { + return null; + } + return (int[])(Object)wrapIntArray0(buf.getBuffer()); + } + + public static int[] wrapIntArrayBuffer(ArrayBuffer buf) { + if(buf == null) { + return null; + } return (int[])(Object)wrapIntArray0(buf); } + public static int[] wrapIntArrayBufferView(ArrayBufferView buf) { + if(buf == null) { + return null; + } + return (int[])(Object)wrapIntArray0(buf.getBuffer()); + } + public static Float32Array unwrapFloatArray(float[] buf) { + if(buf == null) { + return null; + } return Float32Array.create(((TeaVMArrayObject)(Object)buf).getData().getBuffer()); } public static ArrayBuffer unwrapArrayBuffer(float[] buf) { + if(buf == null) { + return null; + } return ((TeaVMArrayObject)(Object)buf).getData().getBuffer(); } public static ArrayBufferView unwrapArrayBufferView(float[] buf) { + if(buf == null) { + return null; + } return ((TeaVMArrayObject)(Object)buf).getData(); } - @JSBody(params = { "buf" }, script = "return $rt_createFloatArray(buf.buffer)") + @JSBody(params = { "buf" }, script = "return $rt_createFloatArray(buf)") private static native JSObject wrapFloatArray0(JSObject buf); public static float[] wrapFloatArray(Float32Array buf) { + if(buf == null) { + return null; + } + return (float[])(Object)wrapFloatArray0(buf.getBuffer()); + } + + public static float[] wrapFloatArrayBuffer(ArrayBuffer buf) { + if(buf == null) { + return null; + } return (float[])(Object)wrapFloatArray0(buf); } + public static float[] wrapFloatArrayBufferView(ArrayBufferView buf) { + if(buf == null) { + return null; + } + return (float[])(Object)wrapFloatArray0(buf.getBuffer()); + } + public static Int16Array unwrapShortArray(short[] buf) { + if(buf == null) { + return null; + } return Int16Array.create(((TeaVMArrayObject)(Object)buf).getData().getBuffer()); } public static ArrayBuffer unwrapArrayBuffer(short[] buf) { + if(buf == null) { + return null; + } return ((TeaVMArrayObject)(Object)buf).getData().getBuffer(); } public static ArrayBufferView unwrapArrayBufferView(short[] buf) { + if(buf == null) { + return null; + } return ((TeaVMArrayObject)(Object)buf).getData(); } - @JSBody(params = { "buf" }, script = "return $rt_createShortArray(buf.buffer)") + @JSBody(params = { "buf" }, script = "return $rt_createShortArray(buf)") private static native JSObject wrapShortArray0(JSObject buf); public static short[] wrapShortArray(Int16Array buf) { + if(buf == null) { + return null; + } + return (short[])(Object)wrapShortArray0(buf.getBuffer()); + } + + public static short[] wrapShortArrayBuffer(ArrayBuffer buf) { + if(buf == null) { + return null; + } return (short[])(Object)wrapShortArray0(buf); } + public static short[] wrapShortArrayBuffer(ArrayBufferView buf) { + if(buf == null) { + return null; + } + return (short[])(Object)wrapShortArray0(buf.getBuffer()); + } + @Async public static native void sleepSetTimeout(int millis); @@ -141,14 +251,6 @@ public class TeaVMUtils { Window.setTimeout(() -> cb.complete(null), millis); } - public static final byte[] arrayBufferToBytes(ArrayBuffer buf) { - if(buf == null) { - return null; - } - - return wrapUnsignedByteArray(Uint8Array.create(buf)); - } - public static String tryResolveClassesSource() { String str = dumpJSStackTrace(); String[] frames = EagUtils.splitPattern.split(str); diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRoot.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRoot.java index a2be173..467f9c6 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRoot.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRoot.java @@ -93,4 +93,7 @@ public abstract class JSEaglercraftXOptsRoot implements JSObject { @JSBody(params = { "def" }, script = "return (typeof this.localStorageNamespace === \"string\") ? this.localStorageNamespace : def;") public native String getLocalStorageNamespace(String defaultValue); + @JSBody(params = { "def" }, script = "return (typeof this.enableMinceraft === \"boolean\") ? this.enableMinceraft : def;") + public native boolean getEnableMinceraft(boolean defaultValue); + } diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/sp/internal/ClientPlatformSingleplayer.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/sp/internal/ClientPlatformSingleplayer.java index d05992b..afbb05d 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/sp/internal/ClientPlatformSingleplayer.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/sp/internal/ClientPlatformSingleplayer.java @@ -10,7 +10,6 @@ import org.teavm.jso.JSObject; import org.teavm.jso.dom.events.ErrorEvent; import org.teavm.jso.dom.events.EventListener; import org.teavm.jso.typedarrays.ArrayBuffer; -import org.teavm.jso.typedarrays.Uint8Array; import org.teavm.jso.workers.Worker; import net.lax1dude.eaglercraft.v1_8.internal.IPCPacketData; @@ -92,7 +91,7 @@ public class ClientPlatformSingleplayer { } synchronized(messageQueue) { - messageQueue.add(new IPCPacketData(channel, TeaVMUtils.wrapUnsignedByteArray(Uint8Array.create(buf)))); + messageQueue.add(new IPCPacketData(channel, TeaVMUtils.wrapByteArrayBuffer(buf))); } } @@ -196,10 +195,7 @@ public class ClientPlatformSingleplayer { } public static void sendPacket(IPCPacketData packet) { - ArrayBuffer arb = ArrayBuffer.create(packet.contents.length); - Uint8Array ar = Uint8Array.create(arb); - ar.set(packet.contents); - sendPacketTeaVM(packet.channel, TeaVMUtils.unwrapUnsignedByteArray(packet.contents).getBuffer()); + sendPacketTeaVM(packet.channel, TeaVMUtils.unwrapArrayBuffer(packet.contents)); } public static void sendPacketTeaVM(String channel, ArrayBuffer packet) { diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/ServerPlatformSingleplayer.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/ServerPlatformSingleplayer.java index 08fc37a..52dab9f 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/ServerPlatformSingleplayer.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/ServerPlatformSingleplayer.java @@ -8,7 +8,6 @@ import org.teavm.jso.JSBody; import org.teavm.jso.JSFunctor; import org.teavm.jso.JSObject; import org.teavm.jso.typedarrays.ArrayBuffer; -import org.teavm.jso.typedarrays.Uint8Array; import net.lax1dude.eaglercraft.v1_8.internal.IClientConfigAdapter; import net.lax1dude.eaglercraft.v1_8.internal.IPCPacketData; @@ -58,7 +57,7 @@ public class ServerPlatformSingleplayer { } synchronized(messageQueue) { - messageQueue.add(new IPCPacketData(channel, TeaVMUtils.wrapUnsignedByteArray(Uint8Array.create(buf)))); + messageQueue.add(new IPCPacketData(channel, TeaVMUtils.wrapByteArrayBuffer(buf))); } } @@ -79,10 +78,7 @@ public class ServerPlatformSingleplayer { public static native void sendPacketTeaVM(String channel, ArrayBuffer arr); public static void sendPacket(IPCPacketData packet) { - ArrayBuffer arb = ArrayBuffer.create(packet.contents.length); - Uint8Array ar = Uint8Array.create(arb); - ar.set(packet.contents); - sendPacketTeaVM(packet.channel, arb); + sendPacketTeaVM(packet.channel, TeaVMUtils.unwrapArrayBuffer(packet.contents)); } public static List recieveAllPacket() {