From 64ac208565255173f4177951fe57d9bd6d81690d Mon Sep 17 00:00:00 2001
From: lax1dude
Date: Sat, 16 Nov 2024 21:47:35 -0800
Subject: [PATCH] Update #42 - Fixed several WebRTC bugs and other issues
---
README.md | 2 +-
client_version | 2 +-
.../minecraft/block/BlockFarmland.edit.java | 6 +-
.../net/minecraft/block/BlockGrass.edit.java | 23 +-
.../net/minecraft/block/BlockLeaves.edit.java | 6 +-
.../net/minecraft/block/BlockVine.edit.java | 24 +-
.../net/minecraft/client/Minecraft.edit.java | 7 +-
.../client/audio/GuardianSound.edit.java | 2 +
.../minecraft/client/audio/ISound.edit.java | 10 +
.../audio/MovingSoundMinecart.edit.java | 4 +
.../audio/MovingSoundMinecartRiding.edit.java | 2 +
.../client/audio/PositionedSound.edit.java | 4 +
.../audio/PositionedSoundRecord.edit.java | 22 ++
.../client/multiplayer/WorldClient.edit.java | 6 +-
.../renderer/BlockModelRenderer.edit.java | 2 +-
.../client/renderer/EntityRenderer.edit.java | 6 +-
.../client/renderer/RenderGlobal.edit.java | 6 +-
.../renderer/chunk/RenderChunk.edit.java | 2 +-
.../command/CommandCompare.edit.java | 5 +
.../net/minecraft/entity/Entity.edit.java | 6 +-
.../entity/monster/EntityZombie.edit.java | 4 +
.../net/minecraft/item/ItemMap.edit.java | 4 +
.../pathfinding/PathNavigateGround.edit.java | 4 +
.../minecraft/stats/StatisticsFile.edit.java | 4 +-
.../tileentity/TileEntityBeacon.edit.java | 6 +-
.../net/minecraft/util/BlockPos.edit.java | 131 ++++++++++-
.../minecraft/util/IChatComponent.edit.java | 5 +-
.../net/minecraft/world/Teleporter.edit.java | 4 +
.../net/minecraft/world/World.edit.java | 139 ++++++++++-
.../world/biome/BiomeColorHelper.edit.java | 4 +
.../world/biome/BiomeGenBase.edit.java | 6 +-
.../net/minecraft/world/chunk/Chunk.edit.java | 4 +
.../world/chunk/storage/ChunkLoader.edit.java | 4 +
.../minecraft/world/gen/MapGenCaves.edit.java | 4 +
.../world/gen/MapGenRavine.edit.java | 4 +
.../gen/feature/WorldGenBigMushroom.edit.java | 4 +
.../gen/feature/WorldGenBigTree.edit.java | 26 ++-
.../gen/feature/WorldGenBlockBlob.edit.java | 5 +
.../gen/feature/WorldGenCanopyTree.edit.java | 4 +
.../gen/feature/WorldGenForest.edit.java | 4 +
.../gen/feature/WorldGenSavannaTree.edit.java | 4 +
.../gen/feature/WorldGenSpikes.edit.java | 4 +
.../world/gen/feature/WorldGenSwamp.edit.java | 8 +
.../gen/feature/WorldGenTaiga1.edit.java | 4 +
.../gen/feature/WorldGenTaiga2.edit.java | 4 +
.../world/gen/feature/WorldGenTrees.edit.java | 10 +-
.../ComponentScatteredFeaturePieces.edit.java | 6 +-
.../structure/StructureComponent.edit.java | 6 +-
.../StructureVillagePieces.edit.java | 6 +-
.../pathfinder/SwimNodeProcessor.edit.java | 4 +
.../pathfinder/WalkNodeProcessor.edit.java | 9 +
.../v1_8/internal/PlatformAudio.java | 19 +-
.../v1_8/internal/PlatformRuntime.java | 6 +-
.../v1_8/internal/PlatformVoiceClient.java | 21 --
.../v1_8/internal/PlatformWebRTC.java | 221 +++++++++++-------
.../buffer/EaglerLWJGLByteBuffer.java | 2 +-
.../buffer/EaglerLWJGLFloatBuffer.java | 2 +-
.../internal/buffer/EaglerLWJGLIntBuffer.java | 2 +-
.../buffer/EaglerLWJGLShortBuffer.java | 2 +-
.../internal/ServerPlatformSingleplayer.java | 4 +
.../lax1dude/eaglercraft/v1_8/EagRuntime.java | 5 +
.../v1_8/EaglercraftSoundManager.java | 69 +++---
.../eaglercraft/v1_8/EaglercraftVersion.java | 8 +-
.../v1_8/internal/EnumPlatformType.java | 2 +-
.../v1_8/internal/IAudioHandle.java | 2 +
.../minecraft/EaglerFolderResourcePack.java | 2 +-
.../v1_8/minecraft/FontMappingHelper.java | 2 +
.../v1_8/sp/SingleplayerServerController.java | 3 +-
.../GuiScreenDemoIntegratedServerStartup.java | 2 -
.../v1_8/sp/gui/GuiShareToLan.java | 2 +-
.../v1_8/sp/lan/LANClientPeer.java | 138 +++++------
.../v1_8/sp/lan/LANServerList.java | 3 +-
.../v1_8/sp/relay/RelayQueryDispatch.java | 44 ++++
.../v1_8/sp/relay/RelayServer.java | 4 +-
.../v1_8/update/RelayUpdateChecker.java | 4 +-
.../v1_8/voice/EnumVoiceChannelPeerState.java | 20 --
.../v1_8/voice/VoiceClientController.java | 58 +++--
sources/resources/EPKVersionIdentifier.txt | 2 +-
.../eagler/boot_menu/boot_menu_markup.html | 1 -
sources/resources/plugin_download.zip | Bin 541952 -> 542925 bytes
sources/resources/plugin_version.json | 2 +-
sources/resources/relay_download.zip | Bin 234915 -> 235000 bytes
.../v1_8/internal/PlatformApplication.java | 10 +-
.../v1_8/internal/PlatformAudio.java | 58 +++--
.../v1_8/internal/PlatformInput.java | 14 +-
.../v1_8/internal/PlatformRuntime.java | 6 +-
.../v1_8/internal/PlatformScreenRecord.java | 14 +-
.../v1_8/internal/PlatformVoiceClient.java | 57 +----
.../v1_8/internal/PlatformWebRTC.java | 171 ++++++++------
.../buffer/EaglerArrayByteBuffer.java | 2 +-
.../buffer/EaglerArrayFloatBuffer.java | 2 +-
.../internal/buffer/EaglerArrayIntBuffer.java | 2 +-
.../buffer/EaglerArrayShortBuffer.java | 2 +-
.../v1_8/internal/teavm/TeaVMUtils.java | 8 +-
.../internal/ClientPlatformSingleplayer.java | 5 +
95 files changed, 1084 insertions(+), 501 deletions(-)
create mode 100644 patches/minecraft/net/minecraft/client/audio/ISound.edit.java
create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQueryDispatch.java
delete mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelPeerState.java
diff --git a/README.md b/README.md
index e73d4b2..fe4d57b 100644
--- a/README.md
+++ b/README.md
@@ -247,4 +247,4 @@ The `crashReportShow` hook can be used to capture crash reports and append addit
There is currently no system in place to make forks of 1.8 and merge commits made to the patch files in this repository with the patch files or workspace of the fork, you're on your own if you try to keep a fork of this repo for reasons other than to contribute to it
-A javascript-based modding API resembling Minecraft Forge may be implemented someday though for adding custom content to the game.
+**Note:** If you are trying to use the desktop runtime on Linux, make sure you add the "desktopRuntime" folder to the `LD_LIBRARY_PATH` environment variable of the Java process. This should be done automatically by the Eclipse project's default run configuration, but it might not work properly on every system, or when the Eclipse project is imported into IntelliJ.
diff --git a/client_version b/client_version
index dc93039..8ccb0b3 100644
--- a/client_version
+++ b/client_version
@@ -1 +1 @@
-u41
\ No newline at end of file
+u42
\ No newline at end of file
diff --git a/patches/minecraft/net/minecraft/block/BlockFarmland.edit.java b/patches/minecraft/net/minecraft/block/BlockFarmland.edit.java
index a8b4a09..80c8da2 100644
--- a/patches/minecraft/net/minecraft/block/BlockFarmland.edit.java
+++ b/patches/minecraft/net/minecraft/block/BlockFarmland.edit.java
@@ -14,7 +14,11 @@
~ public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom var4) {
-> CHANGE 66 : 67 @ 66 : 67
+> CHANGE 33 : 34 @ 33 : 35
+
+~ for (BlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(pos.add(-4, 0, -4), pos.add(4, 1, 4))) {
+
+> CHANGE 31 : 32 @ 31 : 32
~ public Item getItemDropped(IBlockState var1, EaglercraftRandom random, int i) {
diff --git a/patches/minecraft/net/minecraft/block/BlockGrass.edit.java b/patches/minecraft/net/minecraft/block/BlockGrass.edit.java
index 2e1ccf7..9d9f4eb 100644
--- a/patches/minecraft/net/minecraft/block/BlockGrass.edit.java
+++ b/patches/minecraft/net/minecraft/block/BlockGrass.edit.java
@@ -14,7 +14,28 @@
~ public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom random) {
-> DELETE 18 @ 18 : 19
+> CHANGE 1 : 4 @ 1 : 3
+
+~ BlockPos tmp = new BlockPos();
+~ if (world.getLightFromNeighbors(blockpos.up(tmp)) < 4
+~ && world.getBlockState(blockpos.up(tmp)).getBlock().getLightOpacity() > 2) {
+
+> CHANGE 2 : 4 @ 2 : 3
+
+~ if (world.getLightFromNeighbors(blockpos.up(tmp)) >= 9) {
+~ BlockPos tmp2 = new BlockPos();
+
+> CHANGE 2 : 4 @ 2 : 4
+
+~ random.nextInt(3) - 1, tmp2);
+~ Block block = world.getBlockState(blockpos1.up(tmp)).getBlock();
+
+> CHANGE 3 : 5 @ 3 : 4
+
+~ && world.getLightFromNeighbors(blockpos1.up(tmp)) >= 4
+~ && block.getLightOpacity() <= 2) {
+
+> DELETE 4 @ 4 : 5
> CHANGE 4 : 5 @ 4 : 5
diff --git a/patches/minecraft/net/minecraft/block/BlockLeaves.edit.java b/patches/minecraft/net/minecraft/block/BlockLeaves.edit.java
index 70bee8d..93793f8 100644
--- a/patches/minecraft/net/minecraft/block/BlockLeaves.edit.java
+++ b/patches/minecraft/net/minecraft/block/BlockLeaves.edit.java
@@ -14,7 +14,11 @@
~ public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom var4) {
-> DELETE 79 @ 79 : 80
+> CHANGE 16 : 17 @ 16 : 17
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> DELETE 62 @ 62 : 63
> CHANGE 3 : 4 @ 3 : 4
diff --git a/patches/minecraft/net/minecraft/block/BlockVine.edit.java b/patches/minecraft/net/minecraft/block/BlockVine.edit.java
index deaf20d..5259037 100644
--- a/patches/minecraft/net/minecraft/block/BlockVine.edit.java
+++ b/patches/minecraft/net/minecraft/block/BlockVine.edit.java
@@ -26,11 +26,15 @@
~ public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) {
-> INSERT 22 : 23 @ 22
+> INSERT 6 : 7 @ 6
+ BlockPos tmp = new BlockPos(0, 0, 0);
-> CHANGE 4 : 9 @ 4 : 7
+> CHANGE 3 : 4 @ 3 : 4
+
+~ if (world.getBlockState(blockpos.add(j, l, k, tmp)).getBlock() == this) {
+
+> CHANGE 16 : 21 @ 16 : 19
~ EnumFacing[] facings = EnumFacing.Plane.HORIZONTAL.facingsArray;
~ for (int j = 0; j < facings.length; ++j) {
@@ -38,7 +42,11 @@
~ if (random.nextBoolean() || !this.canPlaceOn(
~ world.getBlockState(blockpos2.offsetEvenFaster(enumfacing3, tmp)).getBlock())) {
-> CHANGE 33 : 35 @ 33 : 35
+> CHANGE 16 : 17 @ 16 : 17
+
+~ BlockPos blockpos4 = blockpos.offsetEvenFaster(enumfacing1, blockpos2);
+
+> CHANGE 16 : 18 @ 16 : 18
~ } else if (flag1 && world.isAirBlock(blockpos5) && this.canPlaceOn(
~ world.getBlockState(blockpos.offsetEvenFaster(enumfacing2, tmp)).getBlock())) {
@@ -48,7 +56,15 @@
~ } else if (flag2 && world.isAirBlock(blockpos1) && this.canPlaceOn(
~ world.getBlockState(blockpos.offsetEvenFaster(enumfacing4, tmp)).getBlock())) {
-> INSERT 16 : 17 @ 16
+> CHANGE 2 : 3 @ 2 : 3
+
+~ } else if (this.canPlaceOn(world.getBlockState(blockpos4.up(tmp)).getBlock())) {
+
+> CHANGE 10 : 11 @ 10 : 11
+
+~ BlockPos blockpos3 = blockpos.down(blockpos2);
+
+> INSERT 2 : 3 @ 2
+ EnumFacing[] facings = EnumFacing.Plane.HORIZONTAL.facingsArray;
diff --git a/patches/minecraft/net/minecraft/client/Minecraft.edit.java b/patches/minecraft/net/minecraft/client/Minecraft.edit.java
index 976a5e1..7df27e1 100644
--- a/patches/minecraft/net/minecraft/client/Minecraft.edit.java
+++ b/patches/minecraft/net/minecraft/client/Minecraft.edit.java
@@ -713,7 +713,7 @@
+ currentScreen != null ? currentScreen.getClass().getName() : null, scaledResolution.getScaledWidth(),
+ scaledResolution.getScaledHeight(), displayWidth, displayHeight, scaledResolution.getScaleFactor());
-> CHANGE 11 : 50 @ 11 : 12
+> CHANGE 11 : 55 @ 11 : 12
~ RateLimitTracker.tick();
~
@@ -728,6 +728,11 @@
~
~ if (wasPaused != isGamePaused) {
~ SingleplayerServerController.setPaused(this.isGamePaused);
+~ if (isGamePaused) {
+~ mcSoundHandler.pauseSounds();
+~ } else {
+~ mcSoundHandler.resumeSounds();
+~ }
~ wasPaused = isGamePaused;
~ }
~
diff --git a/patches/minecraft/net/minecraft/client/audio/GuardianSound.edit.java b/patches/minecraft/net/minecraft/client/audio/GuardianSound.edit.java
index 8b7360a..32d8833 100644
--- a/patches/minecraft/net/minecraft/client/audio/GuardianSound.edit.java
+++ b/patches/minecraft/net/minecraft/client/audio/GuardianSound.edit.java
@@ -7,4 +7,6 @@
> DELETE 2 @ 2 : 4
+> DELETE 11 @ 11 : 12
+
> EOF
diff --git a/patches/minecraft/net/minecraft/client/audio/ISound.edit.java b/patches/minecraft/net/minecraft/client/audio/ISound.edit.java
new file mode 100644
index 0000000..37072b7
--- /dev/null
+++ b/patches/minecraft/net/minecraft/client/audio/ISound.edit.java
@@ -0,0 +1,10 @@
+
+# Eagler Context Redacted Diff
+# Copyright (c) 2024 lax1dude. All rights reserved.
+
+# Version: 1.0
+# Author: lax1dude
+
+> DELETE 9 @ 9 : 11
+
+> EOF
diff --git a/patches/minecraft/net/minecraft/client/audio/MovingSoundMinecart.edit.java b/patches/minecraft/net/minecraft/client/audio/MovingSoundMinecart.edit.java
index ad2d1ab..6b39a63 100644
--- a/patches/minecraft/net/minecraft/client/audio/MovingSoundMinecart.edit.java
+++ b/patches/minecraft/net/minecraft/client/audio/MovingSoundMinecart.edit.java
@@ -7,4 +7,8 @@
> DELETE 2 @ 2 : 3
+> DELETE 12 @ 12 : 13
+
+> DELETE 18 @ 18 : 19
+
> EOF
diff --git a/patches/minecraft/net/minecraft/client/audio/MovingSoundMinecartRiding.edit.java b/patches/minecraft/net/minecraft/client/audio/MovingSoundMinecartRiding.edit.java
index 8b7360a..323c5a8 100644
--- a/patches/minecraft/net/minecraft/client/audio/MovingSoundMinecartRiding.edit.java
+++ b/patches/minecraft/net/minecraft/client/audio/MovingSoundMinecartRiding.edit.java
@@ -7,4 +7,6 @@
> DELETE 2 @ 2 : 4
+> DELETE 15 @ 15 : 16
+
> EOF
diff --git a/patches/minecraft/net/minecraft/client/audio/PositionedSound.edit.java b/patches/minecraft/net/minecraft/client/audio/PositionedSound.edit.java
index ad2d1ab..f486f12 100644
--- a/patches/minecraft/net/minecraft/client/audio/PositionedSound.edit.java
+++ b/patches/minecraft/net/minecraft/client/audio/PositionedSound.edit.java
@@ -7,4 +7,8 @@
> DELETE 2 @ 2 : 3
+> DELETE 10 @ 10 : 11
+
+> DELETE 14 @ 14 : 18
+
> EOF
diff --git a/patches/minecraft/net/minecraft/client/audio/PositionedSoundRecord.edit.java b/patches/minecraft/net/minecraft/client/audio/PositionedSoundRecord.edit.java
index 8b7360a..a00ab40 100644
--- a/patches/minecraft/net/minecraft/client/audio/PositionedSoundRecord.edit.java
+++ b/patches/minecraft/net/minecraft/client/audio/PositionedSoundRecord.edit.java
@@ -7,4 +7,26 @@
> DELETE 2 @ 2 : 4
+> CHANGE 4 : 5 @ 4 : 5
+
+~ return new PositionedSoundRecord(soundResource, 0.25F, pitch, false, ISound.AttenuationType.NONE, 0.0F, 0.0F,
+
+> CHANGE 4 : 5 @ 4 : 5
+
+~ return new PositionedSoundRecord(soundResource, 1.0F, 1.0F, false, ISound.AttenuationType.NONE, 0.0F, 0.0F,
+
+> CHANGE 5 : 6 @ 5 : 6
+
+~ return new PositionedSoundRecord(soundResource, 4.0F, 1.0F, false, ISound.AttenuationType.LINEAR, xPosition,
+
+> CHANGE 5 : 6 @ 5 : 6
+
+~ this(soundResource, volume, pitch, false, ISound.AttenuationType.LINEAR, xPosition, yPosition, zPosition);
+
+> CHANGE 3 : 4 @ 3 : 5
+
+~ ISound.AttenuationType attenuationType, float xPosition, float yPosition, float zPosition) {
+
+> DELETE 7 @ 7 : 8
+
> EOF
diff --git a/patches/minecraft/net/minecraft/client/multiplayer/WorldClient.edit.java b/patches/minecraft/net/minecraft/client/multiplayer/WorldClient.edit.java
index 927cc2f..a74df85 100644
--- a/patches/minecraft/net/minecraft/client/multiplayer/WorldClient.edit.java
+++ b/patches/minecraft/net/minecraft/client/multiplayer/WorldClient.edit.java
@@ -43,7 +43,11 @@
~ EaglercraftRandom random = new EaglercraftRandom();
-> CHANGE 83 : 84 @ 83 : 85
+> CHANGE 3 : 4 @ 3 : 4
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 79 : 80 @ 79 : 81
~ return "Non-integrated multiplayer server";
diff --git a/patches/minecraft/net/minecraft/client/renderer/BlockModelRenderer.edit.java b/patches/minecraft/net/minecraft/client/renderer/BlockModelRenderer.edit.java
index ba34f71..21af64a 100644
--- a/patches/minecraft/net/minecraft/client/renderer/BlockModelRenderer.edit.java
+++ b/patches/minecraft/net/minecraft/client/renderer/BlockModelRenderer.edit.java
@@ -36,7 +36,7 @@
> CHANGE 2 : 6 @ 2 : 3
-~ BlockPos.MutableBlockPos pointer = new BlockPos.MutableBlockPos();
+~ BlockPos pointer = new BlockPos();
~ EnumFacing[] facings = EnumFacing._VALUES;
~ for (int m = 0; m < facings.length; ++m) {
~ EnumFacing enumfacing = facings[m];
diff --git a/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.edit.java b/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.edit.java
index c627c90..1698a10 100644
--- a/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.edit.java
+++ b/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.edit.java
@@ -616,7 +616,11 @@
~ b0 = 8;
~ } else if (this.mc.gameSettings.fancyGraphics) {
-> CHANGE 38 : 39 @ 38 : 39
+> CHANGE 7 : 8 @ 7 : 8
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 30 : 31 @ 30 : 31
~ if (f2 >= 0.15F) {
diff --git a/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.edit.java b/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.edit.java
index 7aaa170..d6d243d 100644
--- a/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.edit.java
+++ b/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.edit.java
@@ -489,7 +489,11 @@
+ }
+
-> INSERT 29 : 30 @ 29
+> CHANGE 5 : 6 @ 5 : 7
+
+~ for (BlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(blockpos, blockpos.add(15, 15, 15))) {
+
+> INSERT 22 : 23 @ 22
+ ((ClippingHelperImpl) this.debugFixedClippingHelper).destroy();
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 c733169..43aea3a 100644
--- a/patches/minecraft/net/minecraft/client/renderer/chunk/RenderChunk.edit.java
+++ b/patches/minecraft/net/minecraft/client/renderer/chunk/RenderChunk.edit.java
@@ -88,7 +88,7 @@
> CHANGE 2 : 4 @ 2 : 4
-~ for (BlockPos blockpos$mutableblockpos : BlockPos.getAllInBox(blockpos, blockpos1)) {
+~ for (BlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(blockpos, blockpos1)) {
~ IBlockState iblockstate = regionrendercache.getBlockStateFaster(blockpos$mutableblockpos);
> CHANGE 6 : 7 @ 6 : 7
diff --git a/patches/minecraft/net/minecraft/command/CommandCompare.edit.java b/patches/minecraft/net/minecraft/command/CommandCompare.edit.java
index c3bb426..04a848a 100644
--- a/patches/minecraft/net/minecraft/command/CommandCompare.edit.java
+++ b/patches/minecraft/net/minecraft/command/CommandCompare.edit.java
@@ -11,4 +11,9 @@
+
+> CHANGE 40 : 42 @ 40 : 42
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+~ BlockPos blockpos$mutableblockpos1 = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/entity/Entity.edit.java b/patches/minecraft/net/minecraft/entity/Entity.edit.java
index e726385..a4e6912 100644
--- a/patches/minecraft/net/minecraft/entity/Entity.edit.java
+++ b/patches/minecraft/net/minecraft/entity/Entity.edit.java
@@ -147,7 +147,11 @@
~ for (int i = 0; i < numbers.length; ++i) {
~ nbttaglist.appendTag(new NBTTagFloat(numbers[i]));
-> CHANGE 172 : 173 @ 172 : 173
+> CHANGE 33 : 34 @ 33 : 35
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos(Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE);
+
+> CHANGE 137 : 138 @ 137 : 138
~ for (AxisAlignedBB axisalignedbb : (List) list) {
diff --git a/patches/minecraft/net/minecraft/entity/monster/EntityZombie.edit.java b/patches/minecraft/net/minecraft/entity/monster/EntityZombie.edit.java
index 685bb33..20f8f7c 100644
--- a/patches/minecraft/net/minecraft/entity/monster/EntityZombie.edit.java
+++ b/patches/minecraft/net/minecraft/entity/monster/EntityZombie.edit.java
@@ -16,4 +16,8 @@
~ private static final EaglercraftUUID babySpeedBoostUUID = EaglercraftUUID
~ .fromString("B9766B59-9566-4402-BC1F-2EE2A276D836");
+> CHANGE 489 : 490 @ 489 : 490
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/item/ItemMap.edit.java b/patches/minecraft/net/minecraft/item/ItemMap.edit.java
index a9a6a81..660fcbf 100644
--- a/patches/minecraft/net/minecraft/item/ItemMap.edit.java
+++ b/patches/minecraft/net/minecraft/item/ItemMap.edit.java
@@ -16,4 +16,8 @@
> DELETE 9 @ 9 : 11
+> CHANGE 91 : 92 @ 91 : 92
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/pathfinding/PathNavigateGround.edit.java b/patches/minecraft/net/minecraft/pathfinding/PathNavigateGround.edit.java
index 3f5c9b6..bbc7202 100644
--- a/patches/minecraft/net/minecraft/pathfinding/PathNavigateGround.edit.java
+++ b/patches/minecraft/net/minecraft/pathfinding/PathNavigateGround.edit.java
@@ -7,4 +7,8 @@
> DELETE 8 @ 8 : 11
+> CHANGE 168 : 169 @ 168 : 169
+
+~ for (BlockPos blockpos : BlockPos.getAllInBoxMutable(new BlockPos(parInt1, parInt2, parInt3),
+
> EOF
diff --git a/patches/minecraft/net/minecraft/stats/StatisticsFile.edit.java b/patches/minecraft/net/minecraft/stats/StatisticsFile.edit.java
index e877e59..9457120 100644
--- a/patches/minecraft/net/minecraft/stats/StatisticsFile.edit.java
+++ b/patches/minecraft/net/minecraft/stats/StatisticsFile.edit.java
@@ -5,9 +5,9 @@
# Version: 1.0
# Author: lax1dude
-> DELETE 4 @ 4 : 10
+> DELETE 4 @ 4 : 11
-> DELETE 10 @ 10 : 15
+> DELETE 9 @ 9 : 14
> CHANGE 3 : 5 @ 3 : 6
diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntityBeacon.edit.java b/patches/minecraft/net/minecraft/tileentity/TileEntityBeacon.edit.java
index e429faa..c2ed709 100644
--- a/patches/minecraft/net/minecraft/tileentity/TileEntityBeacon.edit.java
+++ b/patches/minecraft/net/minecraft/tileentity/TileEntityBeacon.edit.java
@@ -21,7 +21,11 @@
~ for (int m = 0, l = list.size(); m < l; ++m) {
~ list.get(m).addPotionEffect(new PotionEffect(this.secondaryEffect, 180, 0, true, true));
-> CHANGE 87 : 88 @ 87 : 88
+> CHANGE 18 : 19 @ 18 : 19
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 68 : 69 @ 68 : 69
~ List lst = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class,
diff --git a/patches/minecraft/net/minecraft/util/BlockPos.edit.java b/patches/minecraft/net/minecraft/util/BlockPos.edit.java
index c1cc32d..1b7107d 100644
--- a/patches/minecraft/net/minecraft/util/BlockPos.edit.java
+++ b/patches/minecraft/net/minecraft/util/BlockPos.edit.java
@@ -15,7 +15,45 @@
> DELETE 1 @ 1 : 5
-> INSERT 55 : 65 @ 55
+> INSERT 12 : 16 @ 12
+
++ public BlockPos() {
++ super(0, 0, 0);
++ }
++
+
+> CHANGE 22 : 23 @ 22 : 23
+
+~ : new BlockPos((double) this.x + x, (double) this.y + y, (double) this.z + z);
+
+> CHANGE 3 : 4 @ 3 : 4
+
+~ return x == 0 && y == 0 && z == 0 ? this : new BlockPos(this.x + x, this.y + y, this.z + z);
+
+> INSERT 2 : 12 @ 2
+
++ /**
++ * eagler
++ */
++ public BlockPos add(int x, int y, int z, BlockPos dst) {
++ dst.x = this.x + x;
++ dst.y = this.y + y;
++ dst.z = this.z + z;
++ return dst;
++ }
++
+
+> CHANGE 1 : 3 @ 1 : 3
+
+~ return vec.x == 0 && vec.y == 0 && vec.z == 0 ? this
+~ : new BlockPos(this.x + vec.x, this.y + vec.y, this.z + vec.z);
+
+> CHANGE 3 : 5 @ 3 : 5
+
+~ return vec.x == 0 && vec.y == 0 && vec.z == 0 ? this
+~ : new BlockPos(this.x - vec.x, this.y - vec.y, this.z - vec.z);
+
+> INSERT 6 : 16 @ 6
+ /**
+ * eagler
@@ -96,9 +134,9 @@
> INSERT 4 : 21 @ 4
+ public BlockPos offsetFaster(EnumFacing facing, BlockPos ret) {
-+ ret.x = this.getX() + facing.getFrontOffsetX();
-+ ret.y = this.getY() + facing.getFrontOffsetY();
-+ ret.z = this.getZ() + facing.getFrontOffsetZ();
++ ret.x = this.x + facing.getFrontOffsetX();
++ ret.y = this.y + facing.getFrontOffsetY();
++ ret.z = this.z + facing.getFrontOffsetZ();
+ return ret;
+ }
+
@@ -118,10 +156,89 @@
~ : new BlockPos(this.x + facing.getFrontOffsetX() * n, this.y + facing.getFrontOffsetY() * n,
~ this.z + facing.getFrontOffsetZ() * n);
-> DELETE 104 @ 104 : 107
+> CHANGE 3 : 5 @ 3 : 6
-> CHANGE 6 : 7 @ 6 : 10
+~ return new BlockPos(this.y * vec3i.z - this.z * vec3i.y, this.z * vec3i.x - this.x * vec3i.z,
+~ this.x * vec3i.y - this.y * vec3i.x);
-~ super(x_, y_, z_);
+> CHANGE 3 : 5 @ 3 : 5
+
+~ return ((long) this.x & X_MASK) << X_SHIFT | ((long) this.y & Y_MASK) << Y_SHIFT
+~ | ((long) this.z & Z_MASK) << 0;
+
+> CHANGE 10 : 12 @ 10 : 14
+
+~ final BlockPos blockpos = new BlockPos(Math.min(from.x, to.x), Math.min(from.y, to.y), Math.min(from.z, to.z));
+~ final BlockPos blockpos1 = new BlockPos(Math.max(from.x, to.x), Math.max(from.y, to.y), Math.max(from.z, to.z));
+
+> CHANGE 12 : 16 @ 12 : 16
+
+~ int i = this.lastReturned.x;
+~ int j = this.lastReturned.y;
+~ int k = this.lastReturned.z;
+~ if (i < blockpos1.x) {
+
+> CHANGE 1 : 3 @ 1 : 3
+
+~ } else if (j < blockpos1.y) {
+~ i = blockpos.x;
+
+> CHANGE 1 : 4 @ 1 : 4
+
+~ } else if (k < blockpos1.z) {
+~ i = blockpos.x;
+~ j = blockpos.y;
+
+> CHANGE 12 : 19 @ 12 : 21
+
+~ public static Iterable getAllInBoxMutable(BlockPos from, BlockPos to) {
+~ final BlockPos blockpos = new BlockPos(Math.min(from.x, to.x), Math.min(from.y, to.y), Math.min(from.z, to.z));
+~ final BlockPos blockpos1 = new BlockPos(Math.max(from.x, to.x), Math.max(from.y, to.y), Math.max(from.z, to.z));
+~ return new Iterable() {
+~ public Iterator iterator() {
+~ return new AbstractIterator() {
+~ private BlockPos theBlockPos = null;
+
+> CHANGE 1 : 2 @ 1 : 2
+
+~ protected BlockPos computeNext() {
+
+> CHANGE 1 : 2 @ 1 : 3
+
+~ this.theBlockPos = new BlockPos(blockpos.x, blockpos.y, blockpos.z);
+
+> CHANGE 2 : 3 @ 2 : 3
+
+~ return (BlockPos) this.endOfData();
+
+> CHANGE 1 : 5 @ 1 : 5
+
+~ int i = this.theBlockPos.x;
+~ int j = this.theBlockPos.y;
+~ int k = this.theBlockPos.z;
+~ if (i < blockpos1.x) {
+
+> CHANGE 1 : 3 @ 1 : 3
+
+~ } else if (j < blockpos1.y) {
+~ i = blockpos.x;
+
+> CHANGE 1 : 4 @ 1 : 4
+
+~ } else if (k < blockpos1.z) {
+~ i = blockpos.x;
+~ j = blockpos.y;
+
+> CHANGE 14 : 19 @ 14 : 48
+
+~ public BlockPos func_181079_c(int x, int y, int z) {
+~ this.x = x;
+~ this.y = y;
+~ this.z = z;
+~ return this;
+
+> INSERT 1 : 2 @ 1
+
++
> EOF
diff --git a/patches/minecraft/net/minecraft/util/IChatComponent.edit.java b/patches/minecraft/net/minecraft/util/IChatComponent.edit.java
index de2713a..5809f25 100644
--- a/patches/minecraft/net/minecraft/util/IChatComponent.edit.java
+++ b/patches/minecraft/net/minecraft/util/IChatComponent.edit.java
@@ -189,8 +189,11 @@
+ * So sorry for this implementation
+ */
-> CHANGE 1 : 8 @ 1 : 2
+> CHANGE 1 : 11 @ 1 : 2
+~ if (component == null) {
+~ return "null";
+~ }
~ if ((component instanceof ChatComponentText) && component.getChatStyle().isEmpty()
~ && component.getSiblings().isEmpty()) {
~ String escaped = new JSONObject().put("E", component.getUnformattedTextForChat()).toString();
diff --git a/patches/minecraft/net/minecraft/world/Teleporter.edit.java b/patches/minecraft/net/minecraft/world/Teleporter.edit.java
index ce33e0a..8c660fa 100644
--- a/patches/minecraft/net/minecraft/world/Teleporter.edit.java
+++ b/patches/minecraft/net/minecraft/world/Teleporter.edit.java
@@ -19,4 +19,8 @@
~ this.random = new EaglercraftRandom(worldIn.getSeed(), !worldIn.getWorldInfo().isOldEaglercraftRandom());
+> CHANGE 152 : 153 @ 152 : 153
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/World.edit.java b/patches/minecraft/net/minecraft/world/World.edit.java
index 5e84e69..6044c62 100644
--- a/patches/minecraft/net/minecraft/world/World.edit.java
+++ b/patches/minecraft/net/minecraft/world/World.edit.java
@@ -69,11 +69,29 @@
~ return HString.format("ID #%d (%s // %s)",
-> CHANGE 128 : 129 @ 128 : 129
+> CHANGE 60 : 66 @ 60 : 65
+
+~ BlockPos tmp = new BlockPos(0, 0, 0);
+~ int i1 = this.getLight(pos.up(tmp), false);
+~ int i = this.getLight(pos.east(tmp), false);
+~ int j = this.getLight(pos.west(tmp), false);
+~ int k = this.getLight(pos.south(tmp), false);
+~ int l = this.getLight(pos.north(tmp), false);
+
+> CHANGE 63 : 64 @ 63 : 64
~ return Chunk.getNoSkyLightValue();
-> CHANGE 74 : 80 @ 74 : 75
+> CHANGE 10 : 16 @ 10 : 15
+
+~ BlockPos tmp = new BlockPos();
+~ int i1 = this.getLightFor(type, pos.up(tmp));
+~ int i = this.getLightFor(type, pos.east(tmp));
+~ int j = this.getLightFor(type, pos.west(tmp));
+~ int k = this.getLightFor(type, pos.south(tmp));
+~ int l = this.getLightFor(type, pos.north(tmp));
+
+> CHANGE 59 : 65 @ 59 : 60
~ if (lightValue < 0) {
~ j += -lightValue;
@@ -82,7 +100,15 @@
~ }
~ } else if (j < lightValue) {
-> DELETE 579 @ 579 : 582
+> CHANGE 320 : 321 @ 320 : 321
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 72 : 73 @ 72 : 73
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> DELETE 185 @ 185 : 188
> DELETE 23 @ 23 : 24
@@ -104,7 +130,31 @@
> DELETE 38 @ 38 : 39
-> CHANGE 400 : 401 @ 400 : 401
+> CHANGE 37 : 38 @ 37 : 38
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 22 : 23 @ 22 : 23
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 23 : 24 @ 23 : 24
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 28 : 29 @ 28 : 29
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 38 : 39 @ 38 : 39
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 22 : 23 @ 22 : 23
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 224 : 225 @ 224 : 225
~ if (!this.provider.getHasNoSky() && this.getGameRules().getBoolean("doWeatherCycle")) {
@@ -140,7 +190,13 @@
~ public void forceBlockUpdateTick(Block blockType, BlockPos pos, EaglercraftRandom random) {
-> CHANGE 93 : 96 @ 93 : 94
+> CHANGE 28 : 31 @ 28 : 30
+
+~ BlockPos tmp = new BlockPos();
+~ boolean flag = this.isWater(pos.west(tmp)) && this.isWater(pos.east(tmp))
+~ && this.isWater(pos.north(tmp)) && this.isWater(pos.south(tmp));
+
+> CHANGE 63 : 66 @ 63 : 64
~ EnumFacing[] facings = EnumFacing._VALUES;
~ for (int m = 0; m < facings.length; ++m) {
@@ -148,7 +204,11 @@
> DELETE 22 @ 22 : 23
-> CHANGE 27 : 30 @ 27 : 28
+> CHANGE 25 : 26 @ 25 : 26
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 1 : 4 @ 1 : 2
~ EnumFacing[] facings = EnumFacing._VALUES;
~ for (int m = 0; m < facings.length; ++m) {
@@ -156,7 +216,35 @@
> DELETE 20 @ 20 : 23
-> DELETE 50 @ 50 : 51
+> INSERT 6 : 7 @ 6
+
++ BlockPos tmp = new BlockPos(0, 0, 0);
+
+> CHANGE 10 : 11 @ 10 : 11
+
+~ if (this.getLightFor(lightType, blockpos1.west(tmp)) < j6) {
+
+> CHANGE 4 : 5 @ 4 : 5
+
+~ if (this.getLightFor(lightType, blockpos1.east(tmp)) < j6) {
+
+> CHANGE 4 : 5 @ 4 : 5
+
+~ if (this.getLightFor(lightType, blockpos1.down(tmp)) < j6) {
+
+> CHANGE 4 : 5 @ 4 : 5
+
+~ if (this.getLightFor(lightType, blockpos1.up(tmp)) < j6) {
+
+> CHANGE 4 : 5 @ 4 : 5
+
+~ if (this.getLightFor(lightType, blockpos1.north(tmp)) < j6) {
+
+> CHANGE 4 : 5 @ 4 : 5
+
+~ if (this.getLightFor(lightType, blockpos1.south(tmp)) < j6) {
+
+> DELETE 8 @ 8 : 9
> CHANGE 43 : 46 @ 43 : 45
@@ -175,7 +263,42 @@
~ for (int j = 0, l = this.loadedEntityList.size(); j < l; ++j) {
~ Entity entity = this.loadedEntityList.get(j);
-> CHANGE 102 : 107 @ 102 : 104
+> CHANGE 51 : 53 @ 51 : 52
+
+~ BlockPos tmp = new BlockPos();
+~ i = Math.max(i, this.getStrongPower(pos.down(tmp), EnumFacing.DOWN));
+
+> CHANGE 3 : 4 @ 3 : 4
+
+~ i = Math.max(i, this.getStrongPower(pos.up(tmp), EnumFacing.UP));
+
+> CHANGE 3 : 4 @ 3 : 4
+
+~ i = Math.max(i, this.getStrongPower(pos.north(tmp), EnumFacing.NORTH));
+
+> CHANGE 3 : 4 @ 3 : 4
+
+~ i = Math.max(i, this.getStrongPower(pos.south(tmp), EnumFacing.SOUTH));
+
+> CHANGE 3 : 4 @ 3 : 4
+
+~ i = Math.max(i, this.getStrongPower(pos.west(tmp), EnumFacing.WEST));
+
+> CHANGE 3 : 4 @ 3 : 4
+
+~ i = Math.max(i, this.getStrongPower(pos.east(tmp), EnumFacing.EAST));
+
+> CHANGE 19 : 26 @ 19 : 25
+
+~ BlockPos tmp = new BlockPos(0, 0, 0);
+~ return this.getRedstonePower(pos.down(tmp), EnumFacing.DOWN) > 0 ? true
+~ : (this.getRedstonePower(pos.up(tmp), EnumFacing.UP) > 0 ? true
+~ : (this.getRedstonePower(pos.north(tmp), EnumFacing.NORTH) > 0 ? true
+~ : (this.getRedstonePower(pos.south(tmp), EnumFacing.SOUTH) > 0 ? true
+~ : (this.getRedstonePower(pos.west(tmp), EnumFacing.WEST) > 0 ? true
+~ : this.getRedstonePower(pos.east(tmp), EnumFacing.EAST) > 0))));
+
+> CHANGE 5 : 10 @ 5 : 7
~ EnumFacing[] facings = EnumFacing._VALUES;
~ BlockPos tmp = new BlockPos(0, 0, 0);
diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeColorHelper.edit.java b/patches/minecraft/net/minecraft/world/biome/BiomeColorHelper.edit.java
index 0d7c65a..d21cbbe 100644
--- a/patches/minecraft/net/minecraft/world/biome/BiomeColorHelper.edit.java
+++ b/patches/minecraft/net/minecraft/world/biome/BiomeColorHelper.edit.java
@@ -7,4 +7,8 @@
> DELETE 4 @ 4 : 5
+> CHANGE 24 : 25 @ 24 : 25
+
+~ for (BlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(parBlockPos.add(-1, 0, -1),
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeGenBase.edit.java b/patches/minecraft/net/minecraft/world/biome/BiomeGenBase.edit.java
index 3fb538e..334784a 100644
--- a/patches/minecraft/net/minecraft/world/biome/BiomeGenBase.edit.java
+++ b/patches/minecraft/net/minecraft/world/biome/BiomeGenBase.edit.java
@@ -93,7 +93,11 @@
~ public final void generateBiomeTerrain(World worldIn, EaglercraftRandom rand, ChunkPrimer chunkPrimerIn,
~ int parInt1, int parInt2, double parDouble1) {
-> CHANGE 101 : 177 @ 101 : 102
+> CHANGE 7 : 8 @ 7 : 8
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 93 : 169 @ 93 : 94
~ public static void doBootstrap() {
~ ocean = (new BiomeGenOcean(0)).setColor(112).setBiomeName("Ocean").setHeight(height_Oceans);
diff --git a/patches/minecraft/net/minecraft/world/chunk/Chunk.edit.java b/patches/minecraft/net/minecraft/world/chunk/Chunk.edit.java
index ba65f3b..60e6bb5 100644
--- a/patches/minecraft/net/minecraft/world/chunk/Chunk.edit.java
+++ b/patches/minecraft/net/minecraft/world/chunk/Chunk.edit.java
@@ -195,4 +195,8 @@
~ for (int i = 0; i < facings.length; ++i) {
~ EnumFacing enumfacing = facings[i];
+> CHANGE 49 : 50 @ 49 : 51
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos((this.xPosition << 4) + x, 0, (this.zPosition << 4) + z);
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/chunk/storage/ChunkLoader.edit.java b/patches/minecraft/net/minecraft/world/chunk/storage/ChunkLoader.edit.java
index d9711e3..678d7f3 100644
--- a/patches/minecraft/net/minecraft/world/chunk/storage/ChunkLoader.edit.java
+++ b/patches/minecraft/net/minecraft/world/chunk/storage/ChunkLoader.edit.java
@@ -7,4 +7,8 @@
> DELETE 8 @ 8 : 9
+> CHANGE 87 : 88 @ 87 : 88
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/gen/MapGenCaves.edit.java b/patches/minecraft/net/minecraft/world/gen/MapGenCaves.edit.java
index 5e01856..5ef387b 100644
--- a/patches/minecraft/net/minecraft/world/gen/MapGenCaves.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/MapGenCaves.edit.java
@@ -23,4 +23,8 @@
~ EaglercraftRandom random = new EaglercraftRandom(parLong1, this.rand.isScramble());
+> CHANGE 106 : 107 @ 106 : 107
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/gen/MapGenRavine.edit.java b/patches/minecraft/net/minecraft/world/gen/MapGenRavine.edit.java
index dd0c9d7..d481373 100644
--- a/patches/minecraft/net/minecraft/world/gen/MapGenRavine.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/MapGenRavine.edit.java
@@ -22,4 +22,8 @@
~ EaglercraftRandom random = new EaglercraftRandom(parLong1, this.rand.isScramble());
+> CHANGE 105 : 106 @ 105 : 106
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigMushroom.edit.java b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigMushroom.edit.java
index e295768..96a1272 100644
--- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigMushroom.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigMushroom.edit.java
@@ -15,4 +15,8 @@
~ public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) {
+> CHANGE 13 : 14 @ 13 : 14
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> 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 e18e15a..dfe47f4 100644
--- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.edit.java
@@ -23,14 +23,22 @@
> CHANGE 111 : 113 @ 111 : 113
~ for (int i = 0, l = this.field_175948_j.size(); i < l; ++i) {
-~ this.generateLeafNode(this.field_175948_j.get(i));
+~ this.generateLeafNode(this.field_175948_j.get(i).blockPos);
> CHANGE 22 : 24 @ 22 : 23
~ for (int j = 0, l = this.field_175948_j.size(); j < l; ++j) {
~ WorldGenBigTree.FoliageCoordinates worldgenbigtree$foliagecoordinates = this.field_175948_j.get(j);
-> CHANGE 35 : 36 @ 35 : 36
+> CHANGE 2 : 3 @ 2 : 3
+
+~ if (!blockpos.equals(worldgenbigtree$foliagecoordinates.blockPos)
+
+> CHANGE 1 : 2 @ 1 : 2
+
+~ this.func_175937_a(blockpos, worldgenbigtree$foliagecoordinates.blockPos, Blocks.log);
+
+> CHANGE 30 : 31 @ 30 : 31
~ public boolean generate(World worldIn, EaglercraftRandom rand, BlockPos position) {
@@ -38,4 +46,18 @@
~ this.rand = new EaglercraftRandom(rand.nextLong(), !worldIn.getWorldInfo().isOldEaglercraftRandom());
+> CHANGE 32 : 33 @ 32 : 33
+
+~ static class FoliageCoordinates {
+
+> INSERT 1 : 2 @ 1
+
++ private final BlockPos blockPos;
+
+> DELETE 2 @ 2 : 3
+
+> INSERT 1 : 2 @ 1
+
++ this.blockPos = parBlockPos;
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBlockBlob.edit.java b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBlockBlob.edit.java
index 1493ab3..0b2dc25 100644
--- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBlockBlob.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBlockBlob.edit.java
@@ -15,4 +15,9 @@
~ public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) {
+> CHANGE 25 : 27 @ 25 : 26
+
+~ for (BlockPos blockpos1 : BlockPos.getAllInBoxMutable(blockpos.add(-j, -k, -l),
+~ blockpos.add(j, k, l))) {
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenCanopyTree.edit.java b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenCanopyTree.edit.java
index 4c5dc06..10004dd 100644
--- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenCanopyTree.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenCanopyTree.edit.java
@@ -15,4 +15,8 @@
~ public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) {
+> CHANGE 111 : 112 @ 111 : 112
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenForest.edit.java b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenForest.edit.java
index 60a12be..a4e498f 100644
--- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenForest.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenForest.edit.java
@@ -15,4 +15,8 @@
~ public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) {
+> CHANGE 17 : 18 @ 17 : 18
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSavannaTree.edit.java b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSavannaTree.edit.java
index 4c5dc06..4c78ae4 100644
--- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSavannaTree.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSavannaTree.edit.java
@@ -15,4 +15,8 @@
~ public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) {
+> CHANGE 13 : 14 @ 13 : 14
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSpikes.edit.java b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSpikes.edit.java
index 4727abe..aac3d69 100644
--- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSpikes.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSpikes.edit.java
@@ -15,4 +15,8 @@
~ public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) {
+> CHANGE 3 : 4 @ 3 : 4
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSwamp.edit.java b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSwamp.edit.java
index 4c5dc06..8e4c2bf 100644
--- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSwamp.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSwamp.edit.java
@@ -15,4 +15,12 @@
~ public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) {
+> CHANGE 18 : 19 @ 18 : 19
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 57 : 58 @ 57 : 58
+
+~ BlockPos blockpos$mutableblockpos1 = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga1.edit.java b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga1.edit.java
index a8005cf..7307595 100644
--- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga1.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga1.edit.java
@@ -15,4 +15,8 @@
~ public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) {
+> CHANGE 14 : 15 @ 14 : 15
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.edit.java b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.edit.java
index a8005cf..7307595 100644
--- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.edit.java
@@ -15,4 +15,8 @@
~ public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) {
+> CHANGE 14 : 15 @ 14 : 15
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.edit.java b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.edit.java
index 0a83582..c89a63d 100644
--- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.edit.java
@@ -15,7 +15,15 @@
~ public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) {
-> CHANGE 126 : 129 @ 126 : 127
+> CHANGE 13 : 14 @ 13 : 14
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 75 : 76 @ 75 : 76
+
+~ BlockPos blockpos$mutableblockpos1 = new BlockPos();
+
+> CHANGE 36 : 39 @ 36 : 37
~ EnumFacing[] facings = EnumFacing.Plane.HORIZONTAL.facingsArray;
~ for (int m = 0; m < facings.length; ++m) {
diff --git a/patches/minecraft/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.edit.java b/patches/minecraft/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.edit.java
index 1a5cb38..1252392 100644
--- a/patches/minecraft/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.edit.java
@@ -39,7 +39,11 @@
~ protected Feature(EaglercraftRandom parRandom, int parInt1, int parInt2, int parInt3, int parInt4, int parInt5,
-> CHANGE 86 : 87 @ 86 : 87
+> CHANGE 39 : 40 @ 39 : 40
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 46 : 47 @ 46 : 47
~ public JunglePyramid(EaglercraftRandom parRandom, int parInt1, int parInt2) {
diff --git a/patches/minecraft/net/minecraft/world/gen/structure/StructureComponent.edit.java b/patches/minecraft/net/minecraft/world/gen/structure/StructureComponent.edit.java
index bc80a75..2ef376f 100644
--- a/patches/minecraft/net/minecraft/world/gen/structure/StructureComponent.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/structure/StructureComponent.edit.java
@@ -19,7 +19,11 @@
~ public abstract boolean addComponentParts(World var1, EaglercraftRandom var2, StructureBoundingBox var3);
-> CHANGE 408 : 409 @ 408 : 409
+> CHANGE 32 : 33 @ 32 : 33
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 375 : 376 @ 375 : 376
~ int minZ, int maxX, int maxY, int maxZ, boolean alwaysReplace, EaglercraftRandom rand,
diff --git a/patches/minecraft/net/minecraft/world/gen/structure/StructureVillagePieces.edit.java b/patches/minecraft/net/minecraft/world/gen/structure/StructureVillagePieces.edit.java
index f1c1810..b23cbb6 100644
--- a/patches/minecraft/net/minecraft/world/gen/structure/StructureVillagePieces.edit.java
+++ b/patches/minecraft/net/minecraft/world/gen/structure/StructureVillagePieces.edit.java
@@ -216,7 +216,11 @@
~ List rand, EaglercraftRandom parRandom, int parInt1, int parInt2) {
-> CHANGE 138 : 139 @ 138 : 139
+> CHANGE 27 : 28 @ 27 : 28
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
+> CHANGE 110 : 111 @ 110 : 111
~ public Well(StructureVillagePieces.Start start, int parInt1, EaglercraftRandom rand, int parInt2, int parInt3) {
diff --git a/patches/minecraft/net/minecraft/world/pathfinder/SwimNodeProcessor.edit.java b/patches/minecraft/net/minecraft/world/pathfinder/SwimNodeProcessor.edit.java
index eb6185a..f014806 100644
--- a/patches/minecraft/net/minecraft/world/pathfinder/SwimNodeProcessor.edit.java
+++ b/patches/minecraft/net/minecraft/world/pathfinder/SwimNodeProcessor.edit.java
@@ -13,4 +13,8 @@
~ for (int j = 0; j < facings.length; ++j) {
~ EnumFacing enumfacing = facings[j];
+> CHANGE 16 : 17 @ 16 : 17
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> EOF
diff --git a/patches/minecraft/net/minecraft/world/pathfinder/WalkNodeProcessor.edit.java b/patches/minecraft/net/minecraft/world/pathfinder/WalkNodeProcessor.edit.java
index ffbb9b2..fb31754 100644
--- a/patches/minecraft/net/minecraft/world/pathfinder/WalkNodeProcessor.edit.java
+++ b/patches/minecraft/net/minecraft/world/pathfinder/WalkNodeProcessor.edit.java
@@ -7,4 +7,13 @@
> DELETE 15 @ 15 : 16
+> CHANGE 22 : 24 @ 22 : 24
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos(MathHelper.floor_double(entity.posX), i,
+~ MathHelper.floor_double(entity.posZ));
+
+> CHANGE 113 : 114 @ 113 : 114
+
+~ BlockPos blockpos$mutableblockpos = new BlockPos();
+
> EOF
diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java
index fe3a750..960a83a 100644
--- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java
+++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java
@@ -53,18 +53,23 @@ public class PlatformAudio {
@Override
public void pause(boolean setPaused) {
if(setPaused) {
- if(sndSystem.playing(sourceName)) {
+ if(!paused) {
sndSystem.pause(sourceName);
+ paused = true;
}
- paused = true;
}else {
- if(!sndSystem.playing(sourceName)) {
+ if(paused) {
sndSystem.play(sourceName);
+ paused = false;
}
- paused = false;
}
}
+ @Override
+ public void repeat(boolean en) {
+ sndSystem.setLooping(sourceName, en);
+ }
+
@Override
public void restart() {
this.stall = PlatformRuntime.steadyTimeMillis();
@@ -172,7 +177,7 @@ public class PlatformAudio {
private static int sourceCounter = 0;
public static IAudioHandle beginPlayback(IAudioResource track, float x, float y, float z,
- float volume, float pitch) {
+ float volume, float pitch, boolean repeat) {
if(sndSystem == null) {
return null;
}
@@ -188,12 +193,13 @@ public class PlatformAudio {
sndSystem.setTemporary(srcName, true);
sndSystem.setPitch(srcName, pitch);
sndSystem.setVolume(srcName, volume);
+ sndSystem.setLooping(srcName, repeat);
sndSystem.play(srcName);
return new PaulscodeAudioHandle(srcName);
}
- public static IAudioHandle beginPlaybackStatic(IAudioResource track, float volume, float pitch) {
+ public static IAudioHandle beginPlaybackStatic(IAudioResource track, float volume, float pitch, boolean repeat) {
if(sndSystem == null) {
return null;
}
@@ -204,6 +210,7 @@ public class PlatformAudio {
sndSystem.setTemporary(srcName, true);
sndSystem.setPitch(srcName, pitch);
sndSystem.setVolume(srcName, volume);
+ sndSystem.setLooping(srcName, repeat);
sndSystem.play(srcName);
return new PaulscodeAudioHandle(srcName);
diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java
index 3a165f4..b510311 100644
--- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java
+++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java
@@ -567,7 +567,11 @@ public class PlatformRuntime {
public static InputStream newGZIPInputStream(InputStream is) throws IOException {
return new GZIPInputStream(is);
}
-
+
+ public static void downloadRemoteURIByteArray(String assetPackageURI, boolean forceCache, final Consumer cb) {
+ downloadRemoteURIByteArray(assetPackageURI, cb);
+ }
+
public static void downloadRemoteURIByteArray(String assetPackageURI, final Consumer cb) {
logger.info("Downloading: {}");
try(InputStream is = (new URL(assetPackageURI)).openStream()) {
diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java
index 5020d8f..b14a084 100644
--- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java
+++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java
@@ -1,7 +1,6 @@
package net.lax1dude.eaglercraft.v1_8.internal;
import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID;
-import net.lax1dude.eaglercraft.v1_8.voice.EnumVoiceChannelPeerState;
import net.lax1dude.eaglercraft.v1_8.voice.EnumVoiceChannelReadyState;
/**
@@ -89,28 +88,8 @@ public class PlatformVoiceClient {
}
- public static EnumVoiceChannelPeerState getPeerState() {
- return EnumVoiceChannelPeerState.LOADING;
- }
-
public static EnumVoiceChannelReadyState getReadyState() {
return EnumVoiceChannelReadyState.NONE;
}
- public static EnumVoiceChannelPeerState getPeerStateConnect() {
- return EnumVoiceChannelPeerState.LOADING;
- }
-
- public static EnumVoiceChannelPeerState getPeerStateInitial() {
- return EnumVoiceChannelPeerState.LOADING;
- }
-
- public static EnumVoiceChannelPeerState getPeerStateDesc() {
- return EnumVoiceChannelPeerState.LOADING;
- }
-
- public static EnumVoiceChannelPeerState getPeerStateIce() {
- return EnumVoiceChannelPeerState.LOADING;
- }
-
}
diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java
index f9cc34b..2068537 100644
--- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java
+++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java
@@ -5,18 +5,8 @@ import dev.onvoid.webrtc.internal.NativeLoader;
import net.lax1dude.eaglercraft.v1_8.EagRuntime;
import net.lax1dude.eaglercraft.v1_8.log4j.LogManager;
import net.lax1dude.eaglercraft.v1_8.log4j.Logger;
+import net.lax1dude.eaglercraft.v1_8.sp.internal.ClientPlatformSingleplayer;
import net.lax1dude.eaglercraft.v1_8.sp.lan.LANPeerEvent;
-import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayLoggerImpl;
-import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayQuery;
-import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayQueryImpl;
-import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayQueryRateLimitDummy;
-import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerRateLimitTracker;
-import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerSocket;
-import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerSocketImpl;
-import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerSocketRateLimitDummy;
-import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayWorldsQuery;
-import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayWorldsQueryImpl;
-import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayWorldsQueryRateLimitDummy;
import org.apache.commons.lang3.SystemUtils;
import org.json.JSONArray;
@@ -50,11 +40,8 @@ public class PlatformWebRTC {
private static final Logger logger = LogManager.getLogger("PlatformWebRTC");
- private static final RelayLoggerImpl loggerImpl = new RelayLoggerImpl(LogManager.getLogger("RelayPacket"));
-
private static final Object lock1 = new Object();
private static final Object lock2 = new Object();
- private static final Object lock3 = new Object();
private static final List scheduledRunnables = new LinkedList<>();
@@ -93,8 +80,6 @@ public class PlatformWebRTC {
return supported;
}
- private static final Map fuckTeaVM = new HashMap<>();
-
private static final Comparator sortTasks = (r1, r2) -> {
return (int)(r1.runAt - r2.runAt);
};
@@ -177,9 +162,17 @@ public class PlatformWebRTC {
synchronized (lock1) {
if (iceCandidate.sdp != null && !iceCandidate.sdp.isEmpty()) {
if (iceCandidates.isEmpty()) {
- scheduleTask(3000l, () -> {
+ final int[] candidateState = new int[2];
+ final Runnable[] runnable = new Runnable[1];
+ scheduleTask(2000l, runnable[0] = () -> {
synchronized (lock1) {
if (peerConnection != null && peerConnection.getConnectionState() != RTCPeerConnectionState.DISCONNECTED) {
+ int trial = ++candidateState[1];
+ if(candidateState[0] != iceCandidates.size() && trial < 3) {
+ candidateState[0] = iceCandidates.size();
+ scheduleTask(2000l, runnable[0]);
+ return;
+ }
clientICECandidate = JSONWriter.valueToString(iceCandidates);
iceCandidates.clear();
}
@@ -382,6 +375,8 @@ public class PlatformWebRTC {
public LANServer client;
public String peerId;
public RTCPeerConnection peerConnection;
+ public RTCDataChannel dataChannel;
+ public String ipcChannel;
public LANPeer(LANServer client, String peerId, RTCPeerConnection peerConnection) {
this.client = client;
@@ -390,10 +385,9 @@ public class PlatformWebRTC {
}
public void disconnect() {
- synchronized (fuckTeaVM) {
- if (fuckTeaVM.get(peerId) != null) {
- fuckTeaVM.remove(peerId).close();
- }
+ if(dataChannel != null) {
+ dataChannel.close();
+ dataChannel = null;
}
peerConnection.close();
peerConnection = null;
@@ -472,16 +466,36 @@ public class PlatformWebRTC {
client.signalRemoteDisconnect(peerId);
}
}
+
+ public void mapIPC(String ipcChannel) {
+ if(this.ipcChannel == null) {
+ if(ipcChannel != null) {
+ this.ipcChannel = ipcChannel;
+ synchronized(this.client.ipcMapList) {
+ this.client.ipcMapList.put(ipcChannel, this);
+ }
+ }
+ }else {
+ if(ipcChannel == null) {
+ synchronized(this.client.ipcMapList) {
+ this.client.ipcMapList.remove(this.ipcChannel);
+ }
+ this.ipcChannel = null;
+ }
+ }
+ }
}
public static class LANServer {
public Set
diff --git a/sources/resources/plugin_download.zip b/sources/resources/plugin_download.zip
index f6df89413c3f5eece5b4f65fb72d48a6f3664788..3da750a0eec13ae6a48c1b494cb9d62ac677787b 100644
GIT binary patch
delta 538807
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