From 551d26dfaa41094a8dcaffca25e170c4745eff54 Mon Sep 17 00:00:00 2001 From: Oliver Anderson Date: Wed, 15 May 2024 18:31:32 -0600 Subject: [PATCH] v1.3.1 Co-Authored-By: ZXMushroom63 <116805577+ZXMushroom63@users.noreply.github.com> Co-Authored-By: radmanplays <95340057+radmanplays@users.noreply.github.com> --- .../block/BlockRedstoneWire.edit.java | 15 +- .../net/minecraft/client/Minecraft.edit.java | 83 +- .../entity/AbstractClientPlayer.edit.java | 24 +- .../minecraft/client/gui/GuiButton.edit.java | 7 +- .../minecraft/client/gui/GuiChat.edit.java | 7 + .../client/gui/GuiCommandBlock.edit.java | 7 + .../client/gui/GuiCustomizeSkin.edit.java | 26 +- .../minecraft/client/gui/GuiIngame.edit.java | 9 +- .../client/gui/GuiIngameMenu.edit.java | 150 +++- .../minecraft/client/gui/GuiOptions.edit.java | 6 +- .../minecraft/client/gui/GuiRepair.edit.java | 7 + .../minecraft/client/gui/GuiScreen.edit.java | 6 +- .../client/gui/GuiScreenBook.edit.java | 7 + .../client/gui/GuiVideoSettings.edit.java | 21 +- .../inventory/GuiContainerCreative.edit.java | 7 + .../gui/inventory/GuiEditSign.edit.java | 7 + .../client/model/ModelPlayer.edit.java | 15 +- .../multiplayer/PlayerControllerMP.edit.java | 3 +- .../network/NetHandlerPlayClient.edit.java | 59 +- .../network/NetworkPlayerInfo.edit.java | 17 +- .../client/renderer/EntityRenderer.edit.java | 38 +- .../client/renderer/RenderGlobal.edit.java | 14 +- .../client/renderer/entity/Render.edit.java | 29 +- .../renderer/entity/RenderManager.edit.java | 28 +- .../renderer/entity/RenderPlayer.edit.java | 16 +- .../entity/RendererLivingEntity.edit.java | 7 +- .../renderer/texture/TextureManager.edit.java | 15 +- .../client/settings/GameSettings.edit.java | 106 ++- .../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/item/EntityEnderCrystal.edit.java | 8 - .../entity/item/EntityEnderPearl.edit.java | 8 - .../item/EntityFireworkRocket.edit.java | 8 - .../network/NetHandlerPlayServer.edit.java | 14 +- .../client/C00PacketLoginStart.edit.java | 20 +- .../minecraft/pathfinding/PathPoint.edit.java | 8 - .../management/ItemInWorldManager.edit.java | 8 - .../ServerConfigurationManager.edit.java | 16 +- .../network/NetHandlerLoginServer.edit.java | 29 +- .../minecraft/util/ResourceLocation.edit.java | 7 +- .../village/VillageDoorInfo.edit.java | 8 - .../net/minecraft/world/World.edit.java | 6 +- .../net/minecraft/world/WorldType.edit.java | 8 - .../world/demo/DemoWorldManager.edit.java | 8 - .../world/gen/ChunkProviderDebug.edit.java | 8 - .../world/gen/ChunkProviderServer.edit.java | 24 +- .../world/gen/layer/IntCache.edit.java | 8 - .../structure/MapGenStructureData.edit.java | 8 - .../structure/StructureBoundingBox.edit.java | 8 - .../world/pathfinder/NodeProcessor.edit.java | 8 - .../assets/minecraft/lang/en_US.edit.lang | 74 +- .../v1_8/internal/PlatformAssets.java | 3 + .../internal/PlatformBufferFunctions.java | 5 +- .../v1_8/internal/PlatformFilesystem.java | 223 ++--- .../v1_8/internal/PlatformInput.java | 13 +- .../v1_8/internal/PlatformOpenGL.java | 17 + .../v1_8/internal/PlatformRuntime.java | 21 +- .../v1_8/internal/PlatformVoiceClient.java | 116 +++ .../internal/buffer/EaglerLWJGLAllocator.java | 26 +- .../buffer/EaglerLWJGLByteBuffer.java | 79 +- .../buffer/EaglerLWJGLFloatBuffer.java | 43 +- .../internal/buffer/EaglerLWJGLIntBuffer.java | 43 +- .../buffer/EaglerLWJGLShortBuffer.java | 43 +- .../v1_8/internal/lwjgl/DebugFilesystem.java | 224 +++++ .../lwjgl/DesktopClientConfigAdapter.java | 5 + .../lwjgl/FilesystemConvertingDialog.java | 78 ++ .../v1_8/internal/lwjgl/JDBCFilesystem.java | 441 ++++++++++ .../lwjgl/JDBCFilesystemConverter.java | 130 +++ .../v1_8/internal/lwjgl/LWJGLEntryPoint.java | 29 +- .../lax1dude/eaglercraft/v1_8/Display.java | 4 + .../eaglercraft/v1_8/EaglercraftVersion.java | 4 +- .../v1_8/internal/IClientConfigAdapter.java | 2 + .../v1_8/opengl/EaglerMeshLoader.java | 172 ++++ .../v1_8/opengl/EaglercraftGPU.java | 44 +- .../v1_8/opengl/GlStateManager.java | 26 +- .../eaglercraft/v1_8/opengl/HighPolyMesh.java | 66 ++ .../ext/deferred/EaglerDeferredPipeline.java | 4 +- .../eaglercraft/v1_8/profile/CapePackets.java | 83 ++ .../eaglercraft/v1_8/profile/CustomCape.java | 58 ++ .../v1_8/profile/DefaultCapes.java | 75 ++ .../v1_8/profile/DefaultSkins.java | 9 +- .../v1_8/profile/EaglerProfile.java | 125 ++- .../v1_8/profile/GuiScreenEditCape.java | 359 ++++++++ .../v1_8/profile/GuiScreenEditProfile.java | 113 ++- .../v1_8/profile/HighPolySkin.java | 113 +++ .../v1_8/profile/RenderHighPoly.java | 471 +++++++++++ .../v1_8/profile/ServerCapeCache.java | 242 ++++++ .../v1_8/profile/ServerSkinCache.java | 1 + .../v1_8/profile/SkinConverter.java | 52 +- .../eaglercraft/v1_8/profile/SkinModel.java | 18 +- .../eaglercraft/v1_8/profile/SkinPackets.java | 3 + .../v1_8/profile/SkinPreviewRenderer.java | 106 ++- .../v1_8/socket/ConnectionHandshake.java | 13 + .../v1_8/sp/gui/GuiScreenAddRelay.java | 3 + .../v1_8/sp/gui/GuiScreenLANConnecting.java | 2 +- .../gui/GuiScreenSingleplayerConnecting.java | 2 +- .../v1_8/sp/gui/GuiShareToLan.java | 4 + .../server/EaglerIntegratedServerWorker.java | 3 + .../v1_8/sp/server/EaglerMinecraftServer.java | 27 + .../v1_8/sp/server/EaglerPlayerList.java | 4 +- .../server/skins/IntegratedCapePackets.java | 110 +++ .../server/skins/IntegratedCapeService.java | 77 ++ .../server/voice/IntegratedVoiceService.java | 255 ++++++ .../voice/IntegratedVoiceSignalPackets.java | 198 +++++ .../v1_8/update/GuiUpdateCheckerOverlay.java | 42 +- .../v1_8/voice/EnumVoiceChannelPeerState.java | 20 + .../voice/EnumVoiceChannelReadyState.java | 20 + .../v1_8/voice/EnumVoiceChannelStatus.java | 20 + .../v1_8/voice/EnumVoiceChannelType.java | 20 + .../eaglercraft/v1_8/voice/ExpiringSet.java | 84 ++ .../eaglercraft/v1_8/voice/GuiVoiceMenu.java | 772 ++++++++++++++++++ .../v1_8/voice/GuiVoiceOverlay.java | 258 ++++++ .../v1_8/voice/VoiceClientController.java | 367 +++++++++ .../v1_8/voice/VoiceSignalPackets.java | 142 ++++ .../v1_8/voice/VoiceTagRenderer.java | 118 +++ sources/resources/assets/eagler/CREDITS.txt | 4 +- .../assets/eagler/capes/01.minecon_2011.png | Bin 0 -> 343 bytes .../assets/eagler/capes/02.minecon_2012.png | Bin 0 -> 347 bytes .../assets/eagler/capes/03.minecon_2013.png | Bin 0 -> 408 bytes .../assets/eagler/capes/04.minecon_2015.png | Bin 0 -> 384 bytes .../assets/eagler/capes/05.minecon_2016.png | Bin 0 -> 346 bytes .../eagler/capes/06.microsoft_account.png | Bin 0 -> 411 bytes .../assets/eagler/capes/07.mapmaker.png | Bin 0 -> 580 bytes .../assets/eagler/capes/08.mojang_old.png | Bin 0 -> 555 bytes .../assets/eagler/capes/09.mojang_new.png | Bin 0 -> 332 bytes .../assets/eagler/capes/10.jira_mod.png | Bin 0 -> 474 bytes .../eagler/capes/11.mojang_very_old.png | Bin 0 -> 694 bytes .../assets/eagler/capes/12.scrolls.png | Bin 0 -> 737 bytes .../assets/eagler/capes/13.cobalt.png | Bin 0 -> 917 bytes .../assets/eagler/capes/14.translator.png | Bin 0 -> 774 bytes .../eagler/capes/15.millionth_account.png | Bin 0 -> 859 bytes .../assets/eagler/capes/16.prismarine.png | Bin 0 -> 1007 bytes .../assets/eagler/capes/17.snowman.png | Bin 0 -> 578 bytes .../assets/eagler/capes/18.spade.png | Bin 0 -> 557 bytes .../assets/eagler/capes/19.birthday.png | Bin 0 -> 876 bytes .../resources/assets/eagler/capes/20.db.png | Bin 0 -> 609 bytes .../assets/eagler/mesh/charles.fallback.png | Bin 0 -> 59749 bytes .../resources/assets/eagler/mesh/charles.png | Bin 0 -> 123138 bytes .../resources/assets/eagler/mesh/charles0.mdl | Bin 0 -> 5517 bytes .../resources/assets/eagler/mesh/charles1.mdl | Bin 0 -> 15867 bytes .../resources/assets/eagler/mesh/charles2.mdl | Bin 0 -> 705 bytes .../eagler/mesh/laxativedude.fallback.png | Bin 0 -> 30405 bytes .../assets/eagler/mesh/laxativedude.png | Bin 0 -> 53774 bytes .../assets/eagler/mesh/laxativedude0.mdl | Bin 0 -> 13905 bytes .../assets/eagler/mesh/laxativedude1.mdl | Bin 0 -> 4017 bytes .../assets/eagler/mesh/laxativedude2.mdl | Bin 0 -> 4017 bytes .../assets/eagler/mesh/laxativedude3.mdl | Bin 0 -> 705 bytes .../assets/eagler/mesh/longarms.fallback.png | Bin 0 -> 20604 bytes .../resources/assets/eagler/mesh/longarms.png | Bin 0 -> 42211 bytes .../assets/eagler/mesh/longarms0.mdl | Bin 0 -> 23817 bytes .../assets/eagler/mesh/longarms1.mdl | Bin 0 -> 4425 bytes .../assets/eagler/mesh/longarms2.mdl | Bin 0 -> 705 bytes .../eagler/mesh/weirdclimber.fallback.png | Bin 0 -> 22914 bytes .../assets/eagler/mesh/weirdclimber.png | Bin 0 -> 37504 bytes .../assets/eagler/mesh/weirdclimber0.mdl | Bin 0 -> 9921 bytes .../assets/eagler/mesh/weirdclimber1.mdl | Bin 0 -> 7785 bytes .../assets/eagler/mesh/weirdclimber2.mdl | Bin 0 -> 705 bytes .../assets/eagler/mesh/winston.fallback.png | Bin 0 -> 37932 bytes .../resources/assets/eagler/mesh/winston.png | Bin 0 -> 73074 bytes .../resources/assets/eagler/mesh/winston0.mdl | Bin 0 -> 19989 bytes .../resources/assets/eagler/mesh/winston1.mdl | Bin 0 -> 705 bytes sources/resources/plugin_download.zip | Bin 255923 -> 253833 bytes sources/resources/plugin_version.json | 2 +- .../javascript/OfflineDownloadTemplate.txt | 3 + .../v1_8/internal/PlatformAudio.java | 4 +- .../internal/PlatformBufferFunctions.java | 5 +- .../v1_8/internal/PlatformFilesystem.java | 6 +- .../v1_8/internal/PlatformInput.java | 47 +- .../v1_8/internal/PlatformOpenGL.java | 56 +- .../v1_8/internal/PlatformRuntime.java | 44 +- .../v1_8/internal/PlatformVoiceClient.java | 439 ++++++++++ .../buffer/EaglerArrayBufferAllocator.java | 136 ++- .../buffer/EaglerArrayByteBuffer.java | 85 +- .../buffer/EaglerArrayFloatBuffer.java | 81 +- .../internal/buffer/EaglerArrayIntBuffer.java | 81 +- .../buffer/EaglerArrayShortBuffer.java | 81 +- .../v1_8/internal/teavm/ClientMain.java | 5 +- .../teavm/TeaVMClientConfigAdapter.java | 10 + .../v1_8/internal/teavm/TeaVMUtils.java | 32 + .../teavm/opts/JSEaglercraftXOptsRoot.java | 3 + 183 files changed, 7470 insertions(+), 974 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/entity/item/EntityFireworkRocket.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/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java create mode 100644 sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DebugFilesystem.java create mode 100644 sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FilesystemConvertingDialog.java create mode 100644 sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystem.java create mode 100644 sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystemConverter.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglerMeshLoader.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/HighPolyMesh.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/CapePackets.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/CustomCape.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultCapes.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditCape.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/HighPolySkin.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/RenderHighPoly.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerCapeCache.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapePackets.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapeService.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/voice/IntegratedVoiceService.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/voice/IntegratedVoiceSignalPackets.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelPeerState.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelReadyState.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelStatus.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelType.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/ExpiringSet.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceMenu.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceOverlay.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceClientController.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceSignalPackets.java create mode 100644 sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceTagRenderer.java create mode 100644 sources/resources/assets/eagler/capes/01.minecon_2011.png create mode 100644 sources/resources/assets/eagler/capes/02.minecon_2012.png create mode 100644 sources/resources/assets/eagler/capes/03.minecon_2013.png create mode 100644 sources/resources/assets/eagler/capes/04.minecon_2015.png create mode 100644 sources/resources/assets/eagler/capes/05.minecon_2016.png create mode 100644 sources/resources/assets/eagler/capes/06.microsoft_account.png create mode 100644 sources/resources/assets/eagler/capes/07.mapmaker.png create mode 100644 sources/resources/assets/eagler/capes/08.mojang_old.png create mode 100644 sources/resources/assets/eagler/capes/09.mojang_new.png create mode 100644 sources/resources/assets/eagler/capes/10.jira_mod.png create mode 100644 sources/resources/assets/eagler/capes/11.mojang_very_old.png create mode 100644 sources/resources/assets/eagler/capes/12.scrolls.png create mode 100644 sources/resources/assets/eagler/capes/13.cobalt.png create mode 100644 sources/resources/assets/eagler/capes/14.translator.png create mode 100644 sources/resources/assets/eagler/capes/15.millionth_account.png create mode 100644 sources/resources/assets/eagler/capes/16.prismarine.png create mode 100644 sources/resources/assets/eagler/capes/17.snowman.png create mode 100644 sources/resources/assets/eagler/capes/18.spade.png create mode 100644 sources/resources/assets/eagler/capes/19.birthday.png create mode 100644 sources/resources/assets/eagler/capes/20.db.png create mode 100644 sources/resources/assets/eagler/mesh/charles.fallback.png create mode 100644 sources/resources/assets/eagler/mesh/charles.png create mode 100644 sources/resources/assets/eagler/mesh/charles0.mdl create mode 100644 sources/resources/assets/eagler/mesh/charles1.mdl create mode 100644 sources/resources/assets/eagler/mesh/charles2.mdl create mode 100644 sources/resources/assets/eagler/mesh/laxativedude.fallback.png create mode 100644 sources/resources/assets/eagler/mesh/laxativedude.png create mode 100644 sources/resources/assets/eagler/mesh/laxativedude0.mdl create mode 100644 sources/resources/assets/eagler/mesh/laxativedude1.mdl create mode 100644 sources/resources/assets/eagler/mesh/laxativedude2.mdl create mode 100644 sources/resources/assets/eagler/mesh/laxativedude3.mdl create mode 100644 sources/resources/assets/eagler/mesh/longarms.fallback.png create mode 100644 sources/resources/assets/eagler/mesh/longarms.png create mode 100644 sources/resources/assets/eagler/mesh/longarms0.mdl create mode 100644 sources/resources/assets/eagler/mesh/longarms1.mdl create mode 100644 sources/resources/assets/eagler/mesh/longarms2.mdl create mode 100644 sources/resources/assets/eagler/mesh/weirdclimber.fallback.png create mode 100644 sources/resources/assets/eagler/mesh/weirdclimber.png create mode 100644 sources/resources/assets/eagler/mesh/weirdclimber0.mdl create mode 100644 sources/resources/assets/eagler/mesh/weirdclimber1.mdl create mode 100644 sources/resources/assets/eagler/mesh/weirdclimber2.mdl create mode 100644 sources/resources/assets/eagler/mesh/winston.fallback.png create mode 100644 sources/resources/assets/eagler/mesh/winston.png create mode 100644 sources/resources/assets/eagler/mesh/winston0.mdl create mode 100644 sources/resources/assets/eagler/mesh/winston1.mdl create mode 100644 sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java diff --git a/patches/minecraft/net/minecraft/block/BlockRedstoneWire.edit.java b/patches/minecraft/net/minecraft/block/BlockRedstoneWire.edit.java index 33edfc7..c0e3dec 100644 --- a/patches/minecraft/net/minecraft/block/BlockRedstoneWire.edit.java +++ b/patches/minecraft/net/minecraft/block/BlockRedstoneWire.edit.java @@ -44,7 +44,7 @@ ~ BlockPos posTmp = new BlockPos(0, 0, 0); ~ Block block = worldIn.getBlockState(blockpos).getBlock(); ~ if (!canConnectTo(worldIn.getBlockState(blockpos), direction) && (block.isBlockNormalCube() -~ || !canConnectUpwardsTo(worldIn.getBlockState(blockpos.offsetEvenFaster(EnumFacing.UP, posTmp))))) { +~ || !canConnectUpwardsTo(worldIn.getBlockState(blockpos.offsetEvenFaster(EnumFacing.DOWN, posTmp))))) { > CHANGE 2 : 3 @ 2 : 3 @@ -74,8 +74,19 @@ ~ BlockPos blockpos = pos1.offsetEvenFaster(enumfacing, tmp); ~ boolean flag = blockpos.x != pos2.x || blockpos.z != pos2.z; -> CHANGE 35 : 37 @ 35 : 37 +> CHANGE 7 : 9 @ 7 : 8 +~ ++blockpos.y; +~ l = this.getMaxCurrentStrength(worldIn, blockpos, l); + +> CHANGE 3 : 5 @ 3 : 4 + +~ --blockpos.y; +~ l = this.getMaxCurrentStrength(worldIn, blockpos, l); + +> CHANGE 23 : 26 @ 23 : 25 + +~ facings = EnumFacing._VALUES; ~ for (int m = 0; m < facings.length; ++m) { ~ this.blocksNeedingUpdate.add(pos1.offset(facings[m])); diff --git a/patches/minecraft/net/minecraft/client/Minecraft.edit.java b/patches/minecraft/net/minecraft/client/Minecraft.edit.java index 84db5cf..b3360a0 100644 --- a/patches/minecraft/net/minecraft/client/Minecraft.edit.java +++ b/patches/minecraft/net/minecraft/client/Minecraft.edit.java @@ -22,7 +22,7 @@ > DELETE 1 @ 1 : 4 -> CHANGE 1 : 57 @ 1 : 4 +> CHANGE 1 : 60 @ 1 : 4 ~ ~ import net.eaglerforge.EaglerForge; @@ -53,6 +53,7 @@ ~ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; ~ import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerFolderResourcePack; ~ import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerFontRenderer; +~ import net.lax1dude.eaglercraft.v1_8.opengl.EaglerMeshLoader; ~ import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; ~ import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; ~ import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; @@ -80,6 +81,8 @@ ~ import net.lax1dude.eaglercraft.v1_8.sp.gui.GuiScreenSingleplayerConnecting; ~ import net.lax1dude.eaglercraft.v1_8.sp.lan.LANServerController; ~ import net.lax1dude.eaglercraft.v1_8.update.RelayUpdateChecker; +~ import net.lax1dude.eaglercraft.v1_8.voice.GuiVoiceOverlay; +~ import net.lax1dude.eaglercraft.v1_8.voice.VoiceClientController; > DELETE 2 @ 2 : 4 @@ -174,12 +177,18 @@ + public int bungeeOutdatedMsgTimer = 0; + private boolean isLANOpen = false; -> INSERT 1 : 5 @ 1 +> INSERT 1 : 11 @ 1 + public ModAPI modapi; + + public SkullCommand eagskullCommand; + ++ public GuiVoiceOverlay voiceOverlay; ++ ++ public float startZoomValue = 18.0f; ++ public float adjustedZoomValue = 18.0f; ++ public boolean isZoomKey = false; ++ > CHANGE 2 : 3 @ 2 : 5 @@ -261,7 +270,7 @@ ~ this.standardGalacticFontRenderer = new EaglerFontRenderer(this.gameSettings, -> INSERT 5 : 11 @ 5 +> INSERT 5 : 12 @ 5 + this.mcResourceManager.registerReloadListener(new ShaderPackInfoReloadListener()); + this.mcResourceManager.registerReloadListener(PBRTextureMapUtils.blockMaterialConstants); @@ -269,6 +278,7 @@ + this.mcResourceManager.registerReloadListener(new MetalsLUT()); + this.mcResourceManager.registerReloadListener(new EmissiveItems()); + this.mcResourceManager.registerReloadListener(new BlockVertexIDs()); ++ this.mcResourceManager.registerReloadListener(new EaglerMeshLoader()); > CHANGE 3 : 4 @ 3 : 4 @@ -286,9 +296,12 @@ + SkinPreviewRenderer.initialize(); -> INSERT 2 : 11 @ 2 +> INSERT 2 : 14 @ 2 + this.eagskullCommand = new SkullCommand(this); ++ this.voiceOverlay = new GuiVoiceOverlay(this); ++ ScaledResolution voiceRes = new ScaledResolution(this); ++ this.voiceOverlay.setResolution(voiceRes.getScaledWidth(), voiceRes.getScaledHeight()); + + ServerList.initServerList(this); + EaglerProfile.read(); @@ -510,7 +523,11 @@ + Mouse.tickCursorShape(); -> DELETE 39 @ 39 : 57 +> INSERT 5 : 6 @ 5 + ++ Display.setVSync(this.gameSettings.enableVsync); + +> DELETE 34 @ 34 : 52 > CHANGE 39 : 40 @ 39 : 40 @@ -546,12 +563,20 @@ ~ Display.toggleFullscreen(); -> DELETE 11 @ 11 : 12 - -> DELETE 2 @ 2 : 10 - > INSERT 5 : 6 @ 5 ++ ScaledResolution scaledresolution = new ScaledResolution(this); + +> DELETE 1 @ 1 : 2 + +> DELETE 4 @ 4 : 6 + +> CHANGE 1 : 2 @ 1 : 7 + +~ this.voiceOverlay.setResolution(scaledresolution.getScaledWidth(), scaledresolution.getScaledHeight()); + +> INSERT 7 : 8 @ 7 + + Minecraft.getMinecraft().modapi.onFrame(); > INSERT 4 : 23 @ 4 @@ -576,7 +601,13 @@ + RelayUpdateChecker.runTick(); + -> INSERT 15 : 16 @ 15 +> INSERT 5 : 8 @ 5 + ++ this.mcProfiler.endStartSection("eaglerVoice"); ++ VoiceClientController.tickVoiceClient(this); ++ + +> INSERT 10 : 11 @ 10 + GlStateManager.viewport(0, 0, displayWidth, displayHeight); // to be safe @@ -605,7 +636,13 @@ ~ return Minecraft.this.currentScreen.getClass().getName(); -> CHANGE 40 : 42 @ 40 : 41 +> CHANGE 25 : 28 @ 25 : 26 + +~ if (this.isZoomKey) { +~ this.adjustedZoomValue = MathHelper.clamp_float(adjustedZoomValue - j * 4.0f, 5.0f, 32.0f); +~ } else if (this.thePlayer.isSpectator()) { + +> CHANGE 14 : 16 @ 14 : 15 ~ if ((!this.inGameHasFocus || !Mouse.isActuallyGrabbed()) && Mouse.getEventButtonState()) { ~ this.inGameHasFocus = false; @@ -654,7 +691,16 @@ + GlStateManager.recompileShaders(); -> INSERT 163 : 164 @ 163 +> INSERT 71 : 77 @ 71 + ++ boolean zoomKey = this.gameSettings.keyBindZoomCamera.isKeyDown(); ++ if (zoomKey != isZoomKey) { ++ adjustedZoomValue = startZoomValue; ++ isZoomKey = zoomKey; ++ } ++ + +> INSERT 92 : 93 @ 92 + this.eagskullCommand.tick(); @@ -705,8 +751,9 @@ + } + -> CHANGE 6 : 16 @ 6 : 54 +> CHANGE 6 : 17 @ 6 : 54 +~ Minecraft.getMinecraft().getRenderManager().setEnableFNAWSkins(this.gameSettings.enableFNAWSkins); ~ session.reset(); ~ SingleplayerServerController.launchEaglercraftServer(folderName, gameSettings.difficulty.getDifficultyId(), ~ Math.max(gameSettings.renderDistanceChunks, 2), worldSettingsIn); @@ -840,7 +887,7 @@ > DELETE 26 @ 26 : 34 -> INSERT 7 : 27 @ 7 +> INSERT 7 : 35 @ 7 + + public static int getGLMaximumTextureSize() { @@ -862,5 +909,13 @@ + public void clearTitles() { + ingameGUI.displayTitle(null, null, -1, -1, -1); + } ++ ++ public boolean getEnableFNAWSkins() { ++ boolean ret = this.gameSettings.enableFNAWSkins; ++ if (this.thePlayer != null) { ++ ret &= this.thePlayer.sendQueue.currentFNAWSkinAllowedState; ++ } ++ return ret; ++ } > EOF diff --git a/patches/minecraft/net/minecraft/client/entity/AbstractClientPlayer.edit.java b/patches/minecraft/net/minecraft/client/entity/AbstractClientPlayer.edit.java index 4df33f3..7a5051d 100644 --- a/patches/minecraft/net/minecraft/client/entity/AbstractClientPlayer.edit.java +++ b/patches/minecraft/net/minecraft/client/entity/AbstractClientPlayer.edit.java @@ -5,14 +5,34 @@ # Version: 1.0 # Author: lax1dude -> CHANGE 2 : 3 @ 2 : 4 +> CHANGE 2 : 4 @ 2 : 4 ~ import net.lax1dude.eaglercraft.v1_8.mojang.authlib.GameProfile; +~ import net.lax1dude.eaglercraft.v1_8.profile.SkinModel; > DELETE 2 @ 2 : 6 > DELETE 6 @ 6 : 7 -> DELETE 44 @ 44 : 62 +> INSERT 6 : 14 @ 6 + ++ public long eaglerHighPolyAnimationTick = System.currentTimeMillis(); ++ public float eaglerHighPolyAnimationFloat1 = 0.0f; ++ public float eaglerHighPolyAnimationFloat2 = 0.0f; ++ public float eaglerHighPolyAnimationFloat3 = 0.0f; ++ public float eaglerHighPolyAnimationFloat4 = 0.0f; ++ public float eaglerHighPolyAnimationFloat5 = 0.0f; ++ public float eaglerHighPolyAnimationFloat6 = 0.0f; ++ + +> DELETE 38 @ 38 : 56 + +> INSERT 6 : 11 @ 6 + ++ public SkinModel getEaglerSkinModel() { ++ NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo(); ++ return networkplayerinfo == null ? SkinModel.STEVE : networkplayerinfo.getEaglerSkinModel(); ++ } ++ > EOF diff --git a/patches/minecraft/net/minecraft/client/gui/GuiButton.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiButton.edit.java index b992b7f..5f7489b 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiButton.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiButton.edit.java @@ -13,7 +13,12 @@ > DELETE 3 @ 3 : 6 -> INSERT 13 : 14 @ 13 +> CHANGE 4 : 6 @ 4 : 6 + +~ public int width; +~ public int height; + +> INSERT 7 : 8 @ 7 + public float fontScale = 1.0f; diff --git a/patches/minecraft/net/minecraft/client/gui/GuiChat.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiChat.edit.java index 84fa26e..6b77b96 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiChat.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiChat.edit.java @@ -117,4 +117,11 @@ ~ for (int i = 0; i < parArrayOfString.length; ++i) { ~ String s = parArrayOfString[i]; +> INSERT 24 : 28 @ 24 + ++ ++ public boolean blockPTTKey() { ++ return true; ++ } + > EOF diff --git a/patches/minecraft/net/minecraft/client/gui/GuiCommandBlock.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiCommandBlock.edit.java index f09a2a3..b90ff79 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiCommandBlock.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiCommandBlock.edit.java @@ -26,4 +26,11 @@ ~ protected void mouseClicked(int parInt1, int parInt2, int parInt3) { +> INSERT 46 : 50 @ 46 + ++ ++ public boolean blockPTTKey() { ++ return commandTextField.isFocused(); ++ } + > EOF diff --git a/patches/minecraft/net/minecraft/client/gui/GuiCustomizeSkin.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiCustomizeSkin.edit.java index 5697dbb..66f4b38 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiCustomizeSkin.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiCustomizeSkin.edit.java @@ -7,17 +7,37 @@ > DELETE 2 @ 2 : 5 -> CHANGE 15 : 18 @ 15 : 16 +> INSERT 7 : 9 @ 7 + ++ private GuiButton enableFNAWSkinsButton; ++ + +> CHANGE 8 : 11 @ 8 : 9 ~ EnumPlayerModelParts[] parts = EnumPlayerModelParts._VALUES; ~ for (int k = 0; k < parts.length; ++k) { ~ EnumPlayerModelParts enumplayermodelparts = parts[k]; -> CHANGE 14 : 15 @ 14 : 15 +> CHANGE 10 : 14 @ 10 : 11 + +~ this.buttonList.add(enableFNAWSkinsButton = new GuiButton(201, this.width / 2 - 100, +~ this.height / 6 + 10 + 24 * (i >> 1), I18n.format("options.skinCustomisation.enableFNAWSkins") + ": " +~ + I18n.format(mc.gameSettings.enableFNAWSkins ? "options.on" : "options.off"))); +~ this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 40 + 24 * (i >> 1), + +> CHANGE 3 : 4 @ 3 : 4 ~ protected void actionPerformed(GuiButton parGuiButton) { -> CHANGE 27 : 32 @ 27 : 28 +> INSERT 4 : 9 @ 4 + ++ } else if (parGuiButton.id == 201) { ++ mc.gameSettings.enableFNAWSkins = !mc.gameSettings.enableFNAWSkins; ++ mc.getRenderManager().setEnableFNAWSkins(mc.getEnableFNAWSkins()); ++ enableFNAWSkinsButton.displayString = I18n.format("options.skinCustomisation.enableFNAWSkins") + ": " ++ + I18n.format(mc.gameSettings.enableFNAWSkins ? "options.on" : "options.off"); + +> CHANGE 23 : 28 @ 23 : 24 ~ /* ~ * TODO: I changed this to getUnformattedText() from getFormattedText() because diff --git a/patches/minecraft/net/minecraft/client/gui/GuiIngame.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiIngame.edit.java index 8661a1e..1162f86 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiIngame.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiIngame.edit.java @@ -57,7 +57,14 @@ ~ this.overlayDebug.renderDebugInfo(scaledresolution); -> INSERT 87 : 90 @ 87 +> INSERT 83 : 87 @ 83 + ++ if (this.mc.currentScreen == null) { ++ this.mc.voiceOverlay.drawOverlay(); ++ } ++ + +> INSERT 4 : 7 @ 4 + if (this.mc.gameSettings.hudWorld && (mc.currentScreen == null || !(mc.currentScreen instanceof GuiChat))) { + j -= 10; diff --git a/patches/minecraft/net/minecraft/client/gui/GuiIngameMenu.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiIngameMenu.edit.java index 6fbebb1..2f77141 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiIngameMenu.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiIngameMenu.edit.java @@ -5,8 +5,9 @@ # Version: 1.0 # Author: lax1dude -> CHANGE 2 : 11 @ 2 : 9 +> CHANGE 2 : 14 @ 2 : 9 +~ import net.lax1dude.eaglercraft.v1_8.EagRuntime; ~ import net.lax1dude.eaglercraft.v1_8.Mouse; ~ import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; ~ import net.lax1dude.eaglercraft.v1_8.sp.SingleplayerServerController; @@ -15,6 +16,8 @@ ~ import net.lax1dude.eaglercraft.v1_8.sp.gui.GuiShareToLan; ~ import net.lax1dude.eaglercraft.v1_8.sp.lan.LANServerController; ~ import net.lax1dude.eaglercraft.v1_8.update.GuiUpdateCheckerOverlay; +~ import net.lax1dude.eaglercraft.v1_8.voice.GuiVoiceMenu; +~ import net.minecraft.client.Minecraft; ~ import net.minecraft.client.audio.PositionedSoundRecord; > CHANGE 4 : 8 @ 4 : 5 @@ -26,16 +29,20 @@ > DELETE 2 @ 2 : 4 -> INSERT 1 : 11 @ 1 +> INSERT 1 : 15 @ 1 + private GuiButton lanButton; + + boolean hasSentAutoSave = !SingleplayerServerController.isWorldRunning(); + + private GuiUpdateCheckerOverlay updateCheckerOverlay; ++ private GuiVoiceMenu voiceMenu; + + public GuiIngameMenu() { + updateCheckerOverlay = new GuiUpdateCheckerOverlay(true, this); ++ if (EagRuntime.getConfiguration().isAllowVoiceClient()) { ++ voiceMenu = new GuiVoiceMenu(this); ++ } + } + @@ -100,8 +107,12 @@ ~ } ~ break; -> CHANGE 6 : 9 @ 6 : 7 +> CHANGE 6 : 13 @ 6 : 7 +~ if (EagRuntime.getConfiguration().isAllowVoiceClient() +~ && (!mc.isSingleplayer() || LANServerController.isHostingLAN())) { +~ voiceMenu.updateScreen(); +~ } ~ if (Mouse.isActuallyGrabbed()) { ~ Mouse.setGrabbed(false); ~ } @@ -110,45 +121,76 @@ ~ this.drawCenteredString(this.fontRendererObj, I18n.format("menu.game", new Object[0]), this.width / 2, 20, -> INSERT 1 : 35 @ 1 +> CHANGE 1 : 55 @ 1 : 2 + +~ +~ this.updateCheckerOverlay.drawScreen(i, j, f); +~ +~ if (LANServerController.isLANOpen()) { +~ int offset = this.updateCheckerOverlay.getSharedWorldInfoYOffset(); +~ String str = I18n.format("lanServer.pauseMenu0"); +~ drawString(fontRendererObj, str, 6, 10 + offset, 0xFFFF55); +~ +~ if (mc.gameSettings.hideJoinCode) { +~ GlStateManager.pushMatrix(); +~ GlStateManager.translate(7.0f, 25.0f + offset, 0.0f); +~ GlStateManager.scale(0.75f, 0.75f, 0.75f); +~ str = I18n.format("lanServer.showCode"); +~ int w = fontRendererObj.getStringWidth(str); +~ boolean hover = i > 4 && i < 8 + w * 3 / 4 && j > 24 + offset && j < 25 + offset + 8; +~ drawString(fontRendererObj, EnumChatFormatting.UNDERLINE + str, 0, 0, hover ? 0xEEEEAA : 0xCCCC55); +~ GlStateManager.popMatrix(); +~ } else { +~ int w = fontRendererObj.getStringWidth(str); +~ GlStateManager.pushMatrix(); +~ GlStateManager.translate(6 + w + 3, 11 + offset, 0.0f); +~ GlStateManager.scale(0.75f, 0.75f, 0.75f); +~ str = I18n.format("lanServer.hideCode"); +~ int w2 = fontRendererObj.getStringWidth(str); +~ boolean hover = i > 6 + w + 2 && i < 6 + w + 3 + w2 * 3 / 4 && j > 11 + offset - 1 +~ && j < 11 + offset + 6; +~ drawString(fontRendererObj, EnumChatFormatting.UNDERLINE + str, 0, 0, hover ? 0xEEEEAA : 0xCCCC55); +~ GlStateManager.popMatrix(); +~ +~ drawString( +~ fontRendererObj, EnumChatFormatting.GRAY + I18n.format("lanServer.pauseMenu1") + " " +~ + EnumChatFormatting.RESET + LANServerController.getCurrentURI(), +~ 6, 25 + offset, 0xFFFFFF); +~ drawString( +~ fontRendererObj, EnumChatFormatting.GRAY + I18n.format("lanServer.pauseMenu2") + " " +~ + EnumChatFormatting.RESET + LANServerController.getCurrentCode(), +~ 6, 35 + offset, 0xFFFFFF); +~ } +~ } +~ +~ try { +~ if (EagRuntime.getConfiguration().isAllowVoiceClient() +~ && (!mc.isSingleplayer() || LANServerController.isHostingLAN())) { +~ if (voiceMenu.isBlockingInput()) { +~ super.drawScreen(0, 0, f); +~ } else { +~ super.drawScreen(i, j, f); +~ } +~ voiceMenu.drawScreen(i, j, f); +~ } else { +~ super.drawScreen(i, j, f); +~ } +~ } catch (GuiVoiceMenu.AbortedException ex) { +~ } + +> INSERT 1 : 80 @ 1 + -+ this.updateCheckerOverlay.drawScreen(i, j, f); -+ -+ if (LANServerController.isLANOpen()) { -+ String str = I18n.format("lanServer.pauseMenu0"); -+ drawString(fontRendererObj, str, 6, 32, 0xFFFF55); -+ -+ if (mc.gameSettings.hideJoinCode) { -+ GlStateManager.pushMatrix(); -+ GlStateManager.translate(7.0f, 47.0f, 0.0f); -+ GlStateManager.scale(0.75f, 0.75f, 0.75f); -+ str = I18n.format("lanServer.showCode"); -+ int w = fontRendererObj.getStringWidth(str); -+ boolean hover = i > 6 && i < 8 + w * 3 / 4 && j > 46 && j < 47 + 8; -+ drawString(fontRendererObj, EnumChatFormatting.UNDERLINE + str, 0, 0, hover ? 0xEEEEAA : 0xCCCC55); -+ GlStateManager.popMatrix(); -+ } else { -+ int w = fontRendererObj.getStringWidth(str); -+ GlStateManager.pushMatrix(); -+ GlStateManager.translate(6 + w + 3, 33, 0.0f); -+ GlStateManager.scale(0.75f, 0.75f, 0.75f); -+ str = I18n.format("lanServer.hideCode"); -+ int w2 = fontRendererObj.getStringWidth(str); -+ boolean hover = i > 6 + w + 2 && i < 6 + w + 3 + w2 * 3 / 4 && j > 33 - 1 && j < 33 + 6; -+ drawString(fontRendererObj, EnumChatFormatting.UNDERLINE + str, 0, 0, hover ? 0xEEEEAA : 0xCCCC55); -+ GlStateManager.popMatrix(); -+ -+ drawString(fontRendererObj, EnumChatFormatting.GRAY + I18n.format("lanServer.pauseMenu1") + " " -+ + EnumChatFormatting.RESET + LANServerController.getCurrentURI(), 6, 47, 0xFFFFFF); -+ drawString(fontRendererObj, EnumChatFormatting.GRAY + I18n.format("lanServer.pauseMenu2") + " " -+ + EnumChatFormatting.RESET + LANServerController.getCurrentCode(), 6, 57, 0xFFFFFF); ++ protected void keyTyped(char par1, int par2) { ++ try { ++ if (EagRuntime.getConfiguration().isAllowVoiceClient() ++ && (!mc.isSingleplayer() || LANServerController.isHostingLAN())) { ++ voiceMenu.keyTyped(par1, par2); + } ++ super.keyTyped(par1, par2); ++ } catch (GuiVoiceMenu.AbortedException ex) { + } -+ - -> INSERT 2 : 42 @ 2 - ++ } + + public void confirmClicked(boolean par1, int par2) { + mc.displayGuiScreen(this); @@ -162,11 +204,20 @@ + } + + protected void mouseClicked(int par1, int par2, int par3) { ++ try { ++ if (EagRuntime.getConfiguration().isAllowVoiceClient() ++ && (!mc.isSingleplayer() || LANServerController.isHostingLAN())) { ++ voiceMenu.mouseClicked(par1, par2, par3); ++ } ++ } catch (GuiVoiceMenu.AbortedException ex) { ++ return; ++ } + if (par3 == 0) { ++ int offset = this.updateCheckerOverlay.getSharedWorldInfoYOffset(); + if (mc.gameSettings.hideJoinCode) { + String str = I18n.format("lanServer.showCode"); + int w = fontRendererObj.getStringWidth(str); -+ if (par1 > 6 && par1 < 8 + w * 3 / 4 && par2 > 46 && par2 < 47 + 8) { ++ if (par1 > 4 && par1 < 8 + w * 3 / 4 && par2 > 24 + offset && par2 < 25 + offset + 8) { + mc.gameSettings.hideJoinCode = false; + this.mc.getSoundHandler() + .playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); @@ -177,7 +228,8 @@ + int w = fontRendererObj.getStringWidth(str); + str = I18n.format("lanServer.hideCode"); + int w2 = fontRendererObj.getStringWidth(str); -+ if (par1 > 6 + w + 2 && par1 < 6 + w + 3 + w2 * 3 / 4 && par2 > 33 - 1 && par2 < 33 + 6) { ++ if (par1 > 6 + w + 2 && par1 < 6 + w + 3 + w2 * 3 / 4 && par2 > 11 + offset - 1 ++ && par2 < 11 + offset + 6) { + mc.gameSettings.hideJoinCode = true; + this.mc.getSoundHandler() + .playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); @@ -189,5 +241,23 @@ + this.updateCheckerOverlay.mouseClicked(par1, par2, par3); + super.mouseClicked(par1, par2, par3); + } ++ ++ public void setWorldAndResolution(Minecraft par1Minecraft, int par2, int par3) { ++ super.setWorldAndResolution(par1Minecraft, par2, par3); ++ if (EagRuntime.getConfiguration().isAllowVoiceClient()) { ++ voiceMenu.setResolution(par1Minecraft, par2, par3); ++ } ++ } ++ ++ protected void mouseReleased(int par1, int par2, int par3) { ++ try { ++ if (EagRuntime.getConfiguration().isAllowVoiceClient() ++ && (!mc.isSingleplayer() || LANServerController.isHostingLAN())) { ++ voiceMenu.mouseReleased(par1, par2, par3); ++ } ++ super.mouseReleased(par1, par2, par3); ++ } catch (GuiVoiceMenu.AbortedException ex) { ++ } ++ } > EOF diff --git a/patches/minecraft/net/minecraft/client/gui/GuiOptions.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiOptions.edit.java index b818f0a..726b582 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiOptions.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiOptions.edit.java @@ -59,7 +59,11 @@ ~ I18n.format("options.debugConsoleButton", new Object[0]))); ~ btn.enabled = EagRuntime.getPlatformType() != EnumPlatformType.DESKTOP; -> INSERT 17 : 18 @ 17 +> CHANGE 10 : 11 @ 10 : 11 + +~ return chatcomponenttext.getUnformattedText(); + +> INSERT 6 : 7 @ 6 + SingleplayerServerController.setDifficulty(-1); diff --git a/patches/minecraft/net/minecraft/client/gui/GuiRepair.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiRepair.edit.java index c1eb6f3..e57581c 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiRepair.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiRepair.edit.java @@ -28,4 +28,11 @@ ~ protected void mouseClicked(int parInt1, int parInt2, int parInt3) { +> INSERT 46 : 50 @ 46 + ++ ++ public boolean blockPTTKey() { ++ return nameField.isFocused(); ++ } + > EOF diff --git a/patches/minecraft/net/minecraft/client/gui/GuiScreen.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiScreen.edit.java index 54c3566..b6d8ab3 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiScreen.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiScreen.edit.java @@ -189,11 +189,15 @@ ~ private void openWebLink(String parURI) { ~ EagRuntime.openLink(parURI); -> INSERT 34 : 38 @ 34 +> INSERT 34 : 42 @ 34 + + public boolean shouldHangupIntegratedServer() { + return true; + } ++ ++ public boolean blockPTTKey() { ++ return false; ++ } > EOF diff --git a/patches/minecraft/net/minecraft/client/gui/GuiScreenBook.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiScreenBook.edit.java index 40a4c80..9fde905 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiScreenBook.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiScreenBook.edit.java @@ -42,4 +42,11 @@ ~ protected void mouseClicked(int parInt1, int parInt2, int parInt3) { +> INSERT 102 : 106 @ 102 + ++ ++ public boolean blockPTTKey() { ++ return this.bookIsUnsigned; ++ } + > EOF diff --git a/patches/minecraft/net/minecraft/client/gui/GuiVideoSettings.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiVideoSettings.edit.java index 28eff5b..4575877 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiVideoSettings.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiVideoSettings.edit.java @@ -9,11 +9,20 @@ ~ -> CHANGE 12 : 17 @ 12 : 15 +> INSERT 8 : 11 @ 8 -~ 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.HUD_FPS, GameSettings.Options.HUD_COORDS, ++ /** ++ * + An array of all of GameSettings.Options's video options. ++ */ + +> CHANGE 2 : 10 @ 2 : 7 + +~ GameSettings.Options.FRAMERATE_LIMIT, GameSettings.Options.EAGLER_VSYNC, GameSettings.Options.ANAGLYPH, +~ 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 }; @@ -30,4 +39,8 @@ ~ protected void mouseClicked(int parInt1, int parInt2, int parInt3) { +> INSERT 8 : 9 @ 8 + ++ this.mc.voiceOverlay.setResolution(j, k); + > EOF diff --git a/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.edit.java b/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.edit.java index e7539fc..80af564 100644 --- a/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.edit.java @@ -84,4 +84,11 @@ ~ protected void actionPerformed(GuiButton parGuiButton) { +> INSERT 139 : 143 @ 139 + ++ ++ public boolean blockPTTKey() { ++ return searchField.isFocused(); ++ } + > EOF diff --git a/patches/minecraft/net/minecraft/client/gui/inventory/GuiEditSign.edit.java b/patches/minecraft/net/minecraft/client/gui/inventory/GuiEditSign.edit.java index 81413ab..91e4dea 100644 --- a/patches/minecraft/net/minecraft/client/gui/inventory/GuiEditSign.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/inventory/GuiEditSign.edit.java @@ -22,4 +22,11 @@ ~ protected void keyTyped(char parChar1, int parInt1) { +> INSERT 68 : 72 @ 68 + ++ ++ public boolean blockPTTKey() { ++ return true; ++ } + > EOF diff --git a/patches/minecraft/net/minecraft/client/model/ModelPlayer.edit.java b/patches/minecraft/net/minecraft/client/model/ModelPlayer.edit.java index 5dd3c40..6fef1af 100644 --- a/patches/minecraft/net/minecraft/client/model/ModelPlayer.edit.java +++ b/patches/minecraft/net/minecraft/client/model/ModelPlayer.edit.java @@ -13,7 +13,20 @@ ~ if (entity != null && entity.isSneaking()) { -> CHANGE 31 : 32 @ 31 : 32 +> INSERT 21 : 25 @ 21 + ++ GlStateManager.matrixMode(5890); ++ GlStateManager.pushMatrix(); ++ GlStateManager.scale(2.0f, 1.0f, 1.0f); ++ GlStateManager.matrixMode(5888); + +> INSERT 1 : 4 @ 1 + ++ GlStateManager.matrixMode(5890); ++ GlStateManager.popMatrix(); ++ GlStateManager.matrixMode(5888); + +> CHANGE 9 : 10 @ 9 : 10 ~ if (entity != null && entity.isSneaking()) { diff --git a/patches/minecraft/net/minecraft/client/multiplayer/PlayerControllerMP.edit.java b/patches/minecraft/net/minecraft/client/multiplayer/PlayerControllerMP.edit.java index 66a8814..979b68a 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/PlayerControllerMP.edit.java +++ b/patches/minecraft/net/minecraft/client/multiplayer/PlayerControllerMP.edit.java @@ -17,7 +17,7 @@ + import net.minecraft.util.ChatComponentText; -> CHANGE 228 : 239 @ 228 : 229 +> CHANGE 228 : 240 @ 228 : 229 ~ try { ~ this.netClientHandler.getNetworkManager().processReceivedPackets(); @@ -30,6 +30,7 @@ ~ .closeChannel(new ChatComponentText("Exception thrown: " + ex.toString())); ~ } ~ this.netClientHandler.getSkinCache().flush(); +~ this.netClientHandler.getCapeCache().flush(); > CHANGE 96 : 98 @ 96 : 98 diff --git a/patches/minecraft/net/minecraft/client/network/NetHandlerPlayClient.edit.java b/patches/minecraft/net/minecraft/client/network/NetHandlerPlayClient.edit.java index da7e456..51603f9 100644 --- a/patches/minecraft/net/minecraft/client/network/NetHandlerPlayClient.edit.java +++ b/patches/minecraft/net/minecraft/client/network/NetHandlerPlayClient.edit.java @@ -9,7 +9,7 @@ > DELETE 4 @ 4 : 6 -> INSERT 1 : 22 @ 1 +> INSERT 1 : 25 @ 1 + + import net.eaglerforge.api.BaseData; @@ -22,12 +22,15 @@ + import com.google.common.collect.Maps; + + import net.lax1dude.eaglercraft.v1_8.netty.Unpooled; ++ import net.lax1dude.eaglercraft.v1_8.profile.CapePackets; ++ import net.lax1dude.eaglercraft.v1_8.profile.ServerCapeCache; + import net.lax1dude.eaglercraft.v1_8.profile.ServerSkinCache; + import net.lax1dude.eaglercraft.v1_8.profile.SkinPackets; + import net.lax1dude.eaglercraft.v1_8.socket.EaglercraftNetworkManager; + import net.lax1dude.eaglercraft.v1_8.sp.lan.LANClientNetworkManager; + import net.lax1dude.eaglercraft.v1_8.sp.socket.ClientIntegratedServerNetworkManager; + import net.lax1dude.eaglercraft.v1_8.update.UpdateService; ++ import net.lax1dude.eaglercraft.v1_8.voice.VoiceClientController; + import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; + import net.lax1dude.eaglercraft.v1_8.log4j.Logger; + import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerFolderResourcePack; @@ -83,27 +86,31 @@ ~ private final Map playerInfoMap = Maps.newHashMap(); -> CHANGE 2 : 5 @ 2 : 3 +> CHANGE 2 : 7 @ 2 : 3 ~ private boolean isIntegratedServer = false; ~ private final EaglercraftRandom avRandomizer = new EaglercraftRandom(); ~ private final ServerSkinCache skinCache; +~ private final ServerCapeCache capeCache; +~ public boolean currentFNAWSkinAllowedState = true; > CHANGE 1 : 2 @ 1 : 2 ~ public NetHandlerPlayClient(Minecraft mcIn, GuiScreen parGuiScreen, EaglercraftNetworkManager parNetworkManager, -> INSERT 5 : 8 @ 5 +> INSERT 5 : 9 @ 5 + this.skinCache = new ServerSkinCache(parNetworkManager, mcIn.getTextureManager()); ++ this.capeCache = new ServerCapeCache(parNetworkManager, mcIn.getTextureManager()); + this.isIntegratedServer = (parNetworkManager instanceof ClientIntegratedServerNetworkManager) + || (parNetworkManager instanceof LANClientNetworkManager); -> INSERT 4 : 5 @ 4 +> INSERT 4 : 6 @ 4 + this.skinCache.destroy(); ++ this.capeCache.destroy(); -> INSERT 2 : 154 @ 2 +> INSERT 2 : 158 @ 2 + public ServerSkinCache getSkinCache() { + return this.skinCache; @@ -257,10 +264,21 @@ + return data; + } + ++ public ServerCapeCache getCapeCache() { ++ return this.capeCache; ++ } ++ > DELETE 1 @ 1 : 2 -> DELETE 19 @ 19 : 20 +> INSERT 16 : 20 @ 16 + ++ if (VoiceClientController.isClientSupported()) { ++ VoiceClientController.initializeVoiceClient((pkt) -> this.netManager ++ .sendPacket(new C17PacketCustomPayload(VoiceClientController.SIGNAL_CHANNEL, pkt))); ++ } + +> DELETE 3 @ 3 : 4 > DELETE 105 @ 105 : 106 @@ -296,8 +314,11 @@ > DELETE 22 @ 22 : 23 -> CHANGE 8 : 11 @ 8 : 9 +> CHANGE 8 : 14 @ 8 : 9 +~ VoiceClientController.handleServerDisconnect(); +~ Minecraft.getMinecraft().getRenderManager() +~ .setEnableFNAWSkins(this.gameController.gameSettings.enableFNAWSkins); ~ if (this.gameController.theWorld != null) { ~ this.gameController.loadWorld((WorldClient) null); ~ } @@ -878,11 +899,12 @@ ~ for (int i = 0, l = lst.size(); i < l; ++i) { ~ S38PacketPlayerListItem.AddPlayerData s38packetplayerlistitem$addplayerdata = lst.get(i); -> CHANGE 1 : 4 @ 1 : 2 +> CHANGE 1 : 5 @ 1 : 2 ~ EaglercraftUUID uuid = s38packetplayerlistitem$addplayerdata.getProfile().getId(); ~ this.playerInfoMap.remove(uuid); ~ this.skinCache.evictSkin(uuid); +~ this.capeCache.evictCape(uuid); > DELETE 34 @ 34 : 35 @@ -992,7 +1014,7 @@ > DELETE 11 @ 11 : 13 -> INSERT 9 : 28 @ 9 +> INSERT 9 : 43 @ 9 + } else if ("EAG|Skins-1.8".equals(packetIn.getChannelName())) { + try { @@ -1001,6 +1023,13 @@ + logger.error("Couldn't read EAG|Skins-1.8 packet!"); + logger.error(e); + } ++ } else if ("EAG|Capes-1.8".equals(packetIn.getChannelName())) { ++ try { ++ CapePackets.readPluginMessage(packetIn.getBufferData(), capeCache); ++ } catch (IOException e) { ++ logger.error("Couldn't read EAG|Capes-1.8 packet!"); ++ logger.error(e); ++ } + } else if ("EAG|UpdateCert-1.8".equals(packetIn.getChannelName())) { + if (EagRuntime.getConfiguration().allowUpdateSvc()) { + try { @@ -1013,8 +1042,18 @@ + logger.error(e); + } + } ++ } else if (VoiceClientController.SIGNAL_CHANNEL.equals(packetIn.getChannelName())) { ++ if (VoiceClientController.isClientSupported()) { ++ VoiceClientController.handleVoiceSignalPacket(packetIn.getBufferData()); ++ } ++ } else if ("EAG|FNAWSEn-1.8".equals(packetIn.getChannelName())) { ++ this.currentFNAWSkinAllowedState = packetIn.getBufferData().readBoolean(); ++ Minecraft.getMinecraft().getRenderManager().setEnableFNAWSkins( ++ this.currentFNAWSkinAllowedState && Minecraft.getMinecraft().gameSettings.enableFNAWSkins); -> DELETE 5 @ 5 : 6 +> DELETE 1 @ 1 : 2 + +> DELETE 3 @ 3 : 4 > DELETE 19 @ 19 : 20 diff --git a/patches/minecraft/net/minecraft/client/network/NetworkPlayerInfo.edit.java b/patches/minecraft/net/minecraft/client/network/NetworkPlayerInfo.edit.java index ef7c3f7..41f6714 100644 --- a/patches/minecraft/net/minecraft/client/network/NetworkPlayerInfo.edit.java +++ b/patches/minecraft/net/minecraft/client/network/NetworkPlayerInfo.edit.java @@ -5,9 +5,10 @@ # Version: 1.0 # Author: lax1dude -> CHANGE 2 : 3 @ 2 : 6 +> CHANGE 2 : 4 @ 2 : 6 ~ import net.lax1dude.eaglercraft.v1_8.mojang.authlib.GameProfile; +~ import net.lax1dude.eaglercraft.v1_8.profile.SkinModel; > DELETE 1 @ 1 : 3 @@ -22,13 +23,21 @@ ~ return Minecraft.getMinecraft().getNetHandler().getSkinCache().getSkin(this.gameProfile) ~ .getSkinModel().profileSkinType; -> CHANGE 3 : 4 @ 3 : 9 +> CHANGE 2 : 5 @ 2 : 6 +~ public SkinModel getEaglerSkinModel() { +~ return Minecraft.getMinecraft().getNetHandler().getSkinCache().getSkin(this.gameProfile).getSkinModel(); +~ } + +> CHANGE 1 : 3 @ 1 : 3 + +~ public ResourceLocation getLocationSkin() { ~ return Minecraft.getMinecraft().getNetHandler().getSkinCache().getSkin(this.gameProfile).getResourceLocation(); -> CHANGE 3 : 4 @ 3 : 8 +> CHANGE 3 : 5 @ 3 : 8 -~ return null; +~ return Minecraft.getMinecraft().getNetHandler().getCapeCache().getCape(this.gameProfile.getId()) +~ .getResourceLocation(); > DELETE 6 @ 6 : 33 diff --git a/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.edit.java b/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.edit.java index 065a909..6fdaeda 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 : 27 @ 1 +> INSERT 1 : 28 @ 1 + + import com.google.common.base.Predicate; @@ -43,6 +43,7 @@ + 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.vector.Vector4f; ++ import net.lax1dude.eaglercraft.v1_8.voice.VoiceTagRenderer; + import net.lax1dude.eaglercraft.v1_8.vector.Matrix4f; > CHANGE 10 : 13 @ 10 : 20 @@ -84,7 +85,12 @@ + private GameOverlayFramebuffer overlayFramebuffer; + private float eagPartialTicks = 0.0f; -> DELETE 2 @ 2 : 3 +> INSERT 1 : 3 @ 1 + ++ public float currentProjMatrixFOV = 0.0f; ++ + +> DELETE 1 @ 1 : 2 > CHANGE 9 : 10 @ 9 : 10 @@ -136,12 +142,12 @@ > CHANGE 6 : 7 @ 6 : 7 -~ f = this.mc.gameSettings.keyBindZoomCamera.isKeyDown() ? 17.0f : this.mc.gameSettings.fovSetting; +~ f = this.mc.isZoomKey ? this.mc.adjustedZoomValue : this.mc.gameSettings.fovSetting; > CHANGE 169 : 173 @ 169 : 172 ~ float farPlane = this.farPlaneDistance * 2.0f * MathHelper.SQRT_2; -~ GlStateManager.gluPerspective(this.getFOVModifier(partialTicks, true), +~ GlStateManager.gluPerspective(currentProjMatrixFOV = this.getFOVModifier(partialTicks, true), ~ (float) this.mc.displayWidth / (float) this.mc.displayHeight, 0.05F, farPlane); ~ DeferredStateManager.setGBufferNearFarPlanes(0.05f, farPlane); @@ -253,13 +259,18 @@ ~ return HString.format("Scaled: (%d, %d). Absolute: (%d, %d). Scale factor of %d", -> DELETE 15 @ 15 : 17 +> INSERT 9 : 11 @ 9 + ++ ++ this.mc.voiceOverlay.drawOverlay(); + +> DELETE 6 @ 6 : 8 > CHANGE 32 : 33 @ 32 : 33 ~ EaglercraftGPU.glLineWidth(1.0F); -> INSERT 25 : 33 @ 25 +> INSERT 25 : 35 @ 25 + + boolean fxaa = !this.mc.gameSettings.shaders @@ -269,6 +280,8 @@ + EffectPipelineFXAA.begin(this.mc.displayWidth, this.mc.displayHeight); + } + ++ VoiceTagRenderer.clearTagsDrawnSet(); ++ > CHANGE 4 : 5 @ 4 : 5 @@ -302,16 +315,17 @@ > DELETE 15 @ 15 : 17 -> CHANGE 12 : 14 @ 12 : 14 +> CHANGE 12 : 15 @ 12 : 14 -~ GlStateManager.gluPerspective(this.getFOVModifier(partialTicks, true), -~ (float) this.mc.displayWidth / (float) this.mc.displayHeight, 0.05F, this.farPlaneDistance * 4.0F); +~ float vigg = this.getFOVModifier(partialTicks, true); +~ GlStateManager.gluPerspective(vigg, (float) this.mc.displayWidth / (float) this.mc.displayHeight, 0.05F, +~ this.farPlaneDistance * 4.0F); -> CHANGE 4 : 5 @ 4 : 5 +> CHANGE 4 : 5 @ 4 : 6 -~ GlStateManager.gluPerspective(this.getFOVModifier(partialTicks, true), +~ GlStateManager.gluPerspective(vigg, (float) this.mc.displayWidth / (float) this.mc.displayHeight, 0.05F, -> INSERT 27 : 28 @ 27 +> INSERT 26 : 27 @ 26 + GlStateManager.disableBlend(); diff --git a/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.edit.java b/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.edit.java index 2ed0af3..128721b 100644 --- a/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.edit.java @@ -64,8 +64,9 @@ ~ private final EaglerTextureAtlasSprite[] destroyBlockIcons = new EaglerTextureAtlasSprite[10]; -> CHANGE 11 : 12 @ 11 : 12 +> CHANGE 11 : 13 @ 11 : 12 +~ private float lastViewProjMatrixFOV = Float.MIN_VALUE; ~ private final ChunkUpdateManager renderDispatcher = new ChunkUpdateManager(); > CHANGE 22 : 24 @ 22 : 24 @@ -418,7 +419,16 @@ ~ return HString.format("C: %d/%d %sD: %d, %s", -> CHANGE 115 : 118 @ 115 : 117 +> CHANGE 53 : 55 @ 53 : 54 + +~ || (double) viewEntity.rotationYaw != this.lastViewEntityYaw +~ || this.mc.entityRenderer.currentProjMatrixFOV != this.lastViewProjMatrixFOV; + +> INSERT 5 : 6 @ 5 + ++ this.lastViewProjMatrixFOV = this.mc.entityRenderer.currentProjMatrixFOV; + +> CHANGE 56 : 59 @ 56 : 58 ~ EnumFacing[] facings = EnumFacing._VALUES; ~ for (int i = 0; i < facings.length; ++i) { diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/Render.edit.java b/patches/minecraft/net/minecraft/client/renderer/entity/Render.edit.java index da5b4b8..331e426 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/Render.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/entity/Render.edit.java @@ -5,7 +5,7 @@ # Version: 1.0 # Author: lax1dude -> INSERT 2 : 8 @ 2 +> INSERT 2 : 11 @ 2 + import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerTextureAtlasSprite; + import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; @@ -13,8 +13,15 @@ + 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.NameTagRenderer; ++ import net.lax1dude.eaglercraft.v1_8.voice.EnumVoiceChannelStatus; ++ import net.lax1dude.eaglercraft.v1_8.voice.VoiceClientController; ++ import net.lax1dude.eaglercraft.v1_8.voice.VoiceTagRenderer; -> DELETE 3 @ 3 : 4 +> INSERT 2 : 3 @ 2 + ++ import net.minecraft.client.entity.EntityOtherPlayerMP; + +> DELETE 1 @ 1 : 2 > DELETE 1 @ 1 : 2 @@ -35,7 +42,13 @@ + } + -> CHANGE 28 : 30 @ 28 : 30 +> INSERT 26 : 29 @ 26 + ++ if (entity.width == 0 || entity.height == 0) { ++ return; ++ } + +> CHANGE 2 : 4 @ 2 : 4 ~ EaglerTextureAtlasSprite textureatlassprite = texturemap.getAtlasSprite("minecraft:blocks/fire_layer_0"); ~ EaglerTextureAtlasSprite textureatlassprite1 = texturemap.getAtlasSprite("minecraft:blocks/fire_layer_1"); @@ -64,4 +77,14 @@ ~ EaglercraftGPU.glNormal3f(0.0F, 1.0F, 0.0F); +> INSERT 31 : 38 @ 31 + ++ ++ if (entityIn instanceof EntityOtherPlayerMP) { ++ if (VoiceClientController.getVoiceStatus() == EnumVoiceChannelStatus.CONNECTED) { ++ VoiceTagRenderer.renderVoiceNameTag(Minecraft.getMinecraft(), (EntityOtherPlayerMP) entityIn, b0); ++ } ++ } ++ + > 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 51a4245..1dfb3d3 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 : 8 @ 1 +> INSERT 1 : 9 @ 1 + + import com.google.common.collect.Maps; @@ -16,19 +16,39 @@ + 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.profile.RenderHighPoly; -> DELETE 16 @ 16 : 18 +> INSERT 3 : 4 @ 3 + ++ import net.minecraft.client.Minecraft; + +> DELETE 13 @ 13 : 15 > DELETE 2 @ 2 : 3 > DELETE 1 @ 1 : 55 -> CHANGE 163 : 165 @ 163 : 164 +> INSERT 81 : 82 @ 81 + ++ private RenderPlayer eaglerRenderer; + +> CHANGE 82 : 88 @ 82 : 83 ~ this.skinMap.put("slim", new RenderPlayer(this, true, false)); ~ this.skinMap.put("zombie", new RenderPlayer(this, false, true)); +~ this.eaglerRenderer = new RenderHighPoly(this, this.playerRenderer.getMainModel(), +~ this.playerRenderer.shadowSize); +~ this.skinMap.put("eagler", +~ Minecraft.getMinecraft().gameSettings.enableFNAWSkins ? this.eaglerRenderer : this.playerRenderer); -> CHANGE 11 : 12 @ 11 : 12 +> INSERT 2 : 6 @ 2 + ++ public void setEnableFNAWSkins(boolean en) { ++ this.skinMap.put("eagler", en ? this.eaglerRenderer : this.playerRenderer); ++ } ++ + +> CHANGE 9 : 10 @ 9 : 10 ~ render = this.getEntityClassRenderObject((Class) parClass1.getSuperclass()); diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/RenderPlayer.edit.java b/patches/minecraft/net/minecraft/client/renderer/entity/RenderPlayer.edit.java index 3e69897..e02a7be 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/RenderPlayer.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/entity/RenderPlayer.edit.java @@ -9,8 +9,9 @@ + import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; -> INSERT 2 : 3 @ 2 +> INSERT 2 : 4 @ 2 ++ import net.minecraft.client.model.ModelBase; + import net.minecraft.client.model.ModelBiped; > CHANGE 1 : 2 @ 1 : 4 @@ -36,10 +37,17 @@ > CHANGE 8 : 10 @ 8 : 10 -~ public ModelBiped getMainModel() { -~ return (ModelBiped) super.getMainModel(); +~ protected RenderPlayer(RenderManager renderManager, ModelBase modelBase, float size) { +~ super(renderManager, modelBase, size); -> CHANGE 16 : 17 @ 16 : 17 +> INSERT 2 : 6 @ 2 + ++ public ModelBiped getMainModel() { ++ return (ModelBiped) super.getMainModel(); ++ } ++ + +> CHANGE 14 : 15 @ 14 : 15 ~ ModelBiped modelplayer = this.getMainModel(); diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/RendererLivingEntity.edit.java b/patches/minecraft/net/minecraft/client/renderer/entity/RendererLivingEntity.edit.java index 300aeeb..ef2d7a8 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/RendererLivingEntity.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/entity/RendererLivingEntity.edit.java @@ -41,7 +41,12 @@ ~ return this.layerRenderers.add((LayerRenderer) layer); -> DELETE 115 @ 115 : 116 +> CHANGE 104 : 106 @ 104 : 105 + +~ logger.error("Couldn\'t render entity"); +~ logger.error(exception); + +> DELETE 10 @ 10 : 11 > CHANGE 36 : 42 @ 36 : 37 diff --git a/patches/minecraft/net/minecraft/client/renderer/texture/TextureManager.edit.java b/patches/minecraft/net/minecraft/client/renderer/texture/TextureManager.edit.java index 587ce9e..1a5a73d 100644 --- a/patches/minecraft/net/minecraft/client/renderer/texture/TextureManager.edit.java +++ b/patches/minecraft/net/minecraft/client/renderer/texture/TextureManager.edit.java @@ -28,8 +28,8 @@ > CHANGE 13 : 22 @ 13 : 18 ~ int glTex; -~ if (resource.cachedPointer != null) { -~ TextureUtil.bindTexture(glTex = ((ITextureObject) resource.cachedPointer).getGlTextureId()); // unsafe, lol +~ if (resource.cachedPointerType == ResourceLocation.CACHED_POINTER_TEXTURE) { +~ TextureUtil.bindTexture(glTex = ((ITextureObject) resource.cachedPointer).getGlTextureId()); ~ } else { ~ Object object = (ITextureObject) this.mapTextureObjects.get(resource); ~ if (object == null) { @@ -37,9 +37,10 @@ ~ this.loadTexture(resource, (ITextureObject) object); ~ } -> CHANGE 1 : 15 @ 1 : 2 +> CHANGE 1 : 16 @ 1 : 2 ~ resource.cachedPointer = object; +~ resource.cachedPointerType = ResourceLocation.CACHED_POINTER_TEXTURE; ~ TextureUtil.bindTexture(glTex = ((ITextureObject) object).getGlTextureId()); ~ } ~ if (DeferredStateManager.isInDeferredPass()) { @@ -66,15 +67,17 @@ ~ return textureObj2.getClass().getName(); -> INSERT 5 : 6 @ 5 +> INSERT 5 : 7 @ 5 ++ textureLocation.cachedPointerType = ResourceLocation.CACHED_POINTER_TEXTURE; + textureLocation.cachedPointer = textureObj; -> CHANGE 5 : 10 @ 5 : 6 +> CHANGE 5 : 11 @ 5 : 6 -~ if (textureLocation.cachedPointer != null) { +~ if (textureLocation.cachedPointerType == ResourceLocation.CACHED_POINTER_TEXTURE) { ~ return (ITextureObject) textureLocation.cachedPointer; ~ } else { +~ textureLocation.cachedPointerType = ResourceLocation.CACHED_POINTER_TEXTURE; ~ return (ITextureObject) (textureLocation.cachedPointer = this.mapTextureObjects.get(textureLocation)); ~ } diff --git a/patches/minecraft/net/minecraft/client/settings/GameSettings.edit.java b/patches/minecraft/net/minecraft/client/settings/GameSettings.edit.java index b7267c2..c01413e 100644 --- a/patches/minecraft/net/minecraft/client/settings/GameSettings.edit.java +++ b/patches/minecraft/net/minecraft/client/settings/GameSettings.edit.java @@ -14,12 +14,14 @@ > DELETE 1 @ 1 : 3 -> INSERT 3 : 26 @ 3 +> INSERT 3 : 29 @ 3 + + import net.eaglerforge.api.BaseData; + import net.eaglerforge.api.ModData; + import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayManager; ++ import net.lax1dude.eaglercraft.v1_8.voice.VoiceClientController; ++ + import org.json.JSONArray; + + import com.google.common.collect.ImmutableSet; @@ -35,6 +37,7 @@ + import net.lax1dude.eaglercraft.v1_8.HString; + import net.lax1dude.eaglercraft.v1_8.Keyboard; + import net.lax1dude.eaglercraft.v1_8.Mouse; ++ import net.lax1dude.eaglercraft.v1_8.internal.EnumPlatformType; + import net.lax1dude.eaglercraft.v1_8.internal.KeyboardConstants; + import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; + import net.lax1dude.eaglercraft.v1_8.log4j.Logger; @@ -59,9 +62,9 @@ ~ public boolean fancyGraphics = false; ~ public int ambientOcclusion = 0; -> DELETE 8 @ 8 : 9 +> CHANGE 8 : 9 @ 8 : 11 -> DELETE 1 @ 1 : 2 +~ public boolean enableVsync = EagRuntime.getPlatformType() != EnumPlatformType.DESKTOP; > CHANGE 5 : 6 @ 5 : 6 @@ -94,7 +97,7 @@ ~ public int guiScale = 3; -> INSERT 3 : 16 @ 3 +> INSERT 3 : 17 @ 3 + public boolean hudFps = true; + public boolean hudCoords = true; @@ -109,9 +112,15 @@ + public boolean shadersAODisable = false; + public EaglerDeferredConfig deferredShaderConf = new EaglerDeferredConfig(); + public boolean enableUpdateSvc = true; ++ public boolean enableFNAWSkins = true; -> CHANGE 1 : 2 @ 1 : 2 +> CHANGE 1 : 7 @ 1 : 2 +~ public int voiceListenRadius = 16; +~ public float voiceListenVolume = 0.5f; +~ public float voiceSpeakVolume = 0.5f; +~ public int voicePTTKey = 47; // V +~ ~ public GameSettings(Minecraft mcIn) { > CHANGE 4 : 6 @ 4 : 7 @@ -317,7 +326,7 @@ > DELETE 20 @ 20 : 37 -> INSERT 13 : 53 @ 13 +> INSERT 13 : 62 @ 13 + if (parOptions == GameSettings.Options.HUD_FPS) { + this.hudFps = !this.hudFps; @@ -359,6 +368,15 @@ + this.mc.toggleFullscreen(); + } + ++ if (parOptions == GameSettings.Options.FNAW_SKINS) { ++ this.enableFNAWSkins = !this.enableFNAWSkins; ++ this.mc.getRenderManager().setEnableFNAWSkins(this.mc.getEnableFNAWSkins()); ++ } ++ ++ if (parOptions == GameSettings.Options.EAGLER_VSYNC) { ++ this.enableVsync = !this.enableVsync; ++ } ++ > CHANGE 23 : 24 @ 23 : 34 @@ -368,7 +386,7 @@ > DELETE 2 @ 2 : 4 -> INSERT 8 : 26 @ 8 +> INSERT 8 : 30 @ 8 + case HUD_COORDS: + return this.hudCoords; @@ -388,6 +406,10 @@ + return this.fog; + case FULLSCREEN: + return this.mc.isFullScreen(); ++ case FNAW_SKINS: ++ return this.enableFNAWSkins; ++ case EAGLER_VSYNC: ++ return this.enableVsync; > CHANGE 43 : 46 @ 43 : 47 @@ -487,9 +509,11 @@ ~ } ~ } -> DELETE 38 @ 38 : 42 +> CHANGE 38 : 39 @ 38 : 43 -> DELETE 4 @ 4 : 8 +~ if (astring[0].equals("enableVsyncEag")) { + +> DELETE 3 @ 3 : 7 > CHANGE 52 : 54 @ 52 : 54 @@ -564,7 +588,7 @@ > DELETE 2 @ 2 : 10 -> CHANGE 6 : 17 @ 6 : 7 +> CHANGE 6 : 31 @ 6 : 7 ~ if (astring[0].equals("shaders")) { ~ this.shaders = astring[1].equals("true"); @@ -574,7 +598,21 @@ ~ this.enableUpdateSvc = astring[1].equals("true"); ~ } ~ -~ Keyboard.setFunctionKeyModifier(keyBindFunction.getKeyCode()); +~ if (astring[0].equals("voiceListenRadius")) { +~ voiceListenRadius = Integer.parseInt(astring[1]); +~ } +~ +~ if (astring[0].equals("voiceListenVolume")) { +~ voiceListenVolume = this.parseFloat(astring[1]); +~ } +~ +~ if (astring[0].equals("voiceSpeakVolume")) { +~ voiceSpeakVolume = this.parseFloat(astring[1]); +~ } +~ +~ if (astring[0].equals("voicePTTKey")) { +~ voicePTTKey = Integer.parseInt(astring[1]); +~ } ~ ~ for (SoundCategory soundcategory : SoundCategory._VALUES) { @@ -582,14 +620,31 @@ ~ for (EnumPlayerModelParts enumplayermodelparts : EnumPlayerModelParts._VALUES) { -> INSERT 4 : 6 @ 4 +> INSERT 4 : 10 @ 4 ++ ++ if (astring[0].equals("enableFNAWSkins")) { ++ this.enableFNAWSkins = astring[1].equals("true"); ++ } + + deferredShaderConf.readOption(astring[0], astring[1]); -> DELETE 6 @ 6 : 7 +> CHANGE 6 : 13 @ 6 : 7 -> INSERT 11 : 20 @ 11 +~ +~ Keyboard.setFunctionKeyModifier(keyBindFunction.getKeyCode()); +~ VoiceClientController.setVoiceListenVolume(voiceListenVolume); +~ VoiceClientController.setVoiceSpeakVolume(voiceSpeakVolume); +~ VoiceClientController.setVoiceProximity(voiceListenRadius); +~ if (this.mc.getRenderManager() != null) +~ this.mc.getRenderManager().setEnableFNAWSkins(this.enableFNAWSkins); + +> CHANGE 1 : 3 @ 1 : 2 + +~ logger.error("Failed to load options"); +~ logger.error(exception); + +> INSERT 9 : 18 @ 9 + byte[] data = writeOptions(); + if (data != null) { @@ -617,13 +672,13 @@ ~ printwriter.println("resourcePacks:" + toJSONArray(this.resourcePacks)); ~ printwriter.println("incompatibleResourcePacks:" + toJSONArray(this.field_183018_l)); -> DELETE 8 @ 8 : 9 +> CHANGE 8 : 9 @ 8 : 11 -> DELETE 1 @ 1 : 2 +~ printwriter.println("enableVsyncEag:" + this.enableVsync); > DELETE 13 @ 13 : 24 -> INSERT 5 : 16 @ 5 +> INSERT 5 : 21 @ 5 + printwriter.println("hudFps:" + this.hudFps); + printwriter.println("hudWorld:" + this.hudWorld); @@ -636,6 +691,11 @@ + printwriter.println("fxaa:" + this.fxaa); + printwriter.println("shaders:" + this.shaders); + printwriter.println("enableUpdateSvc:" + this.enableUpdateSvc); ++ printwriter.println("voiceListenRadius:" + this.voiceListenRadius); ++ printwriter.println("voiceListenVolume:" + this.voiceListenVolume); ++ printwriter.println("voiceSpeakVolume:" + this.voiceSpeakVolume); ++ printwriter.println("voicePTTKey:" + this.voicePTTKey); ++ printwriter.println("enableFNAWSkins:" + this.enableFNAWSkins); > CHANGE 5 : 8 @ 5 : 6 @@ -656,9 +716,11 @@ + return bao.toByteArray(); -> INSERT 2 : 3 @ 2 +> CHANGE 1 : 4 @ 1 : 2 -+ return null; +~ logger.error("Failed to save options"); +~ logger.error(exception); +~ return null; > DELETE 2 @ 2 : 3 @@ -690,13 +752,15 @@ ~ TOUCHSCREEN("options.touchscreen", false, true), CHAT_SCALE("options.chat.scale", true, false), ~ CHAT_WIDTH("options.chat.width", true, false), CHAT_HEIGHT_FOCUSED("options.chat.height.focused", true, false), -> CHANGE 14 : 20 @ 14 : 15 +> CHANGE 14 : 22 @ 14 : 15 ~ ENTITY_SHADOWS("options.entityShadows", false, true), HUD_FPS("options.hud.fps", false, true), ~ HUD_COORDS("options.hud.coords", false, true), HUD_STATS("options.hud.stats", false, true), ~ HUD_WORLD("options.hud.world", false, true), HUD_PLAYER("options.hud.player", false, true), ~ HUD_24H("options.hud.24h", false, true), CHUNK_FIX("options.chunkFix", false, true), ~ FOG("options.fog", false, true), FXAA("options.fxaa", false, false), -~ FULLSCREEN("options.fullscreen", false, true), FAST_MATH("options.fastMath", false, false); +~ FULLSCREEN("options.fullscreen", false, true), +~ FNAW_SKINS("options.skinCustomisation.enableFNAWSkins", false, true), +~ EAGLER_VSYNC("options.vsync", false, true); > 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/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/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 deleted file mode 100644 index 7572609..0000000 --- a/patches/minecraft/net/minecraft/entity/item/EntityFireworkRocket.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/network/NetHandlerPlayServer.edit.java b/patches/minecraft/net/minecraft/network/NetHandlerPlayServer.edit.java index b39cfe1..be1699a 100644 --- a/patches/minecraft/net/minecraft/network/NetHandlerPlayServer.edit.java +++ b/patches/minecraft/net/minecraft/network/NetHandlerPlayServer.edit.java @@ -26,9 +26,10 @@ > DELETE 2 @ 2 : 3 -> INSERT 16 : 18 @ 16 +> INSERT 16 : 19 @ 16 + import net.lax1dude.eaglercraft.v1_8.sp.server.socket.IntegratedServerPlayerNetworkManager; ++ import net.lax1dude.eaglercraft.v1_8.sp.server.voice.IntegratedVoiceService; + > CHANGE 1 : 3 @ 1 : 3 @@ -186,12 +187,21 @@ + s = net.minecraft.util.StringUtils.translateControlCodesAlternate(s); + } -> INSERT 5 : 24 @ 5 +> INSERT 5 : 33 @ 5 + } else if ("EAG|Skins-1.8".equals(c17packetcustompayload.getChannelName())) { + byte[] r = new byte[c17packetcustompayload.getBufferData().readableBytes()]; + c17packetcustompayload.getBufferData().readBytes(r); + ((EaglerMinecraftServer) serverController).getSkinService().processPacket(r, playerEntity); ++ } else if ("EAG|Capes-1.8".equals(c17packetcustompayload.getChannelName())) { ++ byte[] r = new byte[c17packetcustompayload.getBufferData().readableBytes()]; ++ c17packetcustompayload.getBufferData().readBytes(r); ++ ((EaglerMinecraftServer) serverController).getCapeService().processPacket(r, playerEntity); ++ } else if ("EAG|Voice-1.8".equals(c17packetcustompayload.getChannelName())) { ++ IntegratedVoiceService vcs = ((EaglerMinecraftServer) serverController).getVoiceService(); ++ if (vcs != null) { ++ vcs.processPacket(c17packetcustompayload.getBufferData(), playerEntity); ++ } + } else if ("EAG|MyUpdCert-1.8".equals(c17packetcustompayload.getChannelName())) { + if (playerEntity.updateCertificate == null) { + PacketBuffer pb = c17packetcustompayload.getBufferData(); diff --git a/patches/minecraft/net/minecraft/network/login/client/C00PacketLoginStart.edit.java b/patches/minecraft/net/minecraft/network/login/client/C00PacketLoginStart.edit.java index bc905f1..2bcf0dd 100644 --- a/patches/minecraft/net/minecraft/network/login/client/C00PacketLoginStart.edit.java +++ b/patches/minecraft/net/minecraft/network/login/client/C00PacketLoginStart.edit.java @@ -13,32 +13,40 @@ ~ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; -> INSERT 6 : 7 @ 6 +> INSERT 6 : 8 @ 6 + private byte[] skin; ++ private byte[] cape; > CHANGE 4 : 5 @ 4 : 5 -~ public C00PacketLoginStart(GameProfile profileIn, byte[] skin) { +~ public C00PacketLoginStart(GameProfile profileIn, byte[] skin, byte[] cape) { -> INSERT 1 : 2 @ 1 +> INSERT 1 : 3 @ 1 + this.skin = skin; ++ this.cape = cape; -> CHANGE 3 : 5 @ 3 : 4 +> CHANGE 3 : 6 @ 3 : 4 ~ this.profile = new GameProfile((EaglercraftUUID) null, parPacketBuffer.readStringFromBuffer(16)); ~ this.skin = parPacketBuffer.readByteArray(); +~ this.cape = parPacketBuffer.readableBytes() > 0 ? parPacketBuffer.readByteArray() : null; -> INSERT 4 : 5 @ 4 +> INSERT 4 : 6 @ 4 + parPacketBuffer.writeByteArray(this.skin); ++ parPacketBuffer.writeByteArray(this.cape); -> INSERT 9 : 13 @ 9 +> INSERT 9 : 17 @ 9 + + public byte[] getSkin() { + return this.skin; + } ++ ++ public byte[] getCape() { ++ return this.cape; ++ } > 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/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/server/management/ServerConfigurationManager.edit.java b/patches/minecraft/net/minecraft/server/management/ServerConfigurationManager.edit.java index 760bd88..99168d7 100644 --- a/patches/minecraft/net/minecraft/server/management/ServerConfigurationManager.edit.java +++ b/patches/minecraft/net/minecraft/server/management/ServerConfigurationManager.edit.java @@ -26,9 +26,11 @@ + import net.minecraft.util.ChatComponentText; -> CHANGE 12 : 15 @ 12 : 14 +> CHANGE 12 : 17 @ 12 : 14 +~ import net.lax1dude.eaglercraft.v1_8.sp.server.EaglerMinecraftServer; ~ import net.lax1dude.eaglercraft.v1_8.sp.server.socket.IntegratedServerPlayerNetworkManager; +~ import net.lax1dude.eaglercraft.v1_8.sp.server.voice.IntegratedVoiceService; ~ import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; ~ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; @@ -119,7 +121,17 @@ ~ this.playerStatFiles.remove(entityplayermp.getName()); -> CHANGE 6 : 13 @ 6 : 13 +> INSERT 2 : 9 @ 2 + ++ ((EaglerMinecraftServer) mcServer).getSkinService().unregisterPlayer(uuid); ++ ((EaglerMinecraftServer) mcServer).getCapeService().unregisterPlayer(uuid); ++ IntegratedVoiceService vcs = ((EaglerMinecraftServer) mcServer).getVoiceService(); ++ if (vcs != null) { ++ vcs.handlePlayerLoggedOut(playerIn); ++ } ++ + +> CHANGE 4 : 11 @ 4 : 11 ~ public String allowUserToConnect(GameProfile gameprofile) { ~ return this.playerEntityList.size() >= this.maxPlayers && !this.func_183023_f(gameprofile) diff --git a/patches/minecraft/net/minecraft/server/network/NetHandlerLoginServer.edit.java b/patches/minecraft/net/minecraft/server/network/NetHandlerLoginServer.edit.java index 9d6def6..fc78fa7 100644 --- a/patches/minecraft/net/minecraft/server/network/NetHandlerLoginServer.edit.java +++ b/patches/minecraft/net/minecraft/server/network/NetHandlerLoginServer.edit.java @@ -22,9 +22,10 @@ > DELETE 2 @ 2 : 3 -> INSERT 2 : 4 @ 2 +> INSERT 2 : 5 @ 2 + import net.lax1dude.eaglercraft.v1_8.sp.server.socket.IntegratedServerPlayerNetworkManager; ++ import net.lax1dude.eaglercraft.v1_8.sp.server.voice.IntegratedVoiceService; + > CHANGE 1 : 3 @ 1 : 3 @@ -42,9 +43,10 @@ ~ public final IntegratedServerPlayerNetworkManager networkManager; -> INSERT 3 : 4 @ 3 +> INSERT 3 : 5 @ 3 + private byte[] loginSkinPacket; ++ private byte[] loginCapePacket; > DELETE 1 @ 1 : 2 @@ -53,10 +55,18 @@ ~ public NetHandlerLoginServer(MinecraftServer parMinecraftServer, ~ IntegratedServerPlayerNetworkManager parNetworkManager) { -> INSERT 15 : 17 @ 15 +> INSERT 15 : 25 @ 15 + ((EaglerMinecraftServer) field_181025_l.mcServer).getSkinService() + .processLoginPacket(this.loginSkinPacket, field_181025_l); ++ if (this.loginCapePacket != null) { ++ ((EaglerMinecraftServer) field_181025_l.mcServer).getCapeService() ++ .processLoginPacket(this.loginCapePacket, field_181025_l); ++ } ++ IntegratedVoiceService svc = ((EaglerMinecraftServer) field_181025_l.mcServer).getVoiceService(); ++ if (svc != null) { ++ svc.handlePlayerLoggedIn(entityplayermp); ++ } > CHANGE 23 : 24 @ 23 : 29 @@ -68,22 +78,31 @@ + this.networkManager.setConnectionState(EnumConnectionState.PLAY); -> CHANGE 6 : 10 @ 6 : 8 +> CHANGE 6 : 18 @ 6 : 8 ~ entityplayermp = this.server.getConfigurationManager().createPlayerForUser(this.loginGameProfile); ~ this.server.getConfigurationManager().initializeConnectionToPlayer(this.networkManager, entityplayermp); ~ ((EaglerMinecraftServer) entityplayermp.mcServer).getSkinService() ~ .processLoginPacket(this.loginSkinPacket, entityplayermp); +~ if (this.loginCapePacket != null) { +~ ((EaglerMinecraftServer) entityplayermp.mcServer).getCapeService() +~ .processLoginPacket(this.loginCapePacket, entityplayermp); +~ } +~ IntegratedVoiceService svc = ((EaglerMinecraftServer) entityplayermp.mcServer).getVoiceService(); +~ if (svc != null) { +~ svc.handlePlayerLoggedIn(entityplayermp); +~ } > CHANGE 11 : 13 @ 11 : 13 ~ ? this.loginGameProfile.toString() + " (channel:" + this.networkManager.playerChannel + ")" ~ : ("channel:" + this.networkManager.playerChannel); -> CHANGE 5 : 8 @ 5 : 14 +> CHANGE 5 : 9 @ 5 : 14 ~ this.loginGameProfile = this.getOfflineProfile(c00packetloginstart.getProfile()); ~ this.loginSkinPacket = c00packetloginstart.getSkin(); +~ this.loginCapePacket = c00packetloginstart.getCape(); ~ this.currentLoginState = NetHandlerLoginServer.LoginState.READY_TO_ACCEPT; > DELETE 3 @ 3 : 15 diff --git a/patches/minecraft/net/minecraft/util/ResourceLocation.edit.java b/patches/minecraft/net/minecraft/util/ResourceLocation.edit.java index cb1e90e..9699d43 100644 --- a/patches/minecraft/net/minecraft/util/ResourceLocation.edit.java +++ b/patches/minecraft/net/minecraft/util/ResourceLocation.edit.java @@ -9,9 +9,14 @@ + public String resourceName; -> INSERT 1 : 3 @ 1 +> INSERT 1 : 8 @ 1 + public Object cachedPointer = null; ++ public int cachedPointerType = 0; ++ ++ public static final int CACHED_POINTER_NONE = 0; ++ public static final int CACHED_POINTER_TEXTURE = 1; ++ public static final int CACHED_POINTER_EAGLER_MESH = 2; + > INSERT 1 : 2 @ 1 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/World.edit.java b/patches/minecraft/net/minecraft/world/World.edit.java index cca38b1..f605a5c 100644 --- a/patches/minecraft/net/minecraft/world/World.edit.java +++ b/patches/minecraft/net/minecraft/world/World.edit.java @@ -120,13 +120,15 @@ ~ for (int j = 0, l = this.loadedEntityList.size(); j < l; ++j) { ~ Entity entity = this.loadedEntityList.get(j); -> CHANGE 102 : 105 @ 102 : 103 +> CHANGE 102 : 107 @ 102 : 104 ~ EnumFacing[] facings = EnumFacing._VALUES; +~ BlockPos tmp = new BlockPos(0, 0, 0); ~ for (int k = 0; k < facings.length; ++k) { ~ EnumFacing enumfacing = facings[k]; +~ int j = this.getRedstonePower(pos.offsetEvenFaster(enumfacing, tmp), enumfacing); -> CHANGE 60 : 61 @ 60 : 61 +> CHANGE 59 : 60 @ 59 : 60 ~ public EntityPlayer getPlayerEntityByUUID(EaglercraftUUID uuid) { 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/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/ChunkProviderServer.edit.java b/patches/minecraft/net/minecraft/world/gen/ChunkProviderServer.edit.java index 865eadb..9405f6c 100644 --- a/patches/minecraft/net/minecraft/world/gen/ChunkProviderServer.edit.java +++ b/patches/minecraft/net/minecraft/world/gen/ChunkProviderServer.edit.java @@ -32,11 +32,31 @@ + } else { + ++EaglerMinecraftServer.counterChunkRead; -> INSERT 54 : 55 @ 54 +> CHANGE 32 : 34 @ 32 : 33 + +~ logger.error("Couldn\'t load chunk"); +~ logger.error(exception); + +> CHANGE 10 : 12 @ 10 : 11 + +~ logger.error("Couldn\'t save entities"); +~ logger.error(exception); + +> INSERT 10 : 11 @ 10 + ++EaglerMinecraftServer.counterChunkWrite; -> CHANGE 36 : 37 @ 36 : 37 +> CHANGE 1 : 3 @ 1 : 2 + +~ logger.error("Couldn\'t save chunk"); +~ logger.error(ioexception); + +> CHANGE 1 : 3 @ 1 : 3 + +~ logger.error("Couldn\'t save chunk; already in use by another instance of Minecraft?"); +~ logger.error(minecraftexception); + +> CHANGE 31 : 32 @ 31 : 32 ~ for (int j = 0, l = arraylist.size(); j < l; ++j) { 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/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/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/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/resources/assets/minecraft/lang/en_US.edit.lang b/patches/resources/assets/minecraft/lang/en_US.edit.lang index 77aa586..bc0c3d6 100644 --- a/patches/resources/assets/minecraft/lang/en_US.edit.lang +++ b/patches/resources/assets/minecraft/lang/en_US.edit.lang @@ -10,9 +10,9 @@ ~ eaglercraft.recording.unsupported=Recording Unsupported! ~ eaglercraft.recording.stop=Stop Recording ~ eaglercraft.recording.start=Record Screen... -~ eaglercraft.soundCategory.voice=Voice +~ eaglercraft.soundCategory.voice=Recording Voice -> INSERT 1 : 237 @ 1 +> INSERT 1 : 245 @ 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! @@ -37,6 +37,14 @@ + eaglercraft.editProfile.playerSkin=Player Skin + eaglercraft.editProfile.addSkin=Add Skin + eaglercraft.editProfile.clearSkin=Clear List ++ eaglercraft.editProfile.capes=Capes ++ eaglercraft.editProfile.disableFNAW=(Note: go to 'Options...' > 'Skin Customization' to disable FNAW skins) ++ eaglercraft.editProfile.enableFNAW=(Note: go to 'Options...' > 'Skin Customization' to enable FNAW skins) ++ ++ eaglercraft.editCape.title=Edit Cape ++ eaglercraft.editCape.playerCape=Player Cape ++ eaglercraft.editCape.addCape=Add Cape ++ eaglercraft.editCape.clearCape=Clear List + + eaglercraft.editProfile.importExport=Import/Export + @@ -251,7 +259,7 @@ + eaglerforge.menu.mods.info=(Only .js files) + -> INSERT 163 : 350 @ 163 +> INSERT 163 : 404 @ 163 + eaglercraft.singleplayer.busy.killTask=Cancel Task + eaglercraft.singleplayer.busy.cancelWarning=Are you sure? @@ -440,6 +448,60 @@ + eaglercraft.updateList.note.0=Note: Updates are digitally signed, EaglercraftX will block any + eaglercraft.updateList.note.1=updates that were not created by lax1dude or ayunami2000 + ++ eaglercraft.voice.title=Voice Channel ++ eaglercraft.voice.titleNoVoice=Voice is disabled on this server ++ eaglercraft.voice.titleVoiceUnavailable=Voice is unavailable ++ eaglercraft.voice.titleVoiceBrowserError=(browser issue) ++ eaglercraft.voice.ptt=Press '%s' to speak ++ eaglercraft.voice.pttChangeDesc=(Press Any Key) ++ eaglercraft.voice.changeKey=Change ++ eaglercraft.voice.off=OFF ++ eaglercraft.voice.radius=NEARBY ++ eaglercraft.voice.global=GLOBAL ++ eaglercraft.voice.volumeTitle=Change Volume ++ eaglercraft.voice.volumeListen=Speakers Volume: ++ eaglercraft.voice.volumeSpeak=Microphone Volume: ++ eaglercraft.voice.radiusTitle=Change Listener Radius ++ eaglercraft.voice.radiusLabel=Players Within: ++ eaglercraft.voice.radiusChange=change ++ eaglercraft.voice.notConnected=Not Connected ++ eaglercraft.voice.connecting=Connecting... ++ eaglercraft.voice.unavailable=Could not connect! ++ eaglercraft.voice.connectedGlobal=Connected - Global ++ eaglercraft.voice.connectedRadius=Connected - $f$Within $radius$m ++ eaglercraft.voice.playersListening=Players Listening: ++ eaglercraft.voice.muted=Players Muted: ++ eaglercraft.voice.unmute=unmute ++ eaglercraft.voice.mute=mute ++ eaglercraft.voice.apply=Apply ++ eaglercraft.voice.volumeSpeakerLabel=Speakers: ++ eaglercraft.voice.volumeMicrophoneLabel=Microphone: ++ ++ eaglercraft.voice.unsupportedWarning1=Voice Warning ++ eaglercraft.voice.unsupportedWarning2=Your network's firewall may not support ++ eaglercraft.voice.unsupportedWarning3=eaglercraft's voice chat. ++ eaglercraft.voice.unsupportedWarning4=If your game doesn't work it's your issue ++ eaglercraft.voice.unsupportedWarning5=to solve, not ayunami2000's or lax1dude's. ++ eaglercraft.voice.unsupportedWarning6=Don't ask them to 'fix' it for you because ++ eaglercraft.voice.unsupportedWarning7=they won't help you fix a problem that only ++ eaglercraft.voice.unsupportedWarning8=you or your network's administrator has the ++ eaglercraft.voice.unsupportedWarning9=ability to correctly resolve. ++ eaglercraft.voice.unsupportedWarning10=Continue ++ eaglercraft.voice.unsupportedWarning11=Cancel ++ ++ eaglercraft.voice.ipGrabWarning1=IP Logger Warning ++ eaglercraft.voice.ipGrabWarning2=Using Eaglercraft voice chat may allow your ++ eaglercraft.voice.ipGrabWarning3=IP address to be logged by other players ++ eaglercraft.voice.ipGrabWarning4=also using voice on the server. ++ eaglercraft.voice.ipGrabWarning5=This issue will not be fixed, it is an ++ eaglercraft.voice.ipGrabWarning6=internal browser issue, not a mistake in the ++ eaglercraft.voice.ipGrabWarning7=game. Fortunately, this can only be done if ++ eaglercraft.voice.ipGrabWarning8=the other player uses a hacked web browser ++ eaglercraft.voice.ipGrabWarning9=or has Wireshark to capture the voice ++ eaglercraft.voice.ipGrabWarning10=packets, as there exists no real javascript ++ eaglercraft.voice.ipGrabWarning11=method to log IPs using a normal skidded ++ eaglercraft.voice.ipGrabWarning12=eaglercraft hacked client. ++ > CHANGE 22 : 23 @ 22 : 23 @@ -449,7 +511,11 @@ ~ lanServer.start=Start Shared World -> CHANGE 280 : 281 @ 280 : 281 +> INSERT 175 : 176 @ 175 + ++ options.skinCustomisation.enableFNAWSkins=Show FNAW Skins + +> CHANGE 105 : 106 @ 105 : 106 ~ resourcePack.openFolder=Open resource pack diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java index ba16a63..03785ec 100644 --- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java @@ -60,6 +60,9 @@ public class PlatformAssets { public static final ImageData loadImageFile(InputStream data) { try { BufferedImage img = ImageIO.read(data); + if(img == null) { + throw new IOException("Data is not a supported image format!"); + } int w = img.getWidth(); int h = img.getHeight(); boolean a = img.getColorModel().hasAlpha(); diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformBufferFunctions.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformBufferFunctions.java index 9adf74c..6cab7cc 100644 --- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformBufferFunctions.java +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformBufferFunctions.java @@ -21,10 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.IntBuffer; public class PlatformBufferFunctions { public static void put(ByteBuffer newBuffer, ByteBuffer flip) { - int len = flip.remaining(); - for(int i = 0; i < len; ++i) { - newBuffer.put(flip.get()); - } + newBuffer.put(flip); } public static void put(IntBuffer intBuffer, int index, int[] data) { diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java index ece3fff..e8ae9da 100644 --- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java @@ -1,13 +1,11 @@ package net.lax1dude.eaglercraft.v1_8.internal; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; -import net.lax1dude.eaglercraft.v1_8.internal.vfs2.EaglerFileSystemException; -import net.lax1dude.eaglercraft.v1_8.internal.vfs2.VFSIterator2.BreakLoop; +import net.lax1dude.eaglercraft.v1_8.internal.lwjgl.DebugFilesystem; +import net.lax1dude.eaglercraft.v1_8.internal.lwjgl.JDBCFilesystem; +import net.lax1dude.eaglercraft.v1_8.internal.lwjgl.JDBCFilesystemConverter; import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; import net.lax1dude.eaglercraft.v1_8.log4j.Logger; @@ -30,183 +28,104 @@ public class PlatformFilesystem { public static final Logger logger = LogManager.getLogger("PlatformFilesystem"); - public static final File filesystemRoot = (new File("filesystem/sp")).getAbsoluteFile(); + public static final File debugFilesystemRoot = (new File("filesystem/sp")).getAbsoluteFile(); + + private static IFilesystemProvider provider = null; + + public static String jdbcUri = null; + public static String jdbcDriver = null; public static void initialize() { - if(!filesystemRoot.isDirectory() && !filesystemRoot.mkdirs()) { - throw new EaglerFileSystemException("Could not create directory for virtual filesystem: " + filesystemRoot.getAbsolutePath()); + if(provider == null) { + if(jdbcUri != null && jdbcDriver != null) { + provider = JDBCFilesystem.initialize(jdbcUri, jdbcDriver); + if(((JDBCFilesystem)provider).isNewFilesystem() && debugFilesystemRoot.isDirectory() && debugFilesystemRoot.list().length > 0) { + JDBCFilesystemConverter.convertFilesystem("Converting filesystem, please wait...", debugFilesystemRoot, provider, true); + } + }else { + provider = DebugFilesystem.initialize(debugFilesystemRoot); + } } } + public static void setUseJDBC(String uri) { + jdbcUri = uri; + } + + public static void setJDBCDriverClass(String driver) { + jdbcDriver = driver; + } + + public static interface IFilesystemProvider { + + boolean eaglerDelete(String pathName); + + ByteBuffer eaglerRead(String pathName); + + void eaglerWrite(String pathName, ByteBuffer data); + + boolean eaglerExists(String pathName); + + boolean eaglerMove(String pathNameOld, String pathNameNew); + + int eaglerCopy(String pathNameOld, String pathNameNew); + + int eaglerSize(String pathName); + + void eaglerIterate(String pathName, VFSFilenameIterator itr, boolean recursive); + + } + + private static void throwNotInitialized() { + throw new UnsupportedOperationException("Filesystem has not been initialized!"); + } + public static boolean eaglerDelete(String pathName) { - File f = getJREFile(pathName); - if(!f.exists()) { - logger.warn("Tried to delete file that doesn't exist: \"{}\"", pathName); - return false; - } - if(f.delete()) { - deleteParentIfEmpty(f); - return true; - } - return false; + if(provider == null) throwNotInitialized(); + return provider.eaglerDelete(pathName); } public static ByteBuffer eaglerRead(String pathName) { - File f = getJREFile(pathName); - if(f.isFile()) { - long fileSize = f.length(); - if(fileSize > 2147483647L) throw new EaglerFileSystemException("Too large: " + fileSize + " @ " + f.getAbsolutePath()); - ByteBuffer buf = PlatformRuntime.allocateByteBuffer((int)fileSize); - try(FileInputStream is = new FileInputStream(f)) { - byte[] copyBuffer = new byte[4096]; - int i; - while((i = is.read(copyBuffer, 0, copyBuffer.length)) != -1) { - buf.put(copyBuffer, 0, i); - } - if(buf.remaining() > 0) { - throw new EaglerFileSystemException("ERROR: " + buf.remaining() + " bytes are remaining after reading: " + f.getAbsolutePath()); - } - buf.flip(); - ByteBuffer tmp = buf; - buf = null; - return tmp; - }catch (IOException e) { - throw new EaglerFileSystemException("Failed to read: " + f.getAbsolutePath(), e); - }catch(ArrayIndexOutOfBoundsException ex) { - throw new EaglerFileSystemException("ERROR: Expected " + fileSize + " bytes, buffer overflow reading: " + f.getAbsolutePath(), ex); - }finally { - if(buf != null) { - PlatformRuntime.freeByteBuffer(buf); - } - } - }else { - logger.warn("Tried to read file that doesn't exist: \"{}\"", f.getAbsolutePath()); - return null; - } + if(provider == null) throwNotInitialized(); + return provider.eaglerRead(pathName); } public static void eaglerWrite(String pathName, ByteBuffer data) { - File f = getJREFile(pathName); - File p = f.getParentFile(); - if(!p.isDirectory()) { - if(!p.mkdirs()) { - throw new EaglerFileSystemException("Could not create parent directory: " + p.getAbsolutePath()); - } - } - try(FileOutputStream fos = new FileOutputStream(f)) { - byte[] copyBuffer = new byte[Math.min(4096, data.remaining())]; - int i; - while((i = data.remaining()) > 0) { - if(i > copyBuffer.length) { - i = copyBuffer.length; - } - data.get(copyBuffer, 0, i); - fos.write(copyBuffer, 0, i); - } - }catch (IOException e) { - throw new EaglerFileSystemException("Failed to write: " + f.getAbsolutePath(), e); - } + if(provider == null) throwNotInitialized(); + provider.eaglerWrite(pathName, data); } public static boolean eaglerExists(String pathName) { - return getJREFile(pathName).isFile(); + if(provider == null) throwNotInitialized(); + return provider.eaglerExists(pathName); } public static boolean eaglerMove(String pathNameOld, String pathNameNew) { - File f1 = getJREFile(pathNameOld); - File f2 = getJREFile(pathNameNew); - if(f2.exists()) { - logger.warn("Tried to rename file \"{}\" to \"{}\" which already exists! File will be replaced"); - if(!f2.delete()) { - return false; - } - } - if(f1.renameTo(f2)) { - deleteParentIfEmpty(f1); - return true; - } - return false; + if(provider == null) throwNotInitialized(); + return provider.eaglerMove(pathNameOld, pathNameNew); } public static int eaglerCopy(String pathNameOld, String pathNameNew) { - File f1 = getJREFile(pathNameOld); - File f2 = getJREFile(pathNameNew); - if(!f1.isFile()) { - return -1; - } - if(f2.isDirectory()) { - throw new EaglerFileSystemException("Destination file is a directory: " + f2.getAbsolutePath()); - } - File p = f2.getParentFile(); - if(!p.isDirectory()) { - if(!p.mkdirs()) { - throw new EaglerFileSystemException("Could not create parent directory: " + p.getAbsolutePath()); - } - } - int sz = 0; - try(FileInputStream is = new FileInputStream(f1)) { - try(FileOutputStream os = new FileOutputStream(f2)) { - byte[] copyBuffer = new byte[4096]; - int i; - while((i = is.read(copyBuffer, 0, copyBuffer.length)) != -1) { - os.write(copyBuffer, 0, i); - sz += i; - } - } - }catch (IOException e) { - throw new EaglerFileSystemException("Failed to copy \"" + f1.getAbsolutePath() + "\" to file \"" + f2.getAbsolutePath() + "\"", e); - } - return sz; + if(provider == null) throwNotInitialized(); + return provider.eaglerCopy(pathNameOld, pathNameNew); } public static int eaglerSize(String pathName) { - File f = getJREFile(pathName); - if(f.isFile()) { - long fileSize = f.length(); - if(fileSize > 2147483647L) throw new EaglerFileSystemException("Too large: " + fileSize + " @ " + f.getAbsolutePath()); - return (int)fileSize; - }else { - return -1; - } + if(provider == null) throwNotInitialized(); + return provider.eaglerSize(pathName); } public static void eaglerIterate(String pathName, VFSFilenameIterator itr, boolean recursive) { - try { - iterateFile(pathName, getJREFile(pathName), itr, recursive); - }catch(BreakLoop ex) { - } + if(provider == null) throwNotInitialized(); + provider.eaglerIterate(pathName, itr, recursive); } - private static void iterateFile(String pathName, File f, VFSFilenameIterator itr, boolean recursive) { - if(!f.exists()) { - return; - } - if(!f.isDirectory()) { - itr.next(pathName); - return; - } - File[] fa = f.listFiles(); - for(int i = 0; i < fa.length; ++i) { - File ff = fa[i]; - String fn = pathName + "/" + ff.getName(); - if(ff.isDirectory()) { - if(recursive) { - iterateFile(fn, ff, itr, true); - } - }else { - itr.next(fn); + public static void platformShutdown() { + if(provider != null) { + if(provider instanceof JDBCFilesystem) { + ((JDBCFilesystem)provider).shutdown(); } - } - } - - private static File getJREFile(String path) { - return new File(filesystemRoot, path); - } - - private static void deleteParentIfEmpty(File f) { - String[] s; - while((f = f.getParentFile()) != null && (s = f.list()) != null && s.length == 0) { - f.delete(); + provider = null; } } } diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java index 074cace..d15647e 100644 --- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java @@ -57,7 +57,10 @@ public class PlatformInput { public static boolean lockKeys = false; private static final List keyboardCharList = new LinkedList(); - + + private static boolean vsync = true; + private static boolean glfwVSyncState = false; + private static class KeyboardEvent { protected final int key; @@ -214,8 +217,16 @@ public class PlatformInput { return glfwWindowShouldClose(win); } + public static void setVSync(boolean enable) { + vsync = enable; + } + public static void update() { glfwPollEvents(); + if(vsync != glfwVSyncState) { + glfwSwapInterval(vsync ? 1 : 0); + glfwVSyncState = vsync; + } glfwSwapBuffers(win); } diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java index 4abaaf7..7fffdcf 100644 --- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java @@ -7,6 +7,8 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.IntBuffer; import static org.lwjgl.opengles.GLES30.*; +import org.lwjgl.opengles.GLESCapabilities; + /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. * @@ -24,6 +26,12 @@ import static org.lwjgl.opengles.GLES30.*; */ public class PlatformOpenGL { + private static boolean hasLinearHDR32FSupport = false; + + static void setCurrentContext(GLESCapabilities caps) { + hasLinearHDR32FSupport = caps.GL_OES_texture_float_linear; + } + public static final void _wglEnable(int glEnum) { glEnable(glEnum); } @@ -269,6 +277,12 @@ public class PlatformOpenGL { data == null ? 0l : EaglerLWJGLAllocator.getAddress(data)); } + public static final void _wglTexImage2Df32(int target, int level, int internalFormat, int width, int height, + int border, int format, int type, ByteBuffer data) { + nglTexImage2D(target, level, internalFormat, width, height, border, format, type, + data == null ? 0l : EaglerLWJGLAllocator.getAddress(data)); + } + public static final void _wglTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, ByteBuffer data) { nglTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, @@ -523,4 +537,7 @@ public class PlatformOpenGL { return true; } + public static final boolean checkLinearHDR32FSupport() { + return hasLinearHDR32FSupport; + } } 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 702e60a..5d108c5 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 @@ -171,7 +171,7 @@ public class PlatformRuntime { EGL.createDisplayCapabilities(glfw_eglHandle, major[0], minor[0]); glfwMakeContextCurrent(windowHandle); - GLES.createCapabilities(); + PlatformOpenGL.setCurrentContext(GLES.createCapabilities()); logger.info("OpenGL Version: {}", (glVersion = GLES30.glGetString(GLES30.GL_VERSION))); logger.info("OpenGL Renderer: {}", (glRenderer = GLES30.glGetString(GLES30.GL_RENDERER))); @@ -245,6 +245,7 @@ public class PlatformRuntime { public static void destroy() { PlatformAudio.platformShutdown(); + PlatformFilesystem.platformShutdown(); GLES.destroy(); EGL.destroy(); glfwDestroyWindow(windowHandle); @@ -340,15 +341,27 @@ public class PlatformRuntime { public static class NativeNIO { public static java.nio.ByteBuffer allocateByteBuffer(int length) { - return MemoryUtil.memByteBuffer(JEmalloc.nje_malloc(length), length); + long ret = JEmalloc.nje_malloc(length); + if(ret == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + return MemoryUtil.memByteBuffer(ret, length); } public static java.nio.IntBuffer allocateIntBuffer(int length) { - return MemoryUtil.memIntBuffer(JEmalloc.nje_malloc(length << 2), length); + long ret = JEmalloc.nje_malloc(length << 2); + if(ret == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + return MemoryUtil.memIntBuffer(ret, length); } public static java.nio.FloatBuffer allocateFloatBuffer(int length) { - return MemoryUtil.memFloatBuffer(JEmalloc.nje_malloc(length << 2), length); + long ret = JEmalloc.nje_malloc(length << 2); + if(ret == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + return MemoryUtil.memFloatBuffer(ret, length); } public static java.nio.IntBuffer getIntBuffer(java.nio.ByteBuffer byteBuffer) { 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 new file mode 100644 index 0000000..5020d8f --- /dev/null +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java @@ -0,0 +1,116 @@ +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; + +/** + * Copyright (c) 2022-2024 ayunami2000. 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 PlatformVoiceClient { + + public static void initialize() { + + } + + public static void initializeDevices() { + + } + + public static boolean isSupported() { + return false; + } + + public static void setVoiceListenVolume(float f) { + + } + + public static void setVoiceSpeakVolume(float f) { + + } + + public static void activateVoice(boolean talk) { + + } + + public static void setICEServers(String[] servs) { + + } + + public static void signalConnect(EaglercraftUUID user, boolean offer) { + + } + + public static void signalDisconnect(EaglercraftUUID user, boolean b) { + + } + + public static void signalICECandidate(EaglercraftUUID user, String ice) { + + } + + public static void signalDescription(EaglercraftUUID user, String desc) { + + } + + public static void tickVoiceClient() { + + } + + public static void updateVoicePosition(EaglercraftUUID uuid, double x, double y, double z) { + + } + + public static void resetPeerStates() { + + } + + public static void setVoiceProximity(int prox) { + + } + + public static void setMicVolume(float f) { + + } + + public static void mutePeer(EaglercraftUUID uuid, boolean mute) { + + } + + 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/buffer/EaglerLWJGLAllocator.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLAllocator.java index 8167730..e531404 100644 --- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLAllocator.java +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLAllocator.java @@ -3,7 +3,7 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; import org.lwjgl.system.jemalloc.JEmalloc; /** - * Copyright (c) 2022-2024 lax1dude, ayunami2000. 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 @@ -26,19 +26,35 @@ public class EaglerLWJGLAllocator { } public static ByteBuffer allocByteBuffer(int len) { - return new EaglerLWJGLByteBuffer(JEmalloc.nje_malloc(len), len, true); + long ret = JEmalloc.nje_malloc(len); + if(ret == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + return new EaglerLWJGLByteBuffer(ret, len, true); } public static ShortBuffer allocShortBuffer(int len) { - return new EaglerLWJGLShortBuffer(JEmalloc.nje_malloc(len << 1), len, true); + long ret = JEmalloc.nje_malloc(len << 1); + if(ret == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + return new EaglerLWJGLShortBuffer(ret, len, true); } public static IntBuffer allocIntBuffer(int len) { - return new EaglerLWJGLIntBuffer(JEmalloc.nje_malloc(len << 2), len, true); + long ret = JEmalloc.nje_malloc(len << 2); + if(ret == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + return new EaglerLWJGLIntBuffer(ret, len, true); } public static FloatBuffer allocFloatBuffer(int len) { - return new EaglerLWJGLFloatBuffer(JEmalloc.nje_malloc(len << 2), len, true); + long ret = JEmalloc.nje_malloc(len << 2); + if(ret == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + return new EaglerLWJGLFloatBuffer(ret, len, true); } public static void freeByteBuffer(ByteBuffer buffer) { diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLByteBuffer.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLByteBuffer.java index d21926f..5cb1142 100644 --- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLByteBuffer.java +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLByteBuffer.java @@ -1,10 +1,12 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.system.jemalloc.JEmalloc; +import net.lax1dude.unsafememcpy.UnsafeMemcpy; +import net.lax1dude.unsafememcpy.UnsafeUtils; + /** - * 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 @@ -104,35 +106,33 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public byte get() { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - return MemoryUtil.memGetByte(address + position++); + return UnsafeUtils.getMemByte(address + position++); } @Override public ByteBuffer put(byte b) { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - MemoryUtil.memPutByte(address + position++, b); + UnsafeUtils.setMemByte(address + position++, b); return this; } @Override public byte get(int index) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - return MemoryUtil.memGetByte(address + index); + return UnsafeUtils.getMemByte(address + index); } @Override public ByteBuffer put(int index, byte b) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - MemoryUtil.memPutByte(address + index, b); + UnsafeUtils.setMemByte(address + index, b); return this; } @Override public ByteBuffer get(byte[] dst, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - dst[offset + i] = MemoryUtil.memGetByte(address + position + i); - } + UnsafeMemcpy.memcpy(dst, offset, address + position, length); position += length; return this; } @@ -140,9 +140,7 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public ByteBuffer get(byte[] dst) { if(position + dst.length > limit) throw new ArrayIndexOutOfBoundsException(position + dst.length - 1); - for(int i = 0; i < dst.length; ++i) { - dst[position + i] = MemoryUtil.memGetByte(address + position + i); - } + UnsafeMemcpy.memcpy(dst, 0, address + position, dst.length); position += dst.length; return this; } @@ -153,14 +151,14 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { EaglerLWJGLByteBuffer c = (EaglerLWJGLByteBuffer)src; int l = c.limit - c.position; if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); - MemoryUtil.memCopy(c.address + c.position, address + position, l); + UnsafeMemcpy.memcpy(address + position, c.address + c.position, l); position += l; c.position += l; }else { int l = src.remaining(); if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); for(int i = 0; i < l; ++i) { - MemoryUtil.memPutByte(address + position + l, src.get()); + UnsafeUtils.setMemByte(address + position + l, src.get()); } position += l; } @@ -170,9 +168,7 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public ByteBuffer put(byte[] src, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - MemoryUtil.memPutByte(address + position + i, src[offset + i]); - } + UnsafeMemcpy.memcpy(address + position, src, offset, length); position += length; return this; } @@ -180,9 +176,7 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public ByteBuffer put(byte[] src) { if(position + src.length > limit) throw new ArrayIndexOutOfBoundsException(position + src.length - 1); - for(int i = 0; i < src.length; ++i) { - MemoryUtil.memPutByte(address + position + i, src[i]); - } + UnsafeMemcpy.memcpy(address + position, src, 0, src.length); position += src.length; return this; } @@ -203,7 +197,10 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { int newLen = limit - position; long newAlloc = JEmalloc.nje_malloc(newLen); - MemoryUtil.memCopy(address + position, newAlloc, newLen); + if(newAlloc == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + UnsafeMemcpy.memcpy(newAlloc, address + position, newLen); return new EaglerLWJGLByteBuffer(newAlloc, newLen, true); } @@ -211,7 +208,7 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public char getChar() { if(position + 2 > limit) throw new ArrayIndexOutOfBoundsException(position); - char c = (char)MemoryUtil.memGetShort(address + position); + char c = UnsafeUtils.getMemChar(address + position); position += 2; return c; } @@ -219,7 +216,7 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public ByteBuffer putChar(char value) { if(position + 2 > limit) throw new ArrayIndexOutOfBoundsException(position); - MemoryUtil.memPutShort(address + position, (short)value); + UnsafeUtils.setMemChar(address + position, value); position += 2; return this; } @@ -227,20 +224,20 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public char getChar(int index) { if(index + 2 > limit) throw new ArrayIndexOutOfBoundsException(index); - return (char)MemoryUtil.memGetShort(address + index); + return UnsafeUtils.getMemChar(address + index); } @Override public ByteBuffer putChar(int index, char value) { if(index + 2 > limit) throw new ArrayIndexOutOfBoundsException(index); - MemoryUtil.memPutShort(address + index, (short)value); + UnsafeUtils.setMemChar(address + index, value); return this; } @Override public short getShort() { if(position + 2 > limit) throw new ArrayIndexOutOfBoundsException(position); - short s = MemoryUtil.memGetShort(address + position); + short s = UnsafeUtils.getMemShort(address + position); position += 2; return s; } @@ -248,7 +245,7 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public ByteBuffer putShort(short value) { if(position + 2 > limit) throw new ArrayIndexOutOfBoundsException(position); - MemoryUtil.memPutShort(address + position, value); + UnsafeUtils.setMemShort(address + position, value); position += 2; return this; } @@ -256,13 +253,13 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public short getShort(int index) { if(index + 2 > limit) throw new ArrayIndexOutOfBoundsException(index); - return MemoryUtil.memGetShort(address + index); + return UnsafeUtils.getMemShort(address + index); } @Override public ByteBuffer putShort(int index, short value) { if(index + 2 > limit) throw new ArrayIndexOutOfBoundsException(index); - MemoryUtil.memPutShort(address + index, value); + UnsafeUtils.setMemShort(address + index, value); return this; } @@ -274,7 +271,7 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public int getInt() { if(position + 4 > limit) throw new ArrayIndexOutOfBoundsException(position); - int i = MemoryUtil.memGetInt(address + position); + int i = UnsafeUtils.getMemInt(address + position); position += 4; return i; } @@ -282,7 +279,7 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public ByteBuffer putInt(int value) { if(position + 4 > limit) throw new ArrayIndexOutOfBoundsException(position); - MemoryUtil.memPutInt(address + position, value); + UnsafeUtils.setMemInt(address + position, value); position += 4; return this; } @@ -290,13 +287,13 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public int getInt(int index) { if(index + 4 > limit) throw new ArrayIndexOutOfBoundsException(index); - return MemoryUtil.memGetInt(address + index); + return UnsafeUtils.getMemInt(address + index); } @Override public ByteBuffer putInt(int index, int value) { if(index + 4 > limit) throw new ArrayIndexOutOfBoundsException(index); - MemoryUtil.memPutInt(address + index, value); + UnsafeUtils.setMemInt(address + index, value); return this; } @@ -308,7 +305,7 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public long getLong() { if(position + 8 > limit) throw new ArrayIndexOutOfBoundsException(position); - long l = MemoryUtil.memGetLong(address + position); + long l = UnsafeUtils.getMemLong(address + position); position += 8; return l; } @@ -316,7 +313,7 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public ByteBuffer putLong(long value) { if(position + 8 > limit) throw new ArrayIndexOutOfBoundsException(position); - MemoryUtil.memPutLong(address + position, value); + UnsafeUtils.setMemLong(address + position, value); position += 8; return this; } @@ -324,20 +321,20 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public long getLong(int index) { if(index + 8 > limit) throw new ArrayIndexOutOfBoundsException(index); - return MemoryUtil.memGetLong(address + index); + return UnsafeUtils.getMemLong(address + index); } @Override public ByteBuffer putLong(int index, long value) { if(index + 8 > limit) throw new ArrayIndexOutOfBoundsException(index); - MemoryUtil.memPutLong(address + index, value); + UnsafeUtils.setMemLong(address + index, value); return this; } @Override public float getFloat() { if(position + 4 > limit) throw new ArrayIndexOutOfBoundsException(position); - float f = MemoryUtil.memGetFloat(address + position); + float f = UnsafeUtils.getMemFloat(address + position); position += 4; return f; } @@ -345,7 +342,7 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public ByteBuffer putFloat(float value) { if(position + 4 > limit) throw new ArrayIndexOutOfBoundsException(position); - MemoryUtil.memPutFloat(address + position, value); + UnsafeUtils.setMemFloat(address + position, value); position += 4; return this; } @@ -353,13 +350,13 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { @Override public float getFloat(int index) { if(index + 4 > limit) throw new ArrayIndexOutOfBoundsException(index); - return MemoryUtil.memGetFloat(address + index); + return UnsafeUtils.getMemFloat(address + index); } @Override public ByteBuffer putFloat(int index, float value) { if(index + 4 > limit) throw new ArrayIndexOutOfBoundsException(index); - MemoryUtil.memPutFloat(address + index, value); + UnsafeUtils.setMemFloat(address + index, value); return this; } diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLFloatBuffer.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLFloatBuffer.java index 5110c17..a163fe7 100644 --- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLFloatBuffer.java +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLFloatBuffer.java @@ -1,10 +1,12 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.system.jemalloc.JEmalloc; +import net.lax1dude.unsafememcpy.UnsafeMemcpy; +import net.lax1dude.unsafememcpy.UnsafeUtils; + /** - * 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 @@ -106,47 +108,45 @@ public class EaglerLWJGLFloatBuffer implements FloatBuffer { @Override public float get() { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - return MemoryUtil.memGetFloat(address + ((position++) << SHIFT)); + return UnsafeUtils.getMemFloat(address + ((position++) << SHIFT)); } @Override public FloatBuffer put(float b) { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - MemoryUtil.memPutFloat(address + ((position++) << SHIFT), b); + UnsafeUtils.setMemFloat(address + ((position++) << SHIFT), b); return this; } @Override public float get(int index) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - return MemoryUtil.memGetFloat(address + (index << SHIFT)); + return UnsafeUtils.getMemFloat(address + (index << SHIFT)); } @Override public FloatBuffer put(int index, float b) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - MemoryUtil.memPutFloat(address + (index << SHIFT), b); + UnsafeUtils.setMemFloat(address + (index << SHIFT), b); return this; } @Override public float getElement(int index) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - return MemoryUtil.memGetFloat(address + (index << SHIFT)); + return UnsafeUtils.getMemFloat(address + (index << SHIFT)); } @Override public void putElement(int index, float value) { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - MemoryUtil.memPutFloat(address + ((position++) << SHIFT), value); + UnsafeUtils.setMemFloat(address + ((position++) << SHIFT), value); } @Override public FloatBuffer get(float[] dst, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - dst[offset + i] = MemoryUtil.memGetFloat(address + ((position + i) << SHIFT)); - } + UnsafeMemcpy.memcpyAlignDst(dst, offset << SHIFT, address + (position << SHIFT), length); position += length; return this; } @@ -154,9 +154,7 @@ public class EaglerLWJGLFloatBuffer implements FloatBuffer { @Override public FloatBuffer get(float[] dst) { if(position + dst.length > limit) throw new ArrayIndexOutOfBoundsException(position + dst.length - 1); - for(int i = 0; i < dst.length; ++i) { - dst[i] = MemoryUtil.memGetFloat(address + ((position + i) << SHIFT)); - } + UnsafeMemcpy.memcpyAlignDst(dst, 0, address + (position << SHIFT), dst.length); position += dst.length; return this; } @@ -167,14 +165,14 @@ public class EaglerLWJGLFloatBuffer implements FloatBuffer { EaglerLWJGLFloatBuffer c = (EaglerLWJGLFloatBuffer)src; int l = c.limit - c.position; if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); - MemoryUtil.memCopy(c.address + (c.position << SHIFT), address + (position << SHIFT), l << SHIFT); + UnsafeMemcpy.memcpy(address + (position << SHIFT), c.address + (c.position << SHIFT), l << SHIFT); position += l; c.position += l; }else { int l = src.remaining(); if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); for(int i = 0; i < l; ++i) { - MemoryUtil.memPutFloat(address + ((position + l) << SHIFT), src.get()); + UnsafeUtils.setMemFloat(address + ((position + l) << SHIFT), src.get()); } position += l; } @@ -184,9 +182,7 @@ public class EaglerLWJGLFloatBuffer implements FloatBuffer { @Override public FloatBuffer put(float[] src, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - MemoryUtil.memPutFloat(address + ((position + i) << SHIFT), src[offset + i]); - } + UnsafeMemcpy.memcpyAlignSrc(address + (position << SHIFT), src, offset << SHIFT, length); position += length; return this; } @@ -194,9 +190,7 @@ public class EaglerLWJGLFloatBuffer implements FloatBuffer { @Override public FloatBuffer put(float[] src) { if(position + src.length > limit) throw new ArrayIndexOutOfBoundsException(position + src.length - 1); - for(int i = 0; i < src.length; ++i) { - MemoryUtil.memPutFloat(address + ((position + i) << SHIFT), src[i]); - } + UnsafeMemcpy.memcpyAlignSrc(address + (position << SHIFT), src, 0, src.length); position += src.length; return this; } @@ -217,7 +211,10 @@ public class EaglerLWJGLFloatBuffer implements FloatBuffer { int newLen = limit - position; long newAlloc = JEmalloc.nje_malloc(newLen); - MemoryUtil.memCopy(address + (position << SHIFT), newAlloc, newLen << SHIFT); + if(newAlloc == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + UnsafeMemcpy.memcpy(newAlloc, address + (position << SHIFT), newLen << SHIFT); return new EaglerLWJGLFloatBuffer(newAlloc, newLen, true); } diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLIntBuffer.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLIntBuffer.java index 6471eed..bf306a2 100644 --- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLIntBuffer.java +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLIntBuffer.java @@ -1,10 +1,12 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.system.jemalloc.JEmalloc; +import net.lax1dude.unsafememcpy.UnsafeMemcpy; +import net.lax1dude.unsafememcpy.UnsafeUtils; + /** - * 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 @@ -106,47 +108,45 @@ public class EaglerLWJGLIntBuffer implements IntBuffer { @Override public int get() { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - return MemoryUtil.memGetInt(address + ((position++) << SHIFT)); + return UnsafeUtils.getMemInt(address + ((position++) << SHIFT)); } @Override public IntBuffer put(int b) { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - MemoryUtil.memPutInt(address + ((position++) << SHIFT), b); + UnsafeUtils.setMemInt(address + ((position++) << SHIFT), b); return this; } @Override public int get(int index) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - return MemoryUtil.memGetInt(address + (index << SHIFT)); + return UnsafeUtils.getMemInt(address + (index << SHIFT)); } @Override public IntBuffer put(int index, int b) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - MemoryUtil.memPutInt(address + (index << SHIFT), b); + UnsafeUtils.setMemInt(address + (index << SHIFT), b); return this; } @Override public int getElement(int index) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - return MemoryUtil.memGetInt(address + (index << SHIFT)); + return UnsafeUtils.getMemInt(address + (index << SHIFT)); } @Override public void putElement(int index, int value) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - MemoryUtil.memPutInt(address + (index << SHIFT), value); + UnsafeUtils.setMemInt(address + (index << SHIFT), value); } @Override public IntBuffer get(int[] dst, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - dst[offset + i] = MemoryUtil.memGetInt(address + ((position + i) << SHIFT)); - } + UnsafeMemcpy.memcpyAlignDst(dst, offset << SHIFT, address + (position << SHIFT), length); position += length; return this; } @@ -154,9 +154,7 @@ public class EaglerLWJGLIntBuffer implements IntBuffer { @Override public IntBuffer get(int[] dst) { if(position + dst.length > limit) throw new ArrayIndexOutOfBoundsException(position + dst.length - 1); - for(int i = 0; i < dst.length; ++i) { - dst[i] = MemoryUtil.memGetInt(address + ((position + i) << SHIFT)); - } + UnsafeMemcpy.memcpyAlignDst(dst, 0, address + (position << SHIFT), dst.length); position += dst.length; return this; } @@ -167,14 +165,14 @@ public class EaglerLWJGLIntBuffer implements IntBuffer { EaglerLWJGLIntBuffer c = (EaglerLWJGLIntBuffer)src; int l = c.limit - c.position; if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); - MemoryUtil.memCopy(c.address + (c.position << SHIFT), address + (position << SHIFT), l << SHIFT); + UnsafeMemcpy.memcpy(address + (position << SHIFT), c.address + (c.position << SHIFT), l << SHIFT); position += l; c.position += l; }else { int l = src.remaining(); if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); for(int i = 0; i < l; ++i) { - MemoryUtil.memPutInt(address + ((position + l) << SHIFT), src.get()); + UnsafeUtils.setMemInt(address + ((position + l) << SHIFT), src.get()); } position += l; } @@ -184,9 +182,7 @@ public class EaglerLWJGLIntBuffer implements IntBuffer { @Override public IntBuffer put(int[] src, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - MemoryUtil.memPutInt(address + ((position + i) << SHIFT), src[offset + i]); - } + UnsafeMemcpy.memcpyAlignSrc(address + (position << SHIFT), src, offset << SHIFT, length); position += length; return this; } @@ -194,9 +190,7 @@ public class EaglerLWJGLIntBuffer implements IntBuffer { @Override public IntBuffer put(int[] src) { if(position + src.length > limit) throw new ArrayIndexOutOfBoundsException(position + src.length - 1); - for(int i = 0; i < src.length; ++i) { - MemoryUtil.memPutInt(address + ((position + i) << SHIFT), src[i]); - } + UnsafeMemcpy.memcpyAlignSrc(address + (position << SHIFT), src, 0, src.length); position += src.length; return this; } @@ -217,7 +211,10 @@ public class EaglerLWJGLIntBuffer implements IntBuffer { int newLen = limit - position; long newAlloc = JEmalloc.nje_malloc(newLen); - MemoryUtil.memCopy(address + (position << SHIFT), newAlloc, newLen << SHIFT); + if(newAlloc == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + UnsafeMemcpy.memcpy(newAlloc, address + (position << SHIFT), newLen << SHIFT); return new EaglerLWJGLIntBuffer(newAlloc, newLen, true); } diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLShortBuffer.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLShortBuffer.java index 01e0198..eba363d 100644 --- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLShortBuffer.java +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLShortBuffer.java @@ -1,10 +1,12 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.system.jemalloc.JEmalloc; +import net.lax1dude.unsafememcpy.UnsafeMemcpy; +import net.lax1dude.unsafememcpy.UnsafeUtils; + /** - * 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 @@ -106,47 +108,45 @@ public class EaglerLWJGLShortBuffer implements ShortBuffer { @Override public short get() { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - return MemoryUtil.memGetShort(address + ((position++) << SHIFT)); + return UnsafeUtils.getMemShort(address + ((position++) << SHIFT)); } @Override public ShortBuffer put(short b) { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - MemoryUtil.memPutShort(address + ((position++) << SHIFT), b); + UnsafeUtils.setMemShort(address + ((position++) << SHIFT), b); return this; } @Override public short get(int index) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - return MemoryUtil.memGetShort(address + (index << SHIFT)); + return UnsafeUtils.getMemShort(address + (index << SHIFT)); } @Override public ShortBuffer put(int index, short b) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - MemoryUtil.memPutShort(address + (index << SHIFT), b); + UnsafeUtils.setMemShort(address + (index << SHIFT), b); return this; } @Override public short getElement(int index) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - return MemoryUtil.memGetShort(address + (index << SHIFT)); + return UnsafeUtils.getMemShort(address + (index << SHIFT)); } @Override public void putElement(int index, short value) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - MemoryUtil.memPutShort(address + (index << SHIFT), value); + UnsafeUtils.setMemShort(address + (index << SHIFT), value); } @Override public ShortBuffer get(short[] dst, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - dst[offset + i] = MemoryUtil.memGetShort(address + ((position + i) << SHIFT)); - } + UnsafeMemcpy.memcpyAlignDst(dst, offset << SHIFT, address + (position << SHIFT), length); position += length; return this; } @@ -154,9 +154,7 @@ public class EaglerLWJGLShortBuffer implements ShortBuffer { @Override public ShortBuffer get(short[] dst) { if(position + dst.length > limit) throw new ArrayIndexOutOfBoundsException(position + dst.length - 1); - for(int i = 0; i < dst.length; ++i) { - dst[i] = MemoryUtil.memGetShort(address + ((position + i) << SHIFT)); - } + UnsafeMemcpy.memcpyAlignDst(dst, 0, address + (position << SHIFT), dst.length); position += dst.length; return this; } @@ -167,14 +165,14 @@ public class EaglerLWJGLShortBuffer implements ShortBuffer { EaglerLWJGLShortBuffer c = (EaglerLWJGLShortBuffer)src; int l = c.limit - c.position; if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); - MemoryUtil.memCopy(c.address + (c.position << SHIFT), address + (position << SHIFT), l << SHIFT); + UnsafeMemcpy.memcpy(address + (position << SHIFT), c.address + (c.position << SHIFT), l << SHIFT); position += l; c.position += l; }else { int l = src.remaining(); if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); for(int i = 0; i < l; ++i) { - MemoryUtil.memPutShort(address + ((position + l) << SHIFT), src.get()); + UnsafeUtils.setMemInt(address + ((position + l) << SHIFT), src.get()); } position += l; } @@ -184,9 +182,7 @@ public class EaglerLWJGLShortBuffer implements ShortBuffer { @Override public ShortBuffer put(short[] src, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - MemoryUtil.memPutShort(address + ((position + i) << SHIFT), src[offset + i]); - } + UnsafeMemcpy.memcpyAlignSrc(address + (position << SHIFT), src, offset << SHIFT, length); position += length; return this; } @@ -194,9 +190,7 @@ public class EaglerLWJGLShortBuffer implements ShortBuffer { @Override public ShortBuffer put(short[] src) { if(position + src.length > limit) throw new ArrayIndexOutOfBoundsException(position + src.length - 1); - for(int i = 0; i < src.length; ++i) { - MemoryUtil.memPutShort(address + ((position + i) << SHIFT), src[i]); - } + UnsafeMemcpy.memcpyAlignSrc(address + (position << SHIFT), src, 0, src.length); position += src.length; return this; } @@ -217,7 +211,10 @@ public class EaglerLWJGLShortBuffer implements ShortBuffer { int newLen = limit - position; long newAlloc = JEmalloc.nje_malloc(newLen); - MemoryUtil.memCopy(address + (position << SHIFT), newAlloc, newLen << SHIFT); + if(newAlloc == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + UnsafeMemcpy.memcpy(newAlloc, address + (position << SHIFT), newLen << SHIFT); return new EaglerLWJGLShortBuffer(newAlloc, newLen, true); } diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DebugFilesystem.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DebugFilesystem.java new file mode 100644 index 0000000..a5ee8df --- /dev/null +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DebugFilesystem.java @@ -0,0 +1,224 @@ +package net.lax1dude.eaglercraft.v1_8.internal.lwjgl; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +import net.lax1dude.eaglercraft.v1_8.internal.PlatformFilesystem; +import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; +import net.lax1dude.eaglercraft.v1_8.internal.VFSFilenameIterator; +import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; +import net.lax1dude.eaglercraft.v1_8.internal.vfs2.EaglerFileSystemException; +import net.lax1dude.eaglercraft.v1_8.internal.vfs2.VFSIterator2.BreakLoop; + +/** + * 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 DebugFilesystem implements PlatformFilesystem.IFilesystemProvider { + + public static DebugFilesystem initialize(File filesystemRoot) { + if(!filesystemRoot.isDirectory() && !filesystemRoot.mkdirs()) { + throw new EaglerFileSystemException("Could not create directory for virtual filesystem: " + filesystemRoot.getAbsolutePath()); + } + return new DebugFilesystem(filesystemRoot); + } + + private final File filesystemRoot; + + private DebugFilesystem(File root) { + this.filesystemRoot = root; + } + + @Override + public boolean eaglerDelete(String pathName) { + File f = getJREFile(pathName); + if(!f.exists()) { + PlatformFilesystem.logger.warn("Tried to delete file that doesn't exist: \"{}\"", pathName); + return false; + } + if(f.delete()) { + deleteParentIfEmpty(f); + return true; + } + return false; + } + + @Override + public ByteBuffer eaglerRead(String pathName) { + File f = getJREFile(pathName); + if(f.isFile()) { + long fileSize = f.length(); + if(fileSize > 2147483647L) throw new EaglerFileSystemException("Too large: " + fileSize + " @ " + f.getAbsolutePath()); + ByteBuffer buf = PlatformRuntime.allocateByteBuffer((int)fileSize); + try(FileInputStream is = new FileInputStream(f)) { + byte[] copyBuffer = new byte[4096]; + int i; + while((i = is.read(copyBuffer, 0, copyBuffer.length)) != -1) { + buf.put(copyBuffer, 0, i); + } + if(buf.remaining() > 0) { + throw new EaglerFileSystemException("ERROR: " + buf.remaining() + " bytes are remaining after reading: " + f.getAbsolutePath()); + } + buf.flip(); + ByteBuffer tmp = buf; + buf = null; + return tmp; + }catch (IOException e) { + throw new EaglerFileSystemException("Failed to read: " + f.getAbsolutePath(), e); + }catch(ArrayIndexOutOfBoundsException ex) { + throw new EaglerFileSystemException("ERROR: Expected " + fileSize + " bytes, buffer overflow reading: " + f.getAbsolutePath(), ex); + }finally { + if(buf != null) { + PlatformRuntime.freeByteBuffer(buf); + } + } + }else { + PlatformFilesystem.logger.warn("Tried to read file that doesn't exist: \"{}\"", f.getAbsolutePath()); + return null; + } + } + + @Override + public void eaglerWrite(String pathName, ByteBuffer data) { + File f = getJREFile(pathName); + File p = f.getParentFile(); + if(!p.isDirectory()) { + if(!p.mkdirs()) { + throw new EaglerFileSystemException("Could not create parent directory: " + p.getAbsolutePath()); + } + } + try(FileOutputStream fos = new FileOutputStream(f)) { + byte[] copyBuffer = new byte[Math.min(4096, data.remaining())]; + int i; + while((i = data.remaining()) > 0) { + if(i > copyBuffer.length) { + i = copyBuffer.length; + } + data.get(copyBuffer, 0, i); + fos.write(copyBuffer, 0, i); + } + }catch (IOException e) { + throw new EaglerFileSystemException("Failed to write: " + f.getAbsolutePath(), e); + } + } + + @Override + public boolean eaglerExists(String pathName) { + return getJREFile(pathName).isFile(); + } + + @Override + public boolean eaglerMove(String pathNameOld, String pathNameNew) { + File f1 = getJREFile(pathNameOld); + File f2 = getJREFile(pathNameNew); + if(f2.exists()) { + PlatformFilesystem.logger.warn("Tried to rename file \"{}\" to \"{}\" which already exists! File will be replaced"); + if(!f2.delete()) { + return false; + } + } + if(f1.renameTo(f2)) { + deleteParentIfEmpty(f1); + return true; + } + return false; + } + + @Override + public int eaglerCopy(String pathNameOld, String pathNameNew) { + File f1 = getJREFile(pathNameOld); + File f2 = getJREFile(pathNameNew); + if(!f1.isFile()) { + return -1; + } + if(f2.isDirectory()) { + throw new EaglerFileSystemException("Destination file is a directory: " + f2.getAbsolutePath()); + } + File p = f2.getParentFile(); + if(!p.isDirectory()) { + if(!p.mkdirs()) { + throw new EaglerFileSystemException("Could not create parent directory: " + p.getAbsolutePath()); + } + } + int sz = 0; + try(FileInputStream is = new FileInputStream(f1)) { + try(FileOutputStream os = new FileOutputStream(f2)) { + byte[] copyBuffer = new byte[4096]; + int i; + while((i = is.read(copyBuffer, 0, copyBuffer.length)) != -1) { + os.write(copyBuffer, 0, i); + sz += i; + } + } + }catch (IOException e) { + throw new EaglerFileSystemException("Failed to copy \"" + f1.getAbsolutePath() + "\" to file \"" + f2.getAbsolutePath() + "\"", e); + } + return sz; + } + + @Override + public int eaglerSize(String pathName) { + File f = getJREFile(pathName); + if(f.isFile()) { + long fileSize = f.length(); + if(fileSize > 2147483647L) throw new EaglerFileSystemException("Too large: " + fileSize + " @ " + f.getAbsolutePath()); + return (int)fileSize; + }else { + return -1; + } + } + + @Override + public void eaglerIterate(String pathName, VFSFilenameIterator itr, boolean recursive) { + try { + iterateFile(pathName, getJREFile(pathName), itr, recursive); + }catch(BreakLoop ex) { + } + } + + private void iterateFile(String pathName, File f, VFSFilenameIterator itr, boolean recursive) { + if(!f.exists()) { + return; + } + if(!f.isDirectory()) { + itr.next(pathName); + return; + } + File[] fa = f.listFiles(); + for(int i = 0; i < fa.length; ++i) { + File ff = fa[i]; + String fn = pathName + "/" + ff.getName(); + if(ff.isDirectory()) { + if(recursive) { + iterateFile(fn, ff, itr, true); + } + }else { + itr.next(fn); + } + } + } + + private File getJREFile(String path) { + return new File(filesystemRoot, path); + } + + private void deleteParentIfEmpty(File f) { + String[] s; + while((f = f.getParentFile()) != null && (s = f.list()) != null && s.length == 0) { + f.delete(); + } + } +} 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 26b1be6..3ce88b5 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 @@ -124,4 +124,9 @@ public class DesktopClientConfigAdapter implements IClientConfigAdapter { return false; } + @Override + public boolean isAllowVoiceClient() { + return false; + } + } diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FilesystemConvertingDialog.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FilesystemConvertingDialog.java new file mode 100644 index 0000000..4b23727 --- /dev/null +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FilesystemConvertingDialog.java @@ -0,0 +1,78 @@ +package net.lax1dude.eaglercraft.v1_8.internal.lwjgl; + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.border.EmptyBorder; +import java.awt.Color; +import java.awt.BorderLayout; +import javax.swing.JProgressBar; +import java.awt.Dimension; +import java.awt.Toolkit; + +import javax.swing.JLabel; +import javax.swing.SwingConstants; +import javax.swing.UIManager; + +/** + * 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 FilesystemConvertingDialog extends JFrame { + + private static final long serialVersionUID = 1L; + private JPanel contentPane; + private JProgressBar progressBar; + + public FilesystemConvertingDialog(String title) { + setIconImage(Toolkit.getDefaultToolkit().getImage("icon32.png")); + setResizable(false); + setAlwaysOnTop(true); + setTitle("EaglercraftX 1.8"); + setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + setBounds(100, 100, 420, 100); + contentPane = new JPanel(); + contentPane.setBackground(new Color(255, 255, 255)); + contentPane.setBorder(null); + + setContentPane(contentPane); + contentPane.setLayout(new BorderLayout(0, 0)); + + JPanel panel = new JPanel(); + panel.setBorder(new EmptyBorder(10, 10, 10, 10)); + panel.setBackground(new Color(255, 255, 255)); + contentPane.add(panel, BorderLayout.SOUTH); + panel.setLayout(new BorderLayout(0, 0)); + + progressBar = new JProgressBar(); + progressBar.setIndeterminate(true); + progressBar.setPreferredSize(new Dimension(146, 20)); + progressBar.setMinimum(0); + progressBar.setMaximum(512); + panel.add(progressBar, BorderLayout.CENTER); + + JLabel lblNewLabel = new JLabel(title); + lblNewLabel.setFont(UIManager.getFont("PopupMenu.font")); + lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); + contentPane.add(lblNewLabel, BorderLayout.CENTER); + } + + public void setProgressIndeterminate(boolean itr) { + progressBar.setIndeterminate(itr); + } + + public void setProgressValue(int val) { + progressBar.setValue(val); + } + +} diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystem.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystem.java new file mode 100644 index 0000000..c6aae92 --- /dev/null +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystem.java @@ -0,0 +1,441 @@ +package net.lax1dude.eaglercraft.v1_8.internal.lwjgl; + +import java.sql.Connection; +import java.sql.Driver; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Collection; +import java.util.Enumeration; +import java.util.LinkedList; +import java.util.Map.Entry; +import java.util.Properties; + +import net.lax1dude.eaglercraft.v1_8.internal.PlatformFilesystem.IFilesystemProvider; +import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; +import net.lax1dude.eaglercraft.v1_8.internal.PlatformFilesystem; +import net.lax1dude.eaglercraft.v1_8.internal.VFSFilenameIterator; +import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; +import net.lax1dude.eaglercraft.v1_8.internal.vfs2.EaglerFileSystemException; +import net.lax1dude.eaglercraft.v1_8.internal.vfs2.VFSIterator2; +import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; + +/** + * 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 JDBCFilesystem implements IFilesystemProvider { + + public static final Logger logger = LogManager.getLogger("JDBCFilesystem"); + + private boolean newFilesystem = true; + + private static volatile boolean cleanupThreadStarted = false; + private static final Collection jdbcFilesystems = new LinkedList(); + + private final String jdbcUri; + private final String jdbcDriver; + + private final Connection conn; + private final PreparedStatement createStatement; + private final PreparedStatement updateStatement; + private final PreparedStatement readStatement; + private final PreparedStatement existsStatement; + private final PreparedStatement sizeStatement; + private final PreparedStatement deleteStatement; + private final PreparedStatement renameStatement; + private final PreparedStatement iterateNonRecursive; + private final PreparedStatement iterateRecursive; + private boolean hasClosed = false; + + private final Object mutex = new Object(); + + public static IFilesystemProvider initialize(String jdbcUri, String jdbcDriver) { + Class driver; + try { + driver = Class.forName(jdbcDriver); + } catch (ClassNotFoundException e) { + throw new EaglerFileSystemException("JDBC driver class not found in JRE: " + jdbcDriver, e); + } + Driver driverObj = null; + Enumeration registeredDriversItr = DriverManager.getDrivers(); + while(registeredDriversItr.hasMoreElements()) { + Driver drv = registeredDriversItr.nextElement(); + if(drv.getClass().equals(driver)) { + driverObj = drv; + break; + } + } + if(driverObj == null) { + logger.warn("The class \"{}\" is not a registered JDBC driver, eaglercraft will try all registered drivers...", jdbcDriver); + } + Properties props = new Properties(); + for(Entry etr : System.getProperties().entrySet()) { + if(etr.getKey() instanceof String) { + String str = (String)etr.getKey(); + if(str.startsWith("eagler.jdbc.opts.")) { + props.put(str.substring(17), etr.getValue()); + } + } + } + logger.info("Connecting to database: \"{}\"", jdbcUri); + Connection conn; + try { + if(driverObj != null) { + conn = driverObj.connect(jdbcUri, props); + }else { + conn = DriverManager.getConnection(jdbcUri, props); + } + }catch(SQLException ex) { + throw new EaglerFileSystemException("Failed to connect to database: \"" + jdbcUri + "\"", ex); + } + try { + return new JDBCFilesystem(conn, jdbcUri, jdbcDriver); + } catch (SQLException ex) { + try { + conn.close(); + }catch(SQLException ex2) { + } + throw new EaglerFileSystemException("Failed to initialize database: \"" + jdbcUri + "\"", ex); + } + } + + private JDBCFilesystem(Connection conn, String jdbcUri, String jdbcDriver) throws SQLException { + this.conn = conn; + this.jdbcUri = jdbcUri; + this.jdbcDriver = jdbcDriver; + try(Statement stmt = conn.createStatement()) { + stmt.execute("CREATE TABLE IF NOT EXISTS " + + "\"eaglercraft_desktop_runtime_filesystem\" (" + + "\"FileName\" VARCHAR(1024) NOT NULL," + + "\"FileSize\" INT NOT NULL," + + "\"FileData\" BLOB NOT NULL," + + "PRIMARY KEY(\"FileName\"))"); + + int totalFiles = 0; + try(ResultSet resultSet = stmt.executeQuery("SELECT COUNT(*) AS total_files FROM eaglercraft_desktop_runtime_filesystem")) { + if(resultSet.next()) { + totalFiles = resultSet.getInt(1); + } + } + logger.info("Loaded JDBC filesystem with {} files: \"{}\"", totalFiles, jdbcUri); + if(totalFiles > 0) { + newFilesystem = false; + } + } + this.createStatement = conn.prepareStatement("INSERT INTO eaglercraft_desktop_runtime_filesystem (FileName, FileSize, FileData) VALUES(?,?,?)"); + this.updateStatement = conn.prepareStatement("UPDATE eaglercraft_desktop_runtime_filesystem SET FileSize = ?, FileData = ? WHERE FileName = ?"); + this.readStatement = conn.prepareStatement("SELECT FileData FROM eaglercraft_desktop_runtime_filesystem WHERE FileName = ? LIMIT 1"); + this.existsStatement = conn.prepareStatement("SELECT COUNT(FileName) AS has_object FROM eaglercraft_desktop_runtime_filesystem WHERE FileName = ? LIMIT 1"); + this.sizeStatement = conn.prepareStatement("SELECT FileSize FROM eaglercraft_desktop_runtime_filesystem WHERE FileName = ? LIMIT 1"); + this.deleteStatement = conn.prepareStatement("DELETE FROM eaglercraft_desktop_runtime_filesystem WHERE FileName = ?"); + this.renameStatement = conn.prepareStatement("UPDATE eaglercraft_desktop_runtime_filesystem SET FileName = ? WHERE FileName = ?"); + this.iterateNonRecursive = conn.prepareStatement("SELECT FileName FROM eaglercraft_desktop_runtime_filesystem WHERE FileName LIKE ? AND NOT FileName LIKE ?"); + this.iterateRecursive = conn.prepareStatement("SELECT FileName FROM eaglercraft_desktop_runtime_filesystem WHERE FileName LIKE ?"); + startCleanupThread(); + synchronized(jdbcFilesystems) { + jdbcFilesystems.add(this); + } + } + + public boolean isNewFilesystem() { + return newFilesystem; + } + + private static void startCleanupThread() { + if(!cleanupThreadStarted) { + cleanupThreadStarted = true; + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + synchronized(jdbcFilesystems) { + if(!jdbcFilesystems.isEmpty()) { + for(JDBCFilesystem fs : jdbcFilesystems) { + fs.shutdown0(); + } + jdbcFilesystems.clear(); + } + } + }, "JDBCFilesystemCleanup")); + } + } + + public void shutdown() { + shutdown0(); + synchronized(jdbcFilesystems) { + jdbcFilesystems.remove(this); + } + } + + private void shutdown0() { + synchronized(mutex) { + if(!hasClosed) { + hasClosed = true; + logger.info("Disconnecting from database: \"{}\"", jdbcUri); + try { + shutdown1(); + }catch(Throwable t) { + logger.error("Failed to disconnect from database: \"{}\""); + logger.error(t); + } + } + } + } + + private void shutdown1() throws SQLException { + if(!conn.isClosed()) { + quietClose(createStatement); + quietClose(updateStatement); + quietClose(readStatement); + quietClose(existsStatement); + quietClose(sizeStatement); + quietClose(deleteStatement); + quietClose(renameStatement); + quietClose(iterateNonRecursive); + quietClose(iterateRecursive); + conn.close(); + } + } + + private static void quietClose(Statement stmt) { + try { + stmt.close(); + }catch(Throwable t) { + } + } + + @Override + public boolean eaglerDelete(String pathName) { + try { + synchronized(mutex) { + if(hasClosed || conn.isClosed()) { + throw new SQLException("Filesystem database connection is closed!"); + } + deleteStatement.setString(1, pathName); + int ret = deleteStatement.executeUpdate(); + if(ret == 0) { + PlatformFilesystem.logger.warn("Tried to delete file that doesn't exist: \"{}\"", pathName); + } + return ret > 0; + } + }catch(SQLException ex) { + throw new EaglerFileSystemException("JDBC exception thrown while executing delete!", ex); + } + } + + @Override + public ByteBuffer eaglerRead(String pathName) { + try { + synchronized(mutex) { + if(hasClosed || conn.isClosed()) { + throw new SQLException("Filesystem database connection is closed!"); + } + readStatement.setString(1, pathName); + byte[] has = null; + try(ResultSet resultSet = readStatement.executeQuery()) { + if(resultSet.next()) { + has = resultSet.getBytes(1); + } + } + if(has == null) { + PlatformFilesystem.logger.warn("Tried to read file that doesn't exist: \"{}\"", pathName); + return null; + } + ByteBuffer byteBuf = PlatformRuntime.allocateByteBuffer(has.length); + byteBuf.put(has); + byteBuf.flip(); + return byteBuf; + } + }catch(SQLException ex) { + throw new EaglerFileSystemException("JDBC exception thrown while executing read!", ex); + } + } + + @Override + public void eaglerWrite(String pathName, ByteBuffer data) { + try { + synchronized(mutex) { + if(hasClosed || conn.isClosed()) { + throw new SQLException("Filesystem database connection is closed!"); + } + existsStatement.setString(1, pathName); + boolean exists; + try(ResultSet resultSet = existsStatement.executeQuery()) { + if(resultSet.next()) { + exists = resultSet.getInt(1) > 0; + }else { + exists = false; + } + } + byte[] cp = new byte[data.remaining()]; + data.get(cp); + if(exists) { + updateStatement.setInt(1, cp.length); + updateStatement.setBytes(2, cp); + updateStatement.setString(3, pathName); + if(updateStatement.executeUpdate() == 0) { + throw new EaglerFileSystemException("SQL file update query did not update any rows!"); + } + }else { + createStatement.setString(1, pathName); + createStatement.setInt(2, cp.length); + createStatement.setBytes(3, cp); + createStatement.executeUpdate(); + } + } + }catch(SQLException ex) { + throw new EaglerFileSystemException("JDBC exception thrown while executing write!", ex); + } + } + + @Override + public boolean eaglerExists(String pathName) { + try { + synchronized(mutex) { + if(hasClosed || conn.isClosed()) { + throw new SQLException("Filesystem database connection is closed!"); + } + existsStatement.setString(1, pathName); + try(ResultSet resultSet = existsStatement.executeQuery()) { + if(resultSet.next()) { + return resultSet.getInt(1) > 0; + }else { + return false; + } + } + } + }catch(SQLException ex) { + throw new EaglerFileSystemException("JDBC exception thrown while executing exists!", ex); + } + } + + @Override + public boolean eaglerMove(String pathNameOld, String pathNameNew) { + try { + synchronized(mutex) { + if(hasClosed || conn.isClosed()) { + throw new SQLException("Filesystem database connection is closed!"); + } + renameStatement.setString(1, pathNameNew); + renameStatement.setString(2, pathNameOld); + return renameStatement.executeUpdate() > 0; + } + }catch(SQLException ex) { + throw new EaglerFileSystemException("JDBC exception thrown while executing move!", ex); + } + } + + @Override + public int eaglerCopy(String pathNameOld, String pathNameNew) { + try { + synchronized(mutex) { + if(hasClosed || conn.isClosed()) { + throw new SQLException("Filesystem database connection is closed!"); + } + readStatement.setString(1, pathNameOld); + try(ResultSet resultSet = readStatement.executeQuery()) { + byte[] has = null; + if(resultSet.next()) { + has = resultSet.getBytes(1); + } + if(has == null) { + return -1; + } + existsStatement.setString(1, pathNameNew); + boolean exists; + try(ResultSet resultSet2 = existsStatement.executeQuery()) { + if(resultSet2.next()) { + exists = resultSet2.getInt(1) > 0; + }else { + exists = false; + } + } + if(exists) { + updateStatement.setInt(1, has.length); + updateStatement.setBytes(2, has); + updateStatement.setString(3, pathNameNew); + if(updateStatement.executeUpdate() == 0) { + throw new EaglerFileSystemException("SQL file update query did not update any rows!"); + } + }else { + createStatement.setString(1, pathNameNew); + createStatement.setInt(2, has.length); + createStatement.setBytes(3, has); + createStatement.executeUpdate(); + } + return has.length; + } + } + }catch(SQLException ex) { + throw new EaglerFileSystemException("JDBC exception thrown while executing copy!", ex); + } + } + + @Override + public int eaglerSize(String pathName) { + try { + synchronized(mutex) { + if(hasClosed || conn.isClosed()) { + throw new SQLException("Filesystem database connection is closed!"); + } + sizeStatement.setString(1, pathName); + try(ResultSet resultSet = sizeStatement.executeQuery()) { + if(resultSet.next()) { + return resultSet.getInt(1); + }else { + return -1; + } + } + } + }catch(SQLException ex) { + throw new EaglerFileSystemException("JDBC exception thrown while executing size!", ex); + } + } + + @Override + public void eaglerIterate(String pathName, VFSFilenameIterator itr, boolean recursive) { + try { + synchronized(mutex) { + if(hasClosed || conn.isClosed()) { + throw new SQLException("Filesystem database connection is closed!"); + } + PreparedStatement stmt; + if(recursive) { + stmt = iterateRecursive; + stmt.setString(1, pathName + (!pathName.endsWith("/") ? "/%" : "%"));; + }else { + stmt = iterateNonRecursive; + if(!pathName.endsWith("/")) { + pathName += "/"; + } + stmt.setString(1, pathName + "%"); + stmt.setString(2, pathName + "%/%"); + } + try(ResultSet resultSet = stmt.executeQuery()) { + while(resultSet.next()) { + try { + itr.next(resultSet.getString(1)); + }catch(VFSIterator2.BreakLoop exx) { + break; + } + } + } + } + }catch(SQLException ex) { + throw new EaglerFileSystemException("JDBC exception thrown while executing iterate!", ex); + } + } + +} diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystemConverter.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystemConverter.java new file mode 100644 index 0000000..62d19b2 --- /dev/null +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystemConverter.java @@ -0,0 +1,130 @@ +package net.lax1dude.eaglercraft.v1_8.internal.lwjgl; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import net.lax1dude.eaglercraft.v1_8.internal.PlatformFilesystem.IFilesystemProvider; +import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; +import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; +import net.lax1dude.eaglercraft.v1_8.internal.vfs2.EaglerFileSystemException; +import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; + +/** + * 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 JDBCFilesystemConverter { + + private static final Logger logger = LogManager.getLogger("JDBCFilesystemConverter"); + + public static void convertFilesystem(String title, File oldFS, IFilesystemProvider newFS, boolean deleteOld) { + FilesystemConvertingDialog progressDialog = new FilesystemConvertingDialog(title); + try { + progressDialog.setProgressIndeterminate(true); + progressDialog.setLocationRelativeTo(null); + progressDialog.setVisible(true); + + String slug = oldFS.getAbsolutePath(); + List filesToCopy = new ArrayList(); + logger.info("Discovering files to convert..."); + iterateFolder(slug.length(), oldFS, filesToCopy); + logger.info("Found {} files in the old directory", filesToCopy.size()); + + progressDialog.setProgressIndeterminate(false); + progressDialog.setProgressValue(0); + + int progCounter = 0; + int lastProgUpdate = 0; + byte[] copyArray = new byte[4096]; + + int l = filesToCopy.size(); + for(int i = 0; i < l; ++i) { + String str = filesToCopy.get(i); + File f = new File(oldFS, str); + try(InputStream is = new FileInputStream(f)) { + ByteBuffer copyBuffer = PlatformRuntime.allocateByteBuffer((int)f.length()); + try { + int j; + while(copyBuffer.hasRemaining() && (j = is.read(copyArray, 0, copyArray.length)) != -1) { + copyBuffer.put(copyArray, 0, j); + } + copyBuffer.flip(); + progCounter += copyBuffer.remaining(); + newFS.eaglerWrite(str, copyBuffer); + }finally { + PlatformRuntime.freeByteBuffer(copyBuffer); + } + if(progCounter - lastProgUpdate > 25000) { + lastProgUpdate = progCounter; + logger.info("Converted {}/{} files, {} bytes to JDBC format...", (i + 1), l, progCounter); + } + }catch(IOException ex) { + throw new EaglerFileSystemException("Failed to convert file: \"" + f.getAbsolutePath() + "\"", ex); + } + progressDialog.setProgressValue(i * 512 / (l - 1)); + } + + logger.info("Converted {}/{} files successfully!", l, l); + + if(deleteOld) { + logger.info("Deleting old filesystem..."); + progressDialog.setProgressIndeterminate(true); + deleteOldFolder(oldFS); + logger.info("Delete complete!"); + } + }finally { + progressDialog.setVisible(false); + progressDialog.dispose(); + } + } + + private static void iterateFolder(int slug, File file, List ret) { + File[] f = file.listFiles(); + if(f == null) { + return; + } + for(int i = 0; i < f.length; ++i) { + File ff = f[i]; + if(ff.isDirectory()) { + iterateFolder(slug, ff, ret); + }else { + String str = ff.getAbsolutePath(); + if(str.length() > slug) { + str = str.substring(slug).replace('\\', '/'); + if(str.startsWith("/")) { + str = str.substring(1); + } + ret.add(str); + } + } + } + } + + private static void deleteOldFolder(File file) { + File[] f = file.listFiles(); + for(int i = 0; i < f.length; ++i) { + if(f[i].isDirectory()) { + deleteOldFolder(f[i]); + }else { + f[i].delete(); + } + } + file.delete(); + } +} diff --git a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/LWJGLEntryPoint.java b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/LWJGLEntryPoint.java index 23af40b..849e836 100644 --- a/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/LWJGLEntryPoint.java +++ b/sources/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/LWJGLEntryPoint.java @@ -6,6 +6,7 @@ import javax.swing.UnsupportedLookAndFeelException; import net.lax1dude.eaglercraft.v1_8.EagRuntime; import net.lax1dude.eaglercraft.v1_8.EagUtils; import net.lax1dude.eaglercraft.v1_8.internal.EnumPlatformANGLE; +import net.lax1dude.eaglercraft.v1_8.internal.PlatformFilesystem; import net.lax1dude.eaglercraft.v1_8.internal.PlatformInput; import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.ShaderSource; @@ -43,15 +44,9 @@ public class LWJGLEntryPoint { boolean hideRenderDocDialog = false; for(int i = 0; i < args.length; ++i) { - if(args[i].equalsIgnoreCase("highp")) { - ShaderSource.setHighP(true); - } if(args[i].equalsIgnoreCase("hide-renderdoc")) { hideRenderDocDialog = true; } - if(args[i].equalsIgnoreCase("fullscreen")) { - PlatformInput.setStartupFullscreen(true); - } } if(!hideRenderDocDialog) { @@ -66,7 +61,7 @@ public class LWJGLEntryPoint { lr.dispose(); } - getANGLEPlatformFromArgs(args); + getPlatformOptionsFromArgs(args); RelayManager.relayManager.load(EagRuntime.getStorage("r")); @@ -81,12 +76,22 @@ public class LWJGLEntryPoint { } - private static void getANGLEPlatformFromArgs(String[] args) { + private static void getPlatformOptionsFromArgs(String[] args) { for(int i = 0; i < args.length; ++i) { - EnumPlatformANGLE angle = EnumPlatformANGLE.fromId(args[i]); - if(angle != EnumPlatformANGLE.DEFAULT) { - PlatformRuntime.requestANGLE(angle); - break; + if(args[i].equalsIgnoreCase("fullscreen")) { + PlatformInput.setStartupFullscreen(true); + }else if(args[i].equalsIgnoreCase("highp")) { + ShaderSource.setHighP(true); + }else if(args[i].startsWith("jdbc:")) { + if(i < args.length - 1) { + PlatformFilesystem.setUseJDBC(args[i]); + PlatformFilesystem.setJDBCDriverClass(args[++i]); + } + }else { + EnumPlatformANGLE angle = EnumPlatformANGLE.fromId(args[i]); + if(angle != EnumPlatformANGLE.DEFAULT) { + PlatformRuntime.requestANGLE(angle); + } } } } diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/Display.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/Display.java index 2f46e14..6f40077 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/Display.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/Display.java @@ -45,6 +45,10 @@ public class Display { return PlatformInput.isCloseRequested(); } + public static void setVSync(boolean enable) { + PlatformInput.setVSync(enable); + } + public static void update() { PlatformInput.update(); } 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 37fe5d8..a87f0c2 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java @@ -12,7 +12,7 @@ public class EaglercraftVersion { /// Customize these to fit your fork: public static final String projectForkName = "EaglerForge"; - public static final String projectForkVersion = "v1.3"; + public static final String projectForkVersion = "v1.3.1"; public static final String projectForkVendor = "radmanplays"; public static final String projectForkURL = "https://github.com/eaglerforge/EaglerForge"; @@ -22,7 +22,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 = "u27"; + public static final String projectOriginVersion = "u29"; 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 dc519b1..684275c 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 @@ -67,4 +67,6 @@ public interface IClientConfigAdapter { boolean isCheckRelaysForUpdates(); boolean isEnableSignatureBadge(); + + boolean isAllowVoiceClient(); } diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglerMeshLoader.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglerMeshLoader.java new file mode 100644 index 0000000..e4c6f11 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglerMeshLoader.java @@ -0,0 +1,172 @@ +package net.lax1dude.eaglercraft.v1_8.opengl; + +import java.io.DataInputStream; +import java.io.EOFException; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import net.lax1dude.eaglercraft.v1_8.EagRuntime; +import net.lax1dude.eaglercraft.v1_8.internal.buffer.IntBuffer; +import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; +import net.minecraft.util.ResourceLocation; + +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.*; + +/** + * 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 EaglerMeshLoader implements IResourceManagerReloadListener { + + private static final Logger logger = LogManager.getLogger("EaglerMeshLoader"); + + private static final Map meshCache = new HashMap(); + + public static HighPolyMesh getEaglerMesh(ResourceLocation meshLoc) { + if(meshLoc.cachedPointerType == ResourceLocation.CACHED_POINTER_EAGLER_MESH) { + return (HighPolyMesh)meshLoc.cachedPointer; + } + HighPolyMesh theMesh = meshCache.get(meshLoc); + if(theMesh == null) { + theMesh = new HighPolyMesh(); + reloadMesh(meshLoc, theMesh, Minecraft.getMinecraft().getResourceManager()); + } + meshLoc.cachedPointerType = ResourceLocation.CACHED_POINTER_EAGLER_MESH; + meshLoc.cachedPointer = theMesh; + return theMesh; + } + + private static void reloadMesh(ResourceLocation meshLoc, HighPolyMesh meshStruct, IResourceManager resourceManager) { + IntBuffer up1 = null; + try { + int intsOfVertex, intsOfIndex, intsTotal, stride; + try(DataInputStream dis = new DataInputStream(resourceManager.getResource(meshLoc).getInputStream())) { + byte[] header = new byte[8]; + dis.read(header); + if(!Arrays.equals(header, new byte[] { (byte) 33, (byte) 69, (byte) 65, (byte) 71, (byte) 36, + (byte) 109, (byte) 100, (byte) 108 })) { + throw new IOException("File is not an eaglercraft high-poly mesh!"); + } + + char CT = (char)dis.read(); + + if(CT == 'C') { + meshStruct.hasTexture = false; + }else if(CT == 'T') { + meshStruct.hasTexture = true; + }else { + throw new IOException("Unsupported mesh type '" + CT + "'!"); + } + + dis.skipBytes(dis.readUnsignedShort()); + + meshStruct.vertexCount = dis.readInt(); + meshStruct.indexCount = dis.readInt(); + int byteIndexCount = meshStruct.indexCount; + if(byteIndexCount % 2 != 0) { // must round up to int + byteIndexCount += 1; + } + stride = meshStruct.hasTexture ? 24 : 16; + + intsOfVertex = meshStruct.vertexCount * stride / 4; + intsOfIndex = byteIndexCount / 2; + intsTotal = intsOfIndex + intsOfVertex; + up1 = EagRuntime.allocateIntBuffer(intsTotal); + + for(int i = 0; i < intsTotal; ++i) { + int ch1 = dis.read(); + int ch2 = dis.read(); + int ch3 = dis.read(); + int ch4 = dis.read(); + if ((ch1 | ch2 | ch3 | ch4) < 0) throw new EOFException(); // rip + up1.put((ch4 << 24) + (ch3 << 16) + (ch2 << 8) + (ch1 << 0)); + } + + } + + if(meshStruct.vertexArray == null) { + meshStruct.vertexArray = _wglGenVertexArrays(); + } + if(meshStruct.vertexBuffer == null) { + meshStruct.vertexBuffer = _wglGenBuffers(); + } + if(meshStruct.indexBuffer == null) { + meshStruct.indexBuffer = _wglGenBuffers(); + } + + up1.position(0).limit(intsOfVertex); + + EaglercraftGPU.bindGLArrayBuffer(meshStruct.vertexBuffer); + _wglBufferData(GL_ARRAY_BUFFER, up1, GL_STATIC_DRAW); + + EaglercraftGPU.bindGLBufferArray(meshStruct.vertexArray); + + up1.position(intsOfVertex).limit(intsTotal); + + _wglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, meshStruct.indexBuffer); + _wglBufferData(GL_ELEMENT_ARRAY_BUFFER, up1, GL_STATIC_DRAW); + + _wglEnableVertexAttribArray(0); + _wglVertexAttribPointer(0, 3, GL_FLOAT, false, stride, 0); + + if(meshStruct.hasTexture) { + _wglEnableVertexAttribArray(1); + _wglVertexAttribPointer(1, 2, GL_FLOAT, false, stride, 16); + } + + _wglEnableVertexAttribArray(meshStruct.hasTexture ? 2 : 1); + _wglVertexAttribPointer(meshStruct.hasTexture ? 2 : 1, 4, GL_BYTE, true, stride, 12); + }catch(Throwable ex) { + if(meshStruct.vertexArray != null) { + _wglDeleteVertexArrays(meshStruct.vertexArray); + meshStruct.vertexArray = null; + } + if(meshStruct.vertexBuffer != null) { + _wglDeleteBuffers(meshStruct.vertexBuffer); + meshStruct.vertexBuffer = null; + } + if(meshStruct.indexBuffer != null) { + _wglDeleteBuffers(meshStruct.indexBuffer); + meshStruct.indexBuffer = null; + } + + meshStruct.vertexCount = 0; + meshStruct.indexCount = 0; + meshStruct.hasTexture = false; + + logger.error("Failed to load eaglercraft high-poly mesh: \"{}\"", meshLoc); + logger.error(ex); + }finally { + if(up1 != null) { + EagRuntime.freeIntBuffer(up1); + } + } + } + + @Override + public void onResourceManagerReload(IResourceManager var1) { + for(Entry meshEntry : meshCache.entrySet()) { + reloadMesh(meshEntry.getKey(), meshEntry.getValue(), var1); + } + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglercraftGPU.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglercraftGPU.java index 7922549..10b6bee 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglercraftGPU.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglercraftGPU.java @@ -23,7 +23,7 @@ import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.*; /** - * Copyright (c) 2022-2023 lax1dude, ayunami2000. 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 @@ -152,7 +152,7 @@ public class EaglercraftGPU { currentList = null; } - public static void glCallList(int displayList) { + public static final void glCallList(int displayList) { DisplayList dp = mapDisplayListsGL.get(displayList); if(dp == null) { throw new NullPointerException("Tried to call a display list that does not exist: " + displayList); @@ -488,18 +488,28 @@ public class EaglercraftGPU { return mapTexturesGL.get(tex); } + public static final void drawHighPoly(HighPolyMesh mesh) { + if(mesh.vertexCount == 0 || mesh.indexCount == 0 || mesh.vertexArray == null) { + return; + } + FixedFunctionPipeline p = FixedFunctionPipeline.setupRenderDisplayList(mesh.getAttribBits()).update(); + EaglercraftGPU.bindGLBufferArray(mesh.vertexArray); + p.drawElements(GL_TRIANGLES, mesh.indexCount, GL_UNSIGNED_SHORT, 0); + } + static boolean hasFramebufferHDR16FSupport = false; static boolean hasFramebufferHDR32FSupport = false; + static boolean hasLinearHDR32FSupport = false; - public static void createFramebufferHDR16FTexture(int target, int level, int w, int h, int format, boolean allow32bitFallback) { + public static final void createFramebufferHDR16FTexture(int target, int level, int w, int h, int format, boolean allow32bitFallback) { createFramebufferHDR16FTexture(target, level, w, h, format, allow32bitFallback, null); } - public static void createFramebufferHDR16FTexture(int target, int level, int w, int h, int format, ByteBuffer pixelData) { + public static final void createFramebufferHDR16FTexture(int target, int level, int w, int h, int format, ByteBuffer pixelData) { createFramebufferHDR16FTexture(target, level, w, h, format, false, pixelData); } - private static void createFramebufferHDR16FTexture(int target, int level, int w, int h, int format, boolean allow32bitFallback, ByteBuffer pixelData) { + private static final void createFramebufferHDR16FTexture(int target, int level, int w, int h, int format, boolean allow32bitFallback, ByteBuffer pixelData) { if(hasFramebufferHDR16FSupport) { int internalFormat; switch(format) { @@ -530,15 +540,15 @@ public class EaglercraftGPU { } } - public static void createFramebufferHDR32FTexture(int target, int level, int w, int h, int format, boolean allow16bitFallback) { + public static final void createFramebufferHDR32FTexture(int target, int level, int w, int h, int format, boolean allow16bitFallback) { createFramebufferHDR32FTexture(target, level, w, h, format, allow16bitFallback, null); } - public static void createFramebufferHDR32FTexture(int target, int level, int w, int h, int format, ByteBuffer pixelData) { + public static final void createFramebufferHDR32FTexture(int target, int level, int w, int h, int format, ByteBuffer pixelData) { createFramebufferHDR32FTexture(target, level, w, h, format, false, pixelData); } - private static void createFramebufferHDR32FTexture(int target, int level, int w, int h, int format, boolean allow16bitFallback, ByteBuffer pixelData) { + private static final void createFramebufferHDR32FTexture(int target, int level, int w, int h, int format, boolean allow16bitFallback, ByteBuffer pixelData) { if(hasFramebufferHDR32FSupport) { int internalFormat; switch(format) { @@ -555,7 +565,7 @@ public class EaglercraftGPU { default: throw new UnsupportedOperationException("Unknown format: " + format); } - _wglTexImage2D(target, level, internalFormat, w, h, 0, format, GL_FLOAT, pixelData); + _wglTexImage2Df32(target, level, internalFormat, w, h, 0, format, GL_FLOAT, pixelData); }else { if(allow16bitFallback) { if(hasFramebufferHDR16FSupport) { @@ -585,7 +595,13 @@ public class EaglercraftGPU { }else { logger.error("32-bit HDR render target support: false"); } - if(!checkHasHDRFramebufferSupport()) { + hasLinearHDR32FSupport = PlatformOpenGL.checkLinearHDR32FSupport(); + if(hasLinearHDR32FSupport) { + logger.info("32-bit HDR linear filter support: true"); + }else { + logger.error("32-bit HDR linear filter support: false"); + } + if(!checkHasHDRFramebufferSupportWithFilter()) { logger.error("No HDR render target support was detected! Shaders will be disabled."); } DrawUtils.init(); @@ -612,4 +628,12 @@ public class EaglercraftGPU { public static final boolean checkHasHDRFramebufferSupport() { return hasFramebufferHDR16FSupport || hasFramebufferHDR32FSupport; } + + public static final boolean checkHasHDRFramebufferSupportWithFilter() { + return hasFramebufferHDR16FSupport || (hasFramebufferHDR32FSupport && hasLinearHDR32FSupport); + } + + public static final boolean checkLinearHDR32FSupport() { + return hasLinearHDR32FSupport; + } } 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 21ec7b8..7436939 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 @@ -13,7 +13,7 @@ import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.*; /** - * Copyright (c) 2022-2023 lax1dude, ayunami2000. 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 @@ -985,6 +985,30 @@ public class GlStateManager extends ModData { Matrix4f.mul(modeMatrix, paramMatrix, modeMatrix); } + public static final void multMatrix(Matrix4f matrix) { + Matrix4f modeMatrix; + + switch(stateMatrixMode) { + case GL_MODELVIEW: + default: + modeMatrix = modelMatrixStack[modelMatrixStackPointer]; + modelMatrixStackAccessSerial[modelMatrixStackPointer] = ++modelMatrixAccessSerial; + break; + case GL_PROJECTION: + modeMatrix = projectionMatrixStack[projectionMatrixStackPointer]; + projectionMatrixStackAccessSerial[projectionMatrixStackPointer] = ++projectionMatrixAccessSerial; + break; + case GL_TEXTURE: + int ptr = textureMatrixStackPointer[activeTexture]; + modeMatrix = textureMatrixStack[activeTexture][ptr]; + textureMatrixStackAccessSerial[activeTexture][textureMatrixStackPointer[activeTexture]] = + ++textureMatrixAccessSerial[activeTexture]; + break; + } + + Matrix4f.mul(modeMatrix, matrix, modeMatrix); + } + public static final void color(float colorRed, float colorGreen, float colorBlue, float colorAlpha) { stateColorR = colorRed; stateColorG = colorGreen; diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/HighPolyMesh.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/HighPolyMesh.java new file mode 100644 index 0000000..5dd7c5c --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/opengl/HighPolyMesh.java @@ -0,0 +1,66 @@ +package net.lax1dude.eaglercraft.v1_8.opengl; + +import net.lax1dude.eaglercraft.v1_8.internal.IBufferArrayGL; +import net.lax1dude.eaglercraft.v1_8.internal.IBufferGL; +import net.lax1dude.eaglercraft.v1_8.opengl.FixedFunctionShader.FixedFunctionState; + +/** + * 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 HighPolyMesh { + + IBufferArrayGL vertexArray; + IBufferGL vertexBuffer; + IBufferGL indexBuffer; + + int vertexCount; + int indexCount; + + boolean hasTexture; + + public HighPolyMesh(IBufferArrayGL vertexArray, IBufferGL vertexBuffer, IBufferGL indexBuffer, int vertexCount, + int indexCount, boolean hasTexture) { + this.vertexArray = vertexArray; + this.vertexBuffer = vertexBuffer; + this.indexBuffer = indexBuffer; + this.vertexCount = vertexCount; + this.indexCount = indexCount; + this.hasTexture = hasTexture; + } + + HighPolyMesh() { + + } + + public boolean isNull() { + return vertexArray == null; + } + + public int getVertexCount() { + return vertexCount; + } + + public int getIndexCount() { + return indexCount; + } + + public boolean getHasTexture() { + return hasTexture; + } + + public int getAttribBits() { + return hasTexture ? (FixedFunctionState.STATE_HAS_ATTRIB_TEXTURE | FixedFunctionState.STATE_HAS_ATTRIB_NORMAL) : FixedFunctionState.STATE_HAS_ATTRIB_NORMAL; + } +} 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 a1c2254..f08117f 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 @@ -3984,11 +3984,11 @@ public class EaglerDeferredPipeline { } public static final boolean isSupported() { - return EaglercraftGPU.checkHasHDRFramebufferSupport(); + return EaglercraftGPU.checkHasHDRFramebufferSupportWithFilter(); } public static final String getReasonUnsupported() { - if(!EaglercraftGPU.checkHasHDRFramebufferSupport()) { + if(!EaglercraftGPU.checkHasHDRFramebufferSupportWithFilter()) { return I18n.format("shaders.gui.unsupported.reason.hdrFramebuffer"); }else { return null; diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/CapePackets.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/CapePackets.java new file mode 100644 index 0000000..581176d --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/CapePackets.java @@ -0,0 +1,83 @@ +package net.lax1dude.eaglercraft.v1_8.profile; + +import java.io.IOException; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.lax1dude.eaglercraft.v1_8.netty.Unpooled; +import net.minecraft.network.PacketBuffer; + +/** + * 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 CapePackets { + + public static final int PACKET_MY_CAPE_PRESET = 0x01; + public static final int PACKET_MY_CAPE_CUSTOM = 0x02; + public static final int PACKET_GET_OTHER_CAPE = 0x03; + public static final int PACKET_OTHER_CAPE_PRESET = 0x04; + public static final int PACKET_OTHER_CAPE_CUSTOM = 0x05; + + public static void readPluginMessage(PacketBuffer buffer, ServerCapeCache capeCache) throws IOException { + try { + int type = (int)buffer.readByte() & 0xFF; + switch(type) { + case PACKET_OTHER_CAPE_PRESET: { + EaglercraftUUID responseUUID = buffer.readUuid(); + int responsePreset = buffer.readInt(); + if(buffer.isReadable()) { + throw new IOException("PACKET_OTHER_CAPE_PRESET had " + buffer.readableBytes() + " remaining bytes!"); + } + capeCache.cacheCapePreset(responseUUID, responsePreset); + break; + } + case PACKET_OTHER_CAPE_CUSTOM: { + EaglercraftUUID responseUUID = buffer.readUuid(); + byte[] readCape = new byte[1173]; + buffer.readBytes(readCape); + if(buffer.isReadable()) { + throw new IOException("PACKET_OTHER_CAPE_CUSTOM had " + buffer.readableBytes() + " remaining bytes!"); + } + capeCache.cacheCapeCustom(responseUUID, readCape); + break; + } + default: + throw new IOException("Unknown skin packet type: " + type); + } + }catch(IOException ex) { + throw ex; + }catch(Throwable t) { + throw new IOException("Failed to parse cape packet!", t); + } + } + + public static byte[] writeMyCapePreset(int capeId) { + return new byte[] { (byte) PACKET_MY_CAPE_PRESET, (byte) (capeId >> 24), (byte) (capeId >> 16), + (byte) (capeId >> 8), (byte) (capeId & 0xFF) }; + } + + public static byte[] writeMyCapeCustom(CustomCape customCape) { + byte[] packet = new byte[1 + customCape.texture.length]; + packet[0] = (byte) PACKET_MY_CAPE_CUSTOM; + System.arraycopy(customCape.texture, 0, packet, 1, customCape.texture.length); + return packet; + } + + public static PacketBuffer writeGetOtherCape(EaglercraftUUID playerId) throws IOException { + PacketBuffer ret = new PacketBuffer(Unpooled.buffer(17, 17)); + ret.writeByte(PACKET_GET_OTHER_CAPE); + ret.writeUuid(playerId); + return ret; + } +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/CustomCape.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/CustomCape.java new file mode 100644 index 0000000..12fac3d --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/CustomCape.java @@ -0,0 +1,58 @@ +package net.lax1dude.eaglercraft.v1_8.profile; + +import net.minecraft.client.Minecraft; +import net.minecraft.util.ResourceLocation; + +/** + * 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 CustomCape { + + public final String name; + public final byte[] texture; + + private EaglerSkinTexture textureInstance; + private ResourceLocation resourceLocation; + + private static int texId = 0; + + public CustomCape(String name, byte[] texture) { + this.name = name; + this.texture = texture; + byte[] texture2 = new byte[4096]; + SkinConverter.convertCape23x17RGBto32x32RGBA(texture, texture2); + this.textureInstance = new EaglerSkinTexture(texture2, 32, 32); + this.resourceLocation = null; + } + + public void load() { + if(resourceLocation == null) { + resourceLocation = new ResourceLocation("eagler:capes/custom/tex_" + texId++); + Minecraft.getMinecraft().getTextureManager().loadTexture(resourceLocation, textureInstance); + } + } + + public ResourceLocation getResource() { + return resourceLocation; + } + + public void delete() { + if(resourceLocation != null) { + Minecraft.getMinecraft().getTextureManager().deleteTexture(resourceLocation); + resourceLocation = null; + } + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultCapes.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultCapes.java new file mode 100644 index 0000000..562d006 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultCapes.java @@ -0,0 +1,75 @@ +package net.lax1dude.eaglercraft.v1_8.profile; + +import net.minecraft.util.ResourceLocation; + +/** + * 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 enum DefaultCapes { + + NO_CAPE(0, "No Cape", null), + MINECON_2011(1, "Minecon 2011", new ResourceLocation("eagler:capes/01.minecon_2011.png")), + MINECON_2012(2, "Minecon 2012", new ResourceLocation("eagler:capes/02.minecon_2012.png")), + MINECON_2013(3, "Minecon 2013", new ResourceLocation("eagler:capes/03.minecon_2013.png")), + MINECON_2015(4, "Minecon 2015", new ResourceLocation("eagler:capes/04.minecon_2015.png")), + MINECON_2016(5, "Minecon 2016", new ResourceLocation("eagler:capes/05.minecon_2016.png")), + MICROSOFT_ACCOUNT(6, "Microsoft Account", new ResourceLocation("eagler:capes/06.microsoft_account.png")), + MAPMAKER(7, "Realms Mapmaker", new ResourceLocation("eagler:capes/07.mapmaker.png")), + MOJANG_OLD(8, "Mojang Old", new ResourceLocation("eagler:capes/08.mojang_old.png")), + MOJANG_NEW(9, "Mojang New", new ResourceLocation("eagler:capes/09.mojang_new.png")), + JIRA_MOD(10, "Jira Moderator", new ResourceLocation("eagler:capes/10.jira_mod.png")), + MOJANG_VERY_OLD(11, "Mojang Very Old", new ResourceLocation("eagler:capes/11.mojang_very_old.png")), + SCROLLS(12, "Scrolls", new ResourceLocation("eagler:capes/12.scrolls.png")), + COBALT(13, "Cobalt", new ResourceLocation("eagler:capes/13.cobalt.png")), + TRANSLATOR(14, "Lang Translator", new ResourceLocation("eagler:capes/14.translator.png")), + MILLIONTH_ACCOUNT(15, "Millionth Player", new ResourceLocation("eagler:capes/15.millionth_account.png")), + PRISMARINE(16, "Prismarine", new ResourceLocation("eagler:capes/16.prismarine.png")), + SNOWMAN(17, "Snowman", new ResourceLocation("eagler:capes/17.snowman.png")), + SPADE(18, "Spade", new ResourceLocation("eagler:capes/18.spade.png")), + BIRTHDAY(19, "Birthday", new ResourceLocation("eagler:capes/19.birthday.png")), + DB(20, "dB", new ResourceLocation("eagler:capes/20.db.png")); + + public static final DefaultCapes[] defaultCapesMap = new DefaultCapes[21]; + + public final int id; + public final String name; + public final ResourceLocation location; + + private DefaultCapes(int id, String name, ResourceLocation location) { + this.id = id; + this.name = name; + this.location = location; + } + + public static DefaultCapes getCapeFromId(int id) { + DefaultCapes e = null; + if(id >= 0 && id < defaultCapesMap.length) { + e = defaultCapesMap[id]; + } + if(e != null) { + return e; + }else { + return NO_CAPE; + } + } + + static { + DefaultCapes[] capes = values(); + for(int i = 0; i < capes.length; ++i) { + defaultCapesMap[capes[i].id] = capes[i]; + } + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultSkins.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultSkins.java index 5c67d07..8f88b24 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultSkins.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultSkins.java @@ -42,9 +42,14 @@ public enum DefaultSkins { CREEPER(20, "Creeper", new ResourceLocation("eagler:skins/21.creeper.png"), SkinModel.STEVE), ZOMBIE(21, "Zombie", new ResourceLocation("eagler:skins/22.zombie.png"), SkinModel.ZOMBIE), PIG(22, "Pig", new ResourceLocation("eagler:skins/23.pig.png"), SkinModel.STEVE), - MOOSHROOM(23, "Mooshroom", new ResourceLocation("eagler:skins/24.mooshroom.png"), SkinModel.STEVE); + MOOSHROOM(23, "Mooshroom", new ResourceLocation("eagler:skins/24.mooshroom.png"), SkinModel.STEVE), + LONG_ARMS(24, "Long Arms", new ResourceLocation("eagler:mesh/longarms.fallback.png"), SkinModel.LONG_ARMS), + WEIRD_CLIMBER_DUDE(25, "Weird Climber Dude", new ResourceLocation("eagler:mesh/weirdclimber.fallback.png"), SkinModel.WEIRD_CLIMBER_DUDE), + LAXATIVE_DUDE(26, "Laxative Dude", new ResourceLocation("eagler:mesh/laxativedude.fallback.png"), SkinModel.LAXATIVE_DUDE), + BABY_CHARLES(27, "Baby Charles", new ResourceLocation("eagler:mesh/charles.fallback.png"), SkinModel.BABY_CHARLES), + BABY_WINSTON(28, "Baby Winston", new ResourceLocation("eagler:mesh/winston.fallback.png"), SkinModel.BABY_WINSTON); - public static final DefaultSkins[] defaultSkinsMap = new DefaultSkins[24]; + public static final DefaultSkins[] defaultSkinsMap = new DefaultSkins[29]; public final int id; public final String name; diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/EaglerProfile.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/EaglerProfile.java index 2a6e212..13bd51d 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/EaglerProfile.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/EaglerProfile.java @@ -16,7 +16,7 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.util.ResourceLocation; /** - * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. + * Copyright (c) 2022-2024 lax1dude, ayunami2000. 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 @@ -37,7 +37,11 @@ public class EaglerProfile { public static int presetSkinId; public static int customSkinId; + public static int presetCapeId; + public static int customCapeId; + public static final List customSkins = new ArrayList(); + public static final List customCapes = new ArrayList(); public static final EaglercraftRandom rand; @@ -78,6 +82,25 @@ public class EaglerProfile { } } } + + public static ResourceLocation getActiveCapeResourceLocation() { + if(presetCapeId == -1) { + if(customCapeId >= 0 && customCapeId < customCapes.size()) { + return customCapes.get(customCapeId).getResource(); + }else { + customCapeId = -1; + presetCapeId = 0; + return DefaultCapes.defaultCapesMap[0].location; + } + }else { + if(presetCapeId >= 0 && presetCapeId < DefaultCapes.defaultCapesMap.length) { + return DefaultCapes.defaultCapesMap[presetCapeId].location; + }else { + presetCapeId = 0; + return DefaultCapes.defaultCapesMap[0].location; + } + } + } public static EaglercraftUUID getPlayerUUID() { return Minecraft.getMinecraft().getSession().getProfile().getId(); @@ -114,6 +137,25 @@ public class EaglerProfile { } } + public static byte[] getCapePacket() { + if(presetCapeId == -1) { + if(customCapeId >= 0 && customCapeId < customCapes.size()) { + return CapePackets.writeMyCapeCustom(customCapes.get(customCapeId)); + }else { + customCapeId = -1; + presetCapeId = 0; + return CapePackets.writeMyCapePreset(0); + } + }else { + if(presetCapeId >= 0 && presetCapeId < DefaultCapes.defaultCapesMap.length) { + return CapePackets.writeMyCapePreset(presetCapeId); + }else { + presetCapeId = 0; + return CapePackets.writeMyCapePreset(0); + } + } + } + private static boolean doesSkinExist(String name) { for(int i = 0, l = customSkins.size(); i < l; ++i) { if(customSkins.get(i).name.equalsIgnoreCase(name)) { @@ -123,6 +165,15 @@ public class EaglerProfile { return false; } + private static boolean doesCapeExist(String name) { + for(int i = 0, l = customCapes.size(); i < l; ++i) { + if(customCapes.get(i).name.equalsIgnoreCase(name)) { + return true; + } + } + return false; + } + public static int addCustomSkin(String fileName, byte[] rawSkin) { if(doesSkinExist(fileName)) { String newName; @@ -139,6 +190,22 @@ public class EaglerProfile { return r; } + public static int addCustomCape(String fileName, byte[] rawCape23x17RGB) { + if(doesCapeExist(fileName)) { + String newName; + int i = 2; + while(doesCapeExist(newName = fileName + " (" + i + ")")) { + ++i; + } + fileName = newName; + } + CustomCape newCape = new CustomCape(fileName, rawCape23x17RGB); + newCape.load(); + int r = customCapes.size(); + customCapes.add(newCape); + return r; + } + public static void clearCustomSkins() { for(int i = 0, l = customSkins.size(); i < l; ++i) { customSkins.get(i).delete(); @@ -146,6 +213,13 @@ public class EaglerProfile { customSkins.clear(); } + public static void clearCustomCapes() { + for(int i = 0, l = customCapes.size(); i < l; ++i) { + customCapes.get(i).delete(); + } + customCapes.clear(); + } + public static void read() { read(EagRuntime.getStorage("p")); } @@ -169,6 +243,9 @@ public class EaglerProfile { presetSkinId = profile.getInteger("presetSkin"); customSkinId = profile.getInteger("customSkin"); + if(profile.hasKey("presetCape", 99)) presetCapeId = profile.getInteger("presetCape"); + if(profile.hasKey("customCape", 99)) customCapeId = profile.getInteger("customCape"); + String loadUsername = profile.getString("username").trim(); if(!loadUsername.isEmpty()) { @@ -193,7 +270,21 @@ public class EaglerProfile { newSkin.load(); customSkins.add(newSkin); } - + + if(profile.hasKey("capes", 9)) { + clearCustomCapes(); + NBTTagList capesList = profile.getTagList("capes", 10); + for(int i = 0, l = capesList.tagCount(); i < l; ++i) { + NBTTagCompound cape = capesList.getCompoundTagAt(i); + String capeName = cape.getString("name"); + byte[] capeData = cape.getByteArray("data"); + if(capeData.length != 1173) continue; + CustomCape newCape = new CustomCape(capeName, capeData); + newCape.load(); + customCapes.add(newCape); + } + } + if(presetSkinId == -1) { if(customSkinId < 0 || customSkinId >= customSkins.size()) { presetSkinId = 0; @@ -206,12 +297,26 @@ public class EaglerProfile { } } + if(presetCapeId == -1) { + if(customCapeId < 0 || customCapeId >= customCapes.size()) { + presetCapeId = 0; + customCapeId = -1; + } + }else { + customCapeId = -1; + if(presetCapeId < 0 || presetCapeId >= DefaultCapes.defaultCapesMap.length) { + presetCapeId = 0; + } + } + } public static byte[] write() { NBTTagCompound profile = new NBTTagCompound(); profile.setInteger("presetSkin", presetSkinId); profile.setInteger("customSkin", customSkinId); + profile.setInteger("presetCape", presetCapeId); + profile.setInteger("customCape", customCapeId); profile.setString("username", username); NBTTagList skinsList = new NBTTagList(); for(int i = 0, l = customSkins.size(); i < l; ++i) { @@ -223,6 +328,15 @@ public class EaglerProfile { skinsList.appendTag(skin); } profile.setTag("skins", skinsList); + NBTTagList capesList = new NBTTagList(); + for(int i = 0, l = customCapes.size(); i < l; ++i) { + CustomCape cp = customCapes.get(i); + NBTTagCompound cape = new NBTTagCompound(); + cape.setString("name", cp.name); + cape.setByteArray("data", cp.texture); + capesList.appendTag(cape); + } + profile.setTag("capes", capesList); EaglerOutputStream bao = new EaglerOutputStream(); try { CompressedStreamTools.writeCompressed(profile, bao); @@ -253,9 +367,14 @@ public class EaglerProfile { setName(username); - presetSkinId = rand.nextInt(DefaultSkins.defaultSkinsMap.length); + do { + presetSkinId = rand.nextInt(DefaultSkins.defaultSkinsMap.length); + }while(DefaultSkins.defaultSkinsMap[presetSkinId].model.highPoly != null); customSkinId = -1; + presetCapeId = 0; + customCapeId = -1; + } } diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditCape.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditCape.java new file mode 100644 index 0000000..6e50f1a --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditCape.java @@ -0,0 +1,359 @@ +package net.lax1dude.eaglercraft.v1_8.profile; + +import net.lax1dude.eaglercraft.v1_8.EagRuntime; +import net.lax1dude.eaglercraft.v1_8.Keyboard; +import net.lax1dude.eaglercraft.v1_8.Mouse; +import net.lax1dude.eaglercraft.v1_8.internal.EnumCursorType; +import net.lax1dude.eaglercraft.v1_8.internal.FileChooserResult; +import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; + +import java.io.IOException; + +/** + * 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. + * + */ +public class GuiScreenEditCape extends GuiScreen { + + private final GuiScreenEditProfile parent; + + private boolean dropDownOpen = false; + private String[] dropDownOptions; + private int slotsVisible = 0; + protected int selectedSlot = 0; + private int scrollPos = -1; + private int skinsHeight = 0; + private boolean dragging = false; + private int mousex = 0; + private int mousey = 0; + + private static final ResourceLocation eaglerGui = new ResourceLocation("eagler:gui/eagler_gui.png"); + + protected String screenTitle = "Edit Cape"; + + public GuiScreenEditCape(GuiScreenEditProfile parent) { + this.parent = parent; + updateOptions(); + } + + public void initGui() { + Keyboard.enableRepeatEvents(true); + screenTitle = I18n.format("editCape.title"); + selectedSlot = EaglerProfile.presetCapeId == -1 ? EaglerProfile.customCapeId : (EaglerProfile.presetCapeId + EaglerProfile.customCapes.size()); + buttonList.add(new GuiButton(0, width / 2 - 100, height / 6 + 168, I18n.format("gui.done"))); + buttonList.add(new GuiButton(1, width / 2 - 21, height / 6 + 80, 71, 20, I18n.format("editCape.addCape"))); + buttonList.add(new GuiButton(2, width / 2 - 21 + 71, height / 6 + 80, 72, 20, I18n.format("editCape.clearCape"))); + } + + private void updateOptions() { + int numCustom = EaglerProfile.customCapes.size(); + String[] n = new String[numCustom + DefaultCapes.defaultCapesMap.length]; + for(int i = 0; i < numCustom; ++i) { + n[i] = EaglerProfile.customCapes.get(i).name; + } + int numDefault = DefaultCapes.defaultCapesMap.length; + for(int j = 0; j < numDefault; ++j) { + n[numCustom + j] = DefaultCapes.defaultCapesMap[j].name; + } + dropDownOptions = n; + } + + public void drawScreen(int mx, int my, float partialTicks) { + drawDefaultBackground(); + drawCenteredString(fontRendererObj, screenTitle, width / 2, 15, 16777215); + drawString(fontRendererObj, I18n.format("editCape.playerCape"), width / 2 - 20, height / 6 + 36, 10526880); + + mousex = mx; + mousey = my; + + int skinX = width / 2 - 120; + int skinY = height / 6 + 8; + int skinWidth = 80; + int skinHeight = 130; + + drawRect(skinX, skinY, skinX + skinWidth, skinY + skinHeight, 0xFFA0A0A0); + drawRect(skinX + 1, skinY + 1, skinX + skinWidth - 1, skinY + skinHeight - 1, 0xFF000015); + + int skid = selectedSlot - EaglerProfile.customCapes.size(); + if(skid < 0) { + skid = 0; + } + + if(dropDownOpen) { + super.drawScreen(0, 0, partialTicks); + }else { + super.drawScreen(mx, my, partialTicks); + } + + int numberOfCustomSkins = EaglerProfile.customSkins.size(); + int numberOfCustomCapes = EaglerProfile.customCapes.size(); + ResourceLocation skinTexture; + SkinModel model; + if(parent.selectedSlot < numberOfCustomSkins) { + CustomSkin customSkin = EaglerProfile.customSkins.get(parent.selectedSlot); + skinTexture = customSkin.getResource(); + model = customSkin.model; + }else { + DefaultSkins defaultSkin = DefaultSkins.getSkinFromId(parent.selectedSlot - numberOfCustomSkins); + skinTexture = defaultSkin.location; + model = defaultSkin.model; + } + + if(model.highPoly != null) { + drawCenteredString(fontRendererObj, I18n.format(this.mc.gameSettings.enableFNAWSkins ? "editProfile.disableFNAW" : "editProfile.enableFNAW"), width / 2, height / 6 + 150, 10526880); + } + + skinX = width / 2 - 20; + skinY = height / 6 + 52; + skinWidth = 140; + skinHeight = 22; + + drawRect(skinX, skinY, skinX + skinWidth, skinY + skinHeight, -6250336); + drawRect(skinX + 1, skinY + 1, skinX + skinWidth - 21, skinY + skinHeight - 1, -16777216); + drawRect(skinX + skinWidth - 20, skinY + 1, skinX + skinWidth - 1, skinY + skinHeight - 1, -16777216); + + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + + mc.getTextureManager().bindTexture(eaglerGui); + drawTexturedModalRect(skinX + skinWidth - 18, skinY + 3, 0, 0, 16, 16); + + drawString(fontRendererObj, dropDownOptions[selectedSlot], skinX + 5, skinY + 7, 14737632); + + skinX = width / 2 - 20; + skinY = height / 6 + 73; + skinWidth = 140; + skinHeight = (height - skinY - 10); + slotsVisible = (skinHeight / 10); + if(slotsVisible > dropDownOptions.length) slotsVisible = dropDownOptions.length; + skinHeight = slotsVisible * 10 + 7; + skinsHeight = skinHeight; + if(scrollPos == -1) { + scrollPos = selectedSlot - 2; + } + if(scrollPos > (dropDownOptions.length - slotsVisible)) { + scrollPos = (dropDownOptions.length - slotsVisible); + } + if(scrollPos < 0) { + scrollPos = 0; + } + if(dropDownOpen) { + drawRect(skinX, skinY, skinX + skinWidth, skinY + skinHeight, -6250336); + drawRect(skinX + 1, skinY + 1, skinX + skinWidth - 1, skinY + skinHeight - 1, -16777216); + for(int i = 0; i < slotsVisible; i++) { + if(i + scrollPos < dropDownOptions.length) { + if(selectedSlot == i + scrollPos) { + drawRect(skinX + 1, skinY + i*10 + 4, skinX + skinWidth - 1, skinY + i*10 + 14, 0x77ffffff); + }else if(mx >= skinX && mx < (skinX + skinWidth - 10) && my >= (skinY + i*10 + 5) && my < (skinY + i*10 + 15)) { + drawRect(skinX + 1, skinY + i*10 + 4, skinX + skinWidth - 1, skinY + i*10 + 14, 0x55ffffff); + } + drawString(fontRendererObj, dropDownOptions[i + scrollPos], skinX + 5, skinY + 5 + i*10, 14737632); + } + } + int scrollerSize = skinHeight * slotsVisible / dropDownOptions.length; + int scrollerPos = skinHeight * scrollPos / dropDownOptions.length; + drawRect(skinX + skinWidth - 4, skinY + scrollerPos + 1, skinX + skinWidth - 1, skinY + scrollerPos + scrollerSize, 0xff888888); + } + + if(!EagRuntime.getConfiguration().isDemo()) { + GlStateManager.pushMatrix(); + GlStateManager.scale(0.75f, 0.75f, 0.75f); + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + String text = I18n.format("editProfile.importExport"); + + int w = mc.fontRendererObj.getStringWidth(text); + boolean hover = mx > 1 && my > 1 && mx < (w * 3 / 4) + 7 && my < 12; + if(hover) { + Mouse.showCursor(EnumCursorType.HAND); + } + + drawString(mc.fontRendererObj, EnumChatFormatting.UNDERLINE + text, 5, 5, hover ? 0xFFEEEE22 : 0xFFCCCCCC); + + GlStateManager.popMatrix(); + } + + int xx = width / 2 - 80; + int yy = height / 6 + 130; + + skinX = this.width / 2 - 120; + skinY = this.height / 6 + 8; + skinWidth = 80; + skinHeight = 130; + + ResourceLocation capeTexture; + if(selectedSlot < numberOfCustomCapes) { + capeTexture = EaglerProfile.customCapes.get(selectedSlot).getResource(); + }else { + capeTexture = DefaultCapes.getCapeFromId(selectedSlot - numberOfCustomCapes).location; + } + + SkinPreviewRenderer.renderPreview(xx, yy, mx, my, true, model, skinTexture, capeTexture); + } + + public void handleMouseInput() throws IOException { + super.handleMouseInput(); + if(dropDownOpen) { + int var1 = Mouse.getEventDWheel(); + if(var1 < 0) { + scrollPos += 3; + } + if(var1 > 0) { + scrollPos -= 3; + if(scrollPos < 0) { + scrollPos = 0; + } + } + } + } + + protected void actionPerformed(GuiButton par1GuiButton) { + if(!dropDownOpen) { + if(par1GuiButton.id == 0) { + safeProfile(); + this.mc.displayGuiScreen((GuiScreen) parent); + }else if(par1GuiButton.id == 1) { + EagRuntime.displayFileChooser("image/png", "png"); + }else if(par1GuiButton.id == 2) { + EaglerProfile.clearCustomCapes(); + safeProfile(); + updateOptions(); + selectedSlot = 0; + } + } + } + + public void updateScreen() { + if(EagRuntime.fileChooserHasResult()) { + FileChooserResult result = EagRuntime.getFileChooserResult(); + if(result != null) { + ImageData loadedCape = ImageData.loadImageFile(result.fileData); + if(loadedCape != null) { + if((loadedCape.width == 32 || loadedCape.width == 64) && loadedCape.height == 32) { + byte[] resized = new byte[1173]; + SkinConverter.convertCape32x32RGBAto23x17RGB(loadedCape, resized); + int k; + if((k = EaglerProfile.addCustomCape(result.fileName, resized)) != -1) { + selectedSlot = k; + updateOptions(); + safeProfile(); + } + }else { + EagRuntime.showPopup("The selected image '" + result.fileName + "' is not the right size!\nEaglercraft only supports 32x32 or 64x32 capes"); + } + }else { + EagRuntime.showPopup("The selected file '" + result.fileName + "' is not a PNG file!"); + } + } + } + if(dropDownOpen) { + if(Mouse.isButtonDown(0)) { + int skinX = width / 2 - 20; + int skinY = height / 6 + 73; + int skinWidth = 140; + if(mousex >= (skinX + skinWidth - 10) && mousex < (skinX + skinWidth) && mousey >= skinY && mousey < (skinY + skinsHeight)) { + dragging = true; + } + if(dragging) { + int scrollerSize = skinsHeight * slotsVisible / dropDownOptions.length; + scrollPos = (mousey - skinY - (scrollerSize / 2)) * dropDownOptions.length / skinsHeight; + } + }else { + dragging = false; + } + }else { + dragging = false; + } + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + protected void keyTyped(char c, int k) { + if(k == 200 && selectedSlot > 0) { + --selectedSlot; + scrollPos = selectedSlot - 2; + } + if(k == 208 && selectedSlot < (dropDownOptions.length - 1)) { + ++selectedSlot; + scrollPos = selectedSlot - 2; + } + } + + protected void mouseClicked(int mx, int my, int button) { + if (button == 0) { + if(!EagRuntime.getConfiguration().isDemo()) { + int w = mc.fontRendererObj.getStringWidth(I18n.format("editProfile.importExport")); + if(mx > 1 && my > 1 && mx < (w * 3 / 4) + 7 && my < 12) { + safeProfile(); + mc.displayGuiScreen(new GuiScreenImportExportProfile(parent)); + mc.getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); + return; + } + } + + int skinX = width / 2 + 140 - 40; + int skinY = height / 6 + 52; + + if(mx >= skinX && mx < (skinX + 20) && my >= skinY && my < (skinY + 22)) { + dropDownOpen = !dropDownOpen; + return; + } + + skinX = width / 2 - 20; + skinY = height / 6 + 52; + int skinWidth = 140; + int skinHeight = skinsHeight; + + if(!(mx >= skinX && mx < (skinX + skinWidth) && my >= skinY && my < (skinY + skinHeight + 22))) { + dragging = false; + if(dropDownOpen) { + dropDownOpen = false; + return; + } + }else if(dropDownOpen && !dragging) { + skinY += 21; + for(int i = 0; i < slotsVisible; i++) { + if(i + scrollPos < dropDownOptions.length) { + if(mx >= skinX && mx < (skinX + skinWidth - 10) && my >= (skinY + i * 10 + 5) && my < (skinY + i * 10 + 15) && selectedSlot != i + scrollPos) { + selectedSlot = i + scrollPos; + dropDownOpen = false; + dragging = false; + return; + } + } + } + } + } + super.mouseClicked(mx, my, button); + } + + protected void safeProfile() { + int customLen = EaglerProfile.customCapes.size(); + if(selectedSlot < customLen) { + EaglerProfile.presetCapeId = -1; + EaglerProfile.customCapeId = selectedSlot; + }else { + EaglerProfile.presetCapeId = selectedSlot - customLen; + EaglerProfile.customCapeId = -1; + } + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditProfile.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditProfile.java index ac9f393..fe319bc 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditProfile.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditProfile.java @@ -20,7 +20,7 @@ import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; import java.io.IOException; /** - * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. + * Copyright (c) 2022-2024 lax1dude, ayunami2000. 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 @@ -42,7 +42,7 @@ public class GuiScreenEditProfile extends GuiScreen { private boolean dropDownOpen = false; private String[] dropDownOptions; private int slotsVisible = 0; - private int selectedSlot = 0; + protected int selectedSlot = 0; private int scrollPos = -1; private int skinsHeight = 0; private boolean dragging = false; @@ -102,11 +102,25 @@ public class GuiScreenEditProfile extends GuiScreen { drawRect(skinX, skinY, skinX + skinWidth, skinY + skinHeight, 0xFFA0A0A0); drawRect(skinX + 1, skinY + 1, skinX + skinWidth - 1, skinY + skinHeight - 1, 0xFF000015); - int skid = selectedSlot - EaglerProfile.customSkins.size(); - if(skid < 0) { - skid = 0; + GlStateManager.pushMatrix(); + GlStateManager.translate(skinX + 2, skinY - 9, 0.0f); + GlStateManager.scale(0.75f, 0.75f, 0.75f); + + int numberOfCustomSkins = EaglerProfile.customSkins.size(); + int skid = selectedSlot - numberOfCustomSkins; + SkinModel selectedSkinModel = skid < 0 ? EaglerProfile.customSkins.get(selectedSlot).model : DefaultSkins.getSkinFromId(skid).model; + if(selectedSkinModel == SkinModel.STEVE || selectedSkinModel == SkinModel.ALEX || (selectedSkinModel.highPoly != null && !this.mc.gameSettings.enableFNAWSkins)) { + String capesText = I18n.format("editProfile.capes"); + int color = 10526880; + if(mx > skinX - 10 && my > skinY - 16 && mx < skinX + (fontRendererObj.getStringWidth(capesText) * 0.75f) + 10 && my < skinY + 7) { + color = 0xFFCCCC44; + Mouse.showCursor(EnumCursorType.HAND); + } + this.drawString(this.fontRendererObj, EnumChatFormatting.UNDERLINE + capesText, 0, 0, color); } + GlStateManager.popMatrix(); + usernameField.drawTextBox(); if(dropDownOpen || newSkinWaitSteveOrAlex) { super.drawScreen(0, 0, partialTicks); @@ -114,6 +128,10 @@ public class GuiScreenEditProfile extends GuiScreen { super.drawScreen(mx, my, partialTicks); } + if(selectedSkinModel.highPoly != null) { + drawCenteredString(fontRendererObj, I18n.format(this.mc.gameSettings.enableFNAWSkins ? "editProfile.disableFNAW" : "editProfile.enableFNAW"), width / 2, height / 6 + 150, 10526880); + } + skinX = width / 2 - 20; skinY = height / 6 + 82; skinWidth = 140; @@ -184,7 +202,6 @@ public class GuiScreenEditProfile extends GuiScreen { int xx = width / 2 - 80; int yy = height / 6 + 130; - int numberOfCustomSkins = EaglerProfile.customSkins.size(); if(newSkinWaitSteveOrAlex && selectedSlot < numberOfCustomSkins) { skinWidth = 70; @@ -217,8 +234,8 @@ public class GuiScreenEditProfile extends GuiScreen { drawCenteredString(fontRendererObj, "Steve", skinX + skinWidth / 2, skinY + skinHeight + 6, cc); } - mc.getTextureManager().bindTexture(newSkin.getResource()); - SkinPreviewRenderer.renderBiped(xx, yy, mx, my, SkinModel.STEVE); + SkinPreviewRenderer.renderPreview(xx, yy, mx, my, false, SkinModel.STEVE, newSkin.getResource(), + EaglerProfile.getActiveCapeResourceLocation()); skinX = width / 2 + 20; skinY = height / 4; @@ -242,8 +259,8 @@ public class GuiScreenEditProfile extends GuiScreen { drawCenteredString(fontRendererObj, "Alex", skinX + skinWidth / 2, skinY + skinHeight + 8, cc); } - mc.getTextureManager().bindTexture(newSkin.getResource()); - SkinPreviewRenderer.renderBiped(xx, yy, mx, my, SkinModel.ALEX); + SkinPreviewRenderer.renderPreview(xx, yy, mx, my, false, SkinModel.ALEX, newSkin.getResource(), + EaglerProfile.getActiveCapeResourceLocation()); }else { skinX = this.width / 2 - 120; skinY = this.height / 6 + 8; @@ -251,20 +268,17 @@ public class GuiScreenEditProfile extends GuiScreen { skinHeight = 130; ResourceLocation texture; - SkinModel model; - if(selectedSlot < numberOfCustomSkins) { - CustomSkin customSkin = EaglerProfile.customSkins.get(selectedSlot); - texture = customSkin.getResource(); - model = customSkin.model; + if(skid < 0) { + texture = EaglerProfile.customSkins.get(selectedSlot).getResource(); }else { - DefaultSkins defaultSkin = DefaultSkins.defaultSkinsMap[selectedSlot - numberOfCustomSkins]; - texture = defaultSkin.location; - model = defaultSkin.model; + texture = DefaultSkins.getSkinFromId(skid).location; } - mc.getTextureManager().bindTexture(texture); - SkinPreviewRenderer.renderBiped(xx, yy, newSkinWaitSteveOrAlex ? width / 2 : mx, newSkinWaitSteveOrAlex ? height / 2 : my, model); + SkinPreviewRenderer.renderPreview(xx, yy, newSkinWaitSteveOrAlex ? width / 2 : mx, + newSkinWaitSteveOrAlex ? height / 2 : my, false, selectedSkinModel, texture, + EaglerProfile.getActiveCapeResourceLocation()); } + } public void handleMouseInput() throws IOException { @@ -287,12 +301,14 @@ public class GuiScreenEditProfile extends GuiScreen { if(!dropDownOpen) { if(par1GuiButton.id == 0) { safeProfile(); + EaglerProfile.save(); this.mc.displayGuiScreen((GuiScreen) parent); }else if(par1GuiButton.id == 1) { EagRuntime.displayFileChooser("image/png", "png"); }else if(par1GuiButton.id == 2) { EaglerProfile.clearCustomSkins(); safeProfile(); + EaglerProfile.save(); updateOptions(); selectedSlot = 0; } @@ -335,6 +351,7 @@ public class GuiScreenEditProfile extends GuiScreen { newSkinWaitSteveOrAlex = true; updateOptions(); safeProfile(); + EaglerProfile.save(); } }else { EagRuntime.showPopup("The selected image '" + result.fileName + "' is not the right size!\nEaglercraft only supports 64x32 or 64x64 skins"); @@ -387,21 +404,37 @@ public class GuiScreenEditProfile extends GuiScreen { } protected void mouseClicked(int mx, int my, int button) { - super.mouseClicked(mx, my, button); usernameField.mouseClicked(mx, my, button); if (button == 0) { if(!EagRuntime.getConfiguration().isDemo()) { int w = mc.fontRendererObj.getStringWidth(I18n.format("editProfile.importExport")); if(mx > 1 && my > 1 && mx < (w * 3 / 4) + 7 && my < 12) { + safeProfile(); + EaglerProfile.save(); mc.displayGuiScreen(new GuiScreenImportExportProfile(this)); mc.getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); return; } } + int skinX, skinY; + int skid = selectedSlot - EaglerProfile.customSkins.size(); + SkinModel selectedSkinModel = skid < 0 ? EaglerProfile.customSkins.get(selectedSlot).model : DefaultSkins.getSkinFromId(skid).model; + if(selectedSkinModel == SkinModel.STEVE || selectedSkinModel == SkinModel.ALEX || (selectedSkinModel.highPoly != null && !this.mc.gameSettings.enableFNAWSkins)) { + skinX = this.width / 2 - 120; + skinY = this.height / 6 + 8; + String capesText = I18n.format("editProfile.capes"); + if(mx > skinX - 10 && my > skinY - 16 && mx < skinX + (fontRendererObj.getStringWidth(capesText) * 0.75f) + 10 && my < skinY + 7) { + safeProfile(); + this.mc.displayGuiScreen(new GuiScreenEditCape(this)); + mc.getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); + return; + } + } + if(newSkinWaitSteveOrAlex) { - int skinX = width / 2 - 90; - int skinY = height / 4; + skinX = width / 2 - 90; + skinY = height / 4; int skinWidth = 70; int skinHeight = 120; if(mx >= skinX && my >= skinY && mx < skinX + skinWidth && my < skinY + skinHeight) { @@ -423,8 +456,8 @@ public class GuiScreenEditProfile extends GuiScreen { } return; }else if(selectedSlot < EaglerProfile.customSkins.size()) { - int skinX = width / 2 - 120; - int skinY = height / 6 + 18; + skinX = width / 2 - 120; + skinY = height / 6 + 18; int skinWidth = 80; int skinHeight = 120; if(mx >= skinX && my >= skinY && mx < skinX + skinWidth && my < skinY + skinHeight) { @@ -434,8 +467,8 @@ public class GuiScreenEditProfile extends GuiScreen { } } } - int skinX = width / 2 + 140 - 40; - int skinY = height / 6 + 82; + skinX = width / 2 + 140 - 40; + skinY = height / 6 + 82; if(mx >= skinX && mx < (skinX + 20) && my >= skinY && my < (skinY + 22)) { dropDownOpen = !dropDownOpen; @@ -448,27 +481,26 @@ public class GuiScreenEditProfile extends GuiScreen { int skinHeight = skinsHeight; if(!(mx >= skinX && mx < (skinX + skinWidth) && my >= skinY && my < (skinY + skinHeight + 22))) { - dropDownOpen = false; dragging = false; - return; - } - - skinY += 21; - - if(dropDownOpen && !dragging) { + if(dropDownOpen) { + dropDownOpen = false; + return; + } + }else if(dropDownOpen && !dragging) { + skinY += 21; for(int i = 0; i < slotsVisible; i++) { if(i + scrollPos < dropDownOptions.length) { - if(selectedSlot != i + scrollPos) { - if(mx >= skinX && mx < (skinX + skinWidth - 10) && my >= (skinY + i * 10 + 5) && my < (skinY + i * 10 + 15) && selectedSlot != i + scrollPos) { - selectedSlot = i + scrollPos; - dropDownOpen = false; - dragging = false; - } + if(mx >= skinX && mx < (skinX + skinWidth - 10) && my >= (skinY + i * 10 + 5) && my < (skinY + i * 10 + 15)) { + selectedSlot = i + scrollPos; + dropDownOpen = false; + dragging = false; + return; } } } } } + super.mouseClicked(mx, my, button); } protected void safeProfile() { @@ -488,7 +520,6 @@ public class GuiScreenEditProfile extends GuiScreen { name = name.substring(0, 16); } EaglerProfile.setName(name); - EaglerProfile.save(); } } diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/HighPolySkin.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/HighPolySkin.java new file mode 100644 index 0000000..f53a1e4 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/HighPolySkin.java @@ -0,0 +1,113 @@ +package net.lax1dude.eaglercraft.v1_8.profile; + +import net.minecraft.util.ResourceLocation; + +/** + * 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. + * + */ +public enum HighPolySkin { + + LONG_ARMS( + new ResourceLocation("eagler:mesh/longarms.png"), + new ResourceLocation("eagler:mesh/longarms0.mdl"), + null, + new ResourceLocation("eagler:mesh/longarms2.mdl"), + new ResourceLocation[] { + new ResourceLocation("eagler:mesh/longarms1.mdl") + }, + new float[] { + 1.325f + }, + 0.0f, + new ResourceLocation("eagler:mesh/longarms.fallback.png") + ), + + WEIRD_CLIMBER_DUDE( + new ResourceLocation("eagler:mesh/weirdclimber.png"), + new ResourceLocation("eagler:mesh/weirdclimber0.mdl"), + null, + new ResourceLocation("eagler:mesh/weirdclimber2.mdl"), + new ResourceLocation[] { + new ResourceLocation("eagler:mesh/weirdclimber1.mdl") + }, + new float[] { + 2.62f + }, + -90.0f, + new ResourceLocation("eagler:mesh/weirdclimber.fallback.png") + ), + + LAXATIVE_DUDE( + new ResourceLocation("eagler:mesh/laxativedude.png"), + new ResourceLocation("eagler:mesh/laxativedude0.mdl"), + null, + new ResourceLocation("eagler:mesh/laxativedude3.mdl"), + new ResourceLocation[] { + new ResourceLocation("eagler:mesh/laxativedude1.mdl"), + new ResourceLocation("eagler:mesh/laxativedude2.mdl") + }, + new float[] { + 2.04f + }, + 0.0f, + new ResourceLocation("eagler:mesh/laxativedude.fallback.png") + ), + + BABY_CHARLES( + new ResourceLocation("eagler:mesh/charles.png"), + new ResourceLocation("eagler:mesh/charles0.mdl"), + new ResourceLocation("eagler:mesh/charles1.mdl"), + new ResourceLocation("eagler:mesh/charles2.mdl"), + new ResourceLocation[] {}, + new float[] {}, + 0.0f, + new ResourceLocation("eagler:mesh/charles.fallback.png") + ), + + BABY_WINSTON( + new ResourceLocation("eagler:mesh/winston.png"), + new ResourceLocation("eagler:mesh/winston0.mdl"), + null, + new ResourceLocation("eagler:mesh/winston1.mdl"), + new ResourceLocation[] {}, + new float[] {}, + 0.0f, + new ResourceLocation("eagler:mesh/winston.fallback.png") + ); + + public static float highPolyScale = 0.5f; + + public final ResourceLocation texture; + public final ResourceLocation bodyModel; + public final ResourceLocation headModel; + public final ResourceLocation eyesModel; + public final ResourceLocation[] limbsModel; + public final float[] limbsOffset; + public final float limbsInitialRotation; + public final ResourceLocation fallbackTexture; + + HighPolySkin(ResourceLocation texture, ResourceLocation bodyModel, ResourceLocation headModel, ResourceLocation eyesModel, + ResourceLocation[] limbsModel, float[] limbsOffset, float limbsInitialRotation, ResourceLocation fallbackTexture) { + this.texture = texture; + this.bodyModel = bodyModel; + this.headModel = headModel; + this.eyesModel = eyesModel; + this.limbsModel = limbsModel; + this.limbsOffset = limbsOffset; + this.limbsInitialRotation = limbsInitialRotation; + this.fallbackTexture = fallbackTexture; + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/RenderHighPoly.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/RenderHighPoly.java new file mode 100644 index 0000000..035d68e --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/RenderHighPoly.java @@ -0,0 +1,471 @@ +package net.lax1dude.eaglercraft.v1_8.profile; + +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; + +import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.lax1dude.eaglercraft.v1_8.opengl.EaglerMeshLoader; +import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; +import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.lax1dude.eaglercraft.v1_8.opengl.OpenGlHelper; +import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DeferredStateManager; +import net.lax1dude.eaglercraft.v1_8.vector.Matrix4f; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MathHelper; + +/** + * 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. + * + */ +public class RenderHighPoly extends RenderPlayer { + + private static final Logger logger = LogManager.getLogger("RenderHighPoly"); + + public RenderHighPoly(RenderManager renderManager, ModelBase fallbackModel, float fallbackScale) { + super(renderManager, fallbackModel, fallbackScale); + } + + private static final Matrix4f tmpMatrix = new Matrix4f(); + + public void doRender(AbstractClientPlayer abstractclientplayer, double d0, double d1, double d2, float f, + float f1) { + if (!abstractclientplayer.isUser() || this.renderManager.livingPlayer == abstractclientplayer) { + double nameY = d1; + HighPolySkin highPolySkin = abstractclientplayer.getEaglerSkinModel().highPoly; + + if(highPolySkin == null) { + super.doRender(abstractclientplayer, d0, d1, d2, f, f1); + return; + }else if(highPolySkin == HighPolySkin.LAXATIVE_DUDE) { + nameY += 0.1; + }else if(highPolySkin == HighPolySkin.BABY_WINSTON) { + nameY -= 1.0; + } + + GlStateManager.pushMatrix(); + GlStateManager.disableCull(); + + try { + Minecraft mc = Minecraft.getMinecraft(); + float f2 = this.interpolateRotation(abstractclientplayer.prevRenderYawOffset, abstractclientplayer.renderYawOffset, + f1); + float f3 = this.interpolateRotation(abstractclientplayer.prevRotationYawHead, abstractclientplayer.rotationYawHead, + f1); + float f4 = f3 - f2; + if (abstractclientplayer.isRiding() && abstractclientplayer.ridingEntity instanceof EntityLivingBase) { + EntityLivingBase entitylivingbase1 = (EntityLivingBase) abstractclientplayer.ridingEntity; + f2 = this.interpolateRotation(entitylivingbase1.prevRenderYawOffset, entitylivingbase1.renderYawOffset, + f1); + f4 = f3 - f2; + float f5 = MathHelper.wrapAngleTo180_float(f4); + if (f5 < -85.0F) { + f5 = -85.0F; + } + + if (f5 >= 85.0F) { + f5 = 85.0F; + } + + f2 = f3 - f5; + if (f5 * f5 > 2500.0F) { + f2 += f5 * 0.2F; + } + } + + this.renderLivingAt(abstractclientplayer, d0, d1, d2); + float f10 = this.handleRotationFloat(abstractclientplayer, f1); + this.rotateCorpse(abstractclientplayer, f10, f2, f1); + GlStateManager.enableRescaleNormal(); + this.preRenderCallback(abstractclientplayer, f1); + float f6 = 0.0625F; + GlStateManager.scale(HighPolySkin.highPolyScale, HighPolySkin.highPolyScale, HighPolySkin.highPolyScale); + mc.getTextureManager().bindTexture(highPolySkin.texture); + + if(abstractclientplayer.isPlayerSleeping()) { + if(highPolySkin == HighPolySkin.LAXATIVE_DUDE || highPolySkin == HighPolySkin.WEIRD_CLIMBER_DUDE) { + GlStateManager.translate(0.0f, -3.7f, 0.0f); + }else if(highPolySkin == HighPolySkin.BABY_WINSTON) { + GlStateManager.translate(0.0f, -2.4f, 0.0f); + }else { + GlStateManager.translate(0.0f, -3.0f, 0.0f); + } + } + + float var15 = abstractclientplayer.prevLimbSwingAmount + (abstractclientplayer.limbSwingAmount - abstractclientplayer.prevLimbSwingAmount) * f1; + float var16 = abstractclientplayer.limbSwing - abstractclientplayer.limbSwingAmount * (1.0F - f1); + + if(highPolySkin == HighPolySkin.LONG_ARMS) { + GlStateManager.rotate(MathHelper.sin(var16) * 20f * var15, 0.0f, 1.0f, 0.0f); + GlStateManager.rotate(MathHelper.cos(var16) * 7f * var15, 0.0f, 0.0f, 1.0f); + }else if(highPolySkin == HighPolySkin.WEIRD_CLIMBER_DUDE) { + GlStateManager.rotate(MathHelper.sin(var16) * 7f * var15, 0.0f, 1.0f, 0.0f); + GlStateManager.rotate(MathHelper.cos(var16) * 3f * var15, 0.0f, 0.0f, 1.0f); + GlStateManager.rotate(-f3, 0.0f, 1.0f, 0.0f); + float xd = (float)(abstractclientplayer.posX - abstractclientplayer.prevPosX); + GlStateManager.rotate(xd * 70.0f * var15, 0.0f, 0.0f, 1.0f); + float zd = (float)(abstractclientplayer.posZ - abstractclientplayer.prevPosZ); + GlStateManager.rotate(zd * 70.0f * var15, 1.0f, 0.0f, 0.0f); + GlStateManager.rotate(f3, 0.0f, 1.0f, 0.0f); + }else if(highPolySkin == HighPolySkin.LAXATIVE_DUDE) { + GlStateManager.rotate(-f3, 0.0f, 1.0f, 0.0f); + float xd = (float)(abstractclientplayer.posX - abstractclientplayer.prevPosX); + GlStateManager.rotate(-xd * 40.0f * var15, 0.0f, 0.0f, 1.0f); + float zd = (float)(abstractclientplayer.posZ - abstractclientplayer.prevPosZ); + GlStateManager.rotate(-zd * 40.0f * var15, 1.0f, 0.0f, 0.0f); + GlStateManager.rotate(f3, 0.0f, 1.0f, 0.0f); + }else if(highPolySkin == HighPolySkin.BABY_WINSTON) { + GlStateManager.translate(0.0f, (MathHelper.cos(f10 % 100000.0f) + 1.0f) * var15 * 0.2f, 0.0f); + GlStateManager.rotate(MathHelper.sin(var16) * 5f * var15, 0.0f, 1.0f, 0.0f); + GlStateManager.rotate(MathHelper.cos(var16) * 5f * var15, 0.0f, 0.0f, 1.0f); + } + + if (abstractclientplayer.hurtTime > 0 || abstractclientplayer.deathTime > 0) { + GlStateManager.color(1.2f, 0.8F, 0.8F, 1.0F); + } + + if(DeferredStateManager.isInDeferredPass()) { + DeferredStateManager.setDefaultMaterialConstants(); + DeferredStateManager.setRoughnessConstant(0.5f); + DeferredStateManager.setMetalnessConstant(0.05f); + } + + if(highPolySkin.bodyModel != null) { + EaglercraftGPU.drawHighPoly(EaglerMeshLoader.getEaglerMesh(highPolySkin.bodyModel)); + } + float jumpFactor = 0.0f; + + if(highPolySkin.headModel != null) { + if(highPolySkin == HighPolySkin.BABY_CHARLES) { + long millis = System.currentTimeMillis(); + float partialTicks = (float) ((millis - abstractclientplayer.eaglerHighPolyAnimationTick) * 0.02); + //long l50 = millis / 50l * 50l; + //boolean runTick = par1EntityPlayer.eaglerHighPolyAnimationTick < l50 && millis >= l50; + abstractclientplayer.eaglerHighPolyAnimationTick = millis; + + if(partialTicks < 0.0f) { + partialTicks = 0.0f; + } + if(partialTicks > 1.0f) { + partialTicks = 1.0f; + } + + float jumpFac = (float)(abstractclientplayer.posY - abstractclientplayer.prevPosY); + if(jumpFac < 0.0f && !abstractclientplayer.isCollidedVertically) { + jumpFac = -jumpFac; + jumpFac *= 0.1f; + } + jumpFac -= 0.05f; + if(jumpFac > 0.1f && !abstractclientplayer.isCollidedVertically) { + jumpFac = 0.1f; + }else if(jumpFac < 0.0f) { + jumpFac = 0.0f; + }else if(jumpFac > 0.1f && abstractclientplayer.isCollidedVertically) { + jumpFac = 0.1f; + }else if(jumpFac > 0.4f) { + jumpFac = 0.4f; + } + jumpFac *= 10.0f; + + abstractclientplayer.eaglerHighPolyAnimationFloat3 += (jumpFac / (jumpFac + 1.0f)) * 6.0f * partialTicks; + + if(Float.isInfinite(abstractclientplayer.eaglerHighPolyAnimationFloat3)) { + abstractclientplayer.eaglerHighPolyAnimationFloat3 = 1.0f; + }else if(abstractclientplayer.eaglerHighPolyAnimationFloat3 > 1.0f) { + abstractclientplayer.eaglerHighPolyAnimationFloat3 = 1.0f; + }else if(abstractclientplayer.eaglerHighPolyAnimationFloat3 < -1.0f) { + abstractclientplayer.eaglerHighPolyAnimationFloat3 = -1.0f; + } + + abstractclientplayer.eaglerHighPolyAnimationFloat2 += abstractclientplayer.eaglerHighPolyAnimationFloat3 * partialTicks; + + abstractclientplayer.eaglerHighPolyAnimationFloat5 += partialTicks; + while(abstractclientplayer.eaglerHighPolyAnimationFloat5 > 0.05f) { + abstractclientplayer.eaglerHighPolyAnimationFloat5 -= 0.05f; + abstractclientplayer.eaglerHighPolyAnimationFloat3 *= 0.99f; + abstractclientplayer.eaglerHighPolyAnimationFloat2 *= 0.9f; + } + + jumpFactor = abstractclientplayer.eaglerHighPolyAnimationFloat2; //(abstractclientplayer.eaglerHighPolyAnimationFloat1 - abstractclientplayer.eaglerHighPolyAnimationFloat2) * partialTicks + abstractclientplayer.eaglerHighPolyAnimationFloat2; + jumpFactor -= 0.12f; + if(jumpFactor < 0.0f) { + jumpFactor = 0.0f; + } + jumpFactor = jumpFactor / (jumpFactor + 2.0f); + if(jumpFactor > 1.0f) { + jumpFactor = 1.0f; + } + } + if(jumpFactor > 0.0f) { + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0f, jumpFactor * 3.0f, 0.0f); + } + + EaglercraftGPU.drawHighPoly(EaglerMeshLoader.getEaglerMesh(highPolySkin.headModel)); + + if(jumpFactor > 0.0f) { + GlStateManager.popMatrix(); + } + } + + if(highPolySkin.limbsModel != null && highPolySkin.limbsModel.length > 0) { + for(int i = 0; i < highPolySkin.limbsModel.length; ++i) { + DeferredStateManager.setRoughnessConstant(0.023f); + DeferredStateManager.setMetalnessConstant(0.902f); + float offset = 0.0f; + if(highPolySkin.limbsOffset != null) { + if(highPolySkin.limbsOffset.length == 1) { + offset = highPolySkin.limbsOffset[0]; + }else { + offset = highPolySkin.limbsOffset[i]; + } + } + + GlStateManager.pushMatrix(); + + if(offset != 0.0f || highPolySkin.limbsInitialRotation != 0.0f) { + if(offset != 0.0f) { + GlStateManager.translate(0.0f, offset, 0.0f); + } + if(highPolySkin.limbsInitialRotation != 0.0f) { + GlStateManager.rotate(highPolySkin.limbsInitialRotation, 1.0f, 0.0f, 0.0f); + } + } + + if(highPolySkin == HighPolySkin.LONG_ARMS) { + if(abstractclientplayer.isSwingInProgress) { + float var17 = MathHelper.cos(-abstractclientplayer.getSwingProgress(f1) * (float)Math.PI * 2.0f - 1.2f) - 0.362f; + var17 *= var17; + GlStateManager.rotate(-var17 * 20.0f, 1.0f, 0.0f, 0.0f); + } + }else if(highPolySkin == HighPolySkin.WEIRD_CLIMBER_DUDE) { + if(abstractclientplayer.isSwingInProgress) { + float var17 = MathHelper.cos(-abstractclientplayer.getSwingProgress(f1) * (float)Math.PI * 2.0f - 1.2f) - 0.362f; + var17 *= var17; + GlStateManager.rotate(var17 * 60.0f, 1.0f, 0.0f, 0.0f); + } + GlStateManager.rotate(40.0f * var15, 1.0f, 0.0f, 0.0f); + }else if(highPolySkin == HighPolySkin.LAXATIVE_DUDE) { + float fff = (i == 0) ? 1.0f : -1.0f; + float swing = (MathHelper.cos(f10 % 100000.0f) * fff + 0.2f) * var15; + float swing2 = (MathHelper.cos(f10 % 100000.0f) * fff * 0.5f + 0.0f) * var15; + GlStateManager.rotate(swing * 25.0f, 1.0f, 0.0f, 0.0f); + if(abstractclientplayer.isSwingInProgress) { + float var17 = MathHelper.cos(-abstractclientplayer.getSwingProgress(f1) * (float)Math.PI * 2.0f - 1.2f) - 0.362f; + var17 *= var17; + GlStateManager.rotate(-var17 * 25.0f, 1.0f, 0.0f, 0.0f); + } + + // shear matrix + tmpMatrix.setIdentity(); + tmpMatrix.m21 = swing2; + tmpMatrix.m23 = swing2 * -0.2f; + GlStateManager.multMatrix(tmpMatrix); + } + + if(i != 0) { + mc.getTextureManager().bindTexture(highPolySkin.texture); + if (abstractclientplayer.hurtTime > 0 || abstractclientplayer.deathTime > 0) { + GlStateManager.color(1.2f, 0.8F, 0.8F, 1.0F); + }else { + GlStateManager.color(1.0f, 1.0F, 1.0F, 1.0F); + } + } + EaglercraftGPU.drawHighPoly(EaglerMeshLoader.getEaglerMesh(highPolySkin.limbsModel[i])); + + if(i == 0) { + GlStateManager.pushMatrix(); + + GlStateManager.translate(-0.287f, 0.05f, 0.0f); + + if(highPolySkin == HighPolySkin.LONG_ARMS) { + GlStateManager.translate(1.72f, 2.05f, -0.24f); + ItemStack stk = abstractclientplayer.getHeldItem(); + if(stk != null) { + Item itm = stk.getItem(); + if(itm != null) { + if(itm == Items.bow) { + GlStateManager.translate(-0.22f, 0.8f, 0.6f); + GlStateManager.rotate(-90.0f, 1.0f, 0.0f, 0.0f); + }else if(itm instanceof ItemBlock && !((ItemBlock)itm).getBlock().isNormalCube()) { + GlStateManager.translate(0.0f, -0.1f, 0.13f); + }else if(!itm.isFull3D()) { + GlStateManager.translate(-0.08f, -0.1f, 0.16f); + } + } + } + }else if(highPolySkin == HighPolySkin.WEIRD_CLIMBER_DUDE) { + GlStateManager.translate(-0.029f, 1.2f, -3f); + GlStateManager.rotate(-5.0f, 0.0f, 1.0f, 0.0f); + float var17 = -1.2f * var15; + if(abstractclientplayer.isSwingInProgress) { + float vvar17 = MathHelper.cos(-abstractclientplayer.getSwingProgress(f1) * (float)Math.PI * 2.0f - 1.2f) - 0.362f; + var17 = vvar17 < var17 ? vvar17 : var17; + } + GlStateManager.translate(-0.02f * var17, 0.42f * var17, var17 * 0.35f); + GlStateManager.rotate(var17 * 30.0f, 1.0f, 0.0f, 0.0f); + GlStateManager.rotate(110.0f, 1.0f, 0.0f, 0.0f); + ItemStack stk = abstractclientplayer.getHeldItem(); + if(stk != null) { + Item itm = stk.getItem(); + if(itm != null) { + if(itm == Items.bow) { + GlStateManager.translate(-0.18f, 1.0f, 0.4f); + GlStateManager.rotate(-95.0f, 1.0f, 0.0f, 0.0f); + }else if(itm instanceof ItemBlock && !((ItemBlock)itm).getBlock().isNormalCube()) { + GlStateManager.translate(0.0f, -0.1f, 0.13f); + }else if(!itm.isFull3D()) { + GlStateManager.translate(-0.08f, -0.1f, 0.16f); + } + } + } + }else if(highPolySkin == HighPolySkin.LAXATIVE_DUDE) { + GlStateManager.translate(1.291f, 2.44f, -2.18f); + GlStateManager.rotate(95.0f, 1.0f, 0.0f, 0.0f); + ItemStack stk = abstractclientplayer.getHeldItem(); + if(stk != null) { + Item itm = stk.getItem(); + if(itm != null) { + if(itm == Items.bow) { + GlStateManager.translate(-0.65f, 1.3f, -0.1f); + GlStateManager.rotate(180.0f, 0.0f, 0.0f, 1.0f); + GlStateManager.rotate(20.0f, 1.0f, 0.0f, 0.0f); + }else if(itm instanceof ItemBlock && !((ItemBlock)itm).getBlock().isNormalCube()) { + GlStateManager.translate(0.0f, -0.35f, 0.4f); + }else if(!itm.isFull3D()) { + GlStateManager.translate(-0.1f, -0.1f, 0.16f); + } + } + } + } + + DeferredStateManager.setDefaultMaterialConstants(); + renderHeldItem(abstractclientplayer, f1); + GlStateManager.popMatrix(); + } + + GlStateManager.popMatrix(); + } + } + + if(highPolySkin.eyesModel != null && !DeferredStateManager.isEnableShadowRender()) { + float ff = 0.00416f; + int brightness = abstractclientplayer.getBrightnessForRender(0.0f); + float blockLight = (brightness % 65536) * ff; + float skyLight = (brightness / 65536) * ff; + float sunCurve = (float)((abstractclientplayer.worldObj.getWorldTime() + 4000l) % 24000) / 24000.0f; + sunCurve = MathHelper.clamp_float(9.8f - MathHelper.abs(sunCurve * 5.0f + sunCurve * sunCurve * 45.0f - 14.3f) * 0.7f, 0.0f, 1.0f); + skyLight = skyLight * (sunCurve * 0.85f + 0.15f); + blockLight = blockLight * (sunCurve * 0.3f + 0.7f); + float eyeBrightness = blockLight; + if(skyLight > eyeBrightness) { + eyeBrightness = skyLight; + } + eyeBrightness += blockLight * 0.2f; + eyeBrightness = 1.0f - eyeBrightness; + eyeBrightness = MathHelper.clamp_float(eyeBrightness * 1.9f - 1.0f, 0.0f, 1.0f); + if(eyeBrightness > 0.1f) { + if(DeferredStateManager.isInDeferredPass()) { + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + DeferredStateManager.setDefaultMaterialConstants(); + DeferredStateManager.setEmissionConstant(eyeBrightness); + }else { + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL_ONE, GL_ONE); + GlStateManager.color(eyeBrightness * 7.0f, eyeBrightness * 7.0f, eyeBrightness * 7.0f, 1.0f); + if(jumpFactor > 0.0f) { + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0f, jumpFactor * 3.0f, 0.0f); + } + } + GlStateManager.disableTexture2D(); + GlStateManager.disableLighting(); + GlStateManager.enableCull(); + + EaglercraftGPU.drawHighPoly(EaglerMeshLoader.getEaglerMesh(highPolySkin.eyesModel)); + + GlStateManager.enableTexture2D(); + GlStateManager.enableLighting(); + GlStateManager.disableCull(); + if(jumpFactor > 0.0f) { + GlStateManager.popMatrix(); + } + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + if(!DeferredStateManager.isInDeferredPass()) { + GlStateManager.disableBlend(); + } + } + } + }catch(Throwable t) { + logger.error("Couldn\'t render entity"); + logger.error(t); + } + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.enableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + GlStateManager.enableCull(); + GlStateManager.popMatrix(); + if (!this.renderOutlines) { + this.renderName(abstractclientplayer, d0, nameY, d2); + } + } + } + + public void renderRightArm(AbstractClientPlayer clientPlayer) { + + } + + public void renderLeftArm(AbstractClientPlayer clientPlayer) { + + } + + protected void renderHeldItem(AbstractClientPlayer clientPlayer, float partialTicks) { + ItemStack itemstack = clientPlayer.getHeldItem(); + if (itemstack != null) { + GlStateManager.pushMatrix(); + GlStateManager.translate(-0.11F, 0.475F, 0.25F); + if (clientPlayer.fishEntity != null) { + itemstack = new ItemStack(Items.fishing_rod, 0); + } + + Item item = itemstack.getItem(); + Minecraft minecraft = Minecraft.getMinecraft(); + if (item instanceof ItemBlock && Block.getBlockFromItem(item).getRenderType() == 2) { + GlStateManager.translate(0.0F, 0.1875F, -0.3125F); + GlStateManager.rotate(20.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(45.0F, 0.0F, 1.0F, 0.0F); + float f1 = 0.375F; + GlStateManager.scale(-f1, -f1, f1); + } + + if (clientPlayer.isSneaking()) { + GlStateManager.translate(0.0F, 0.203125F, 0.0F); + } + + minecraft.getItemRenderer().renderItem(clientPlayer, itemstack, + ItemCameraTransforms.TransformType.THIRD_PERSON); + GlStateManager.popMatrix(); + } + } +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerCapeCache.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerCapeCache.java new file mode 100644 index 0000000..77fb276 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerCapeCache.java @@ -0,0 +1,242 @@ +package net.lax1dude.eaglercraft.v1_8.profile; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.lax1dude.eaglercraft.v1_8.socket.EaglercraftNetworkManager; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.client.C17PacketCustomPayload; +import net.minecraft.util.ResourceLocation; + +/** + * 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. + * + */ +public class ServerCapeCache { + + private static final Logger logger = LogManager.getLogger("ServerCapeCache"); + + public class CapeCacheEntry { + + protected final boolean isPresetCape; + protected final int presetCapeId; + protected final CacheCustomCape customCape; + + protected long lastCacheHit = System.currentTimeMillis(); + + protected CapeCacheEntry(EaglerSkinTexture textureInstance, ResourceLocation resourceLocation) { + this.isPresetCape = false; + this.presetCapeId = -1; + this.customCape = new CacheCustomCape(textureInstance, resourceLocation); + ServerCapeCache.this.textureManager.loadTexture(resourceLocation, textureInstance); + } + + /** + * Use only for the constant for the client player + */ + protected CapeCacheEntry(ResourceLocation resourceLocation) { + this.isPresetCape = false; + this.presetCapeId = -1; + this.customCape = new CacheCustomCape(null, resourceLocation); + } + + protected CapeCacheEntry(int presetSkinId) { + this.isPresetCape = true; + this.presetCapeId = presetSkinId; + this.customCape = null; + } + + public ResourceLocation getResourceLocation() { + if(isPresetCape) { + return DefaultCapes.getCapeFromId(presetCapeId).location; + }else { + if(customCape != null) { + return customCape.resourceLocation; + }else { + return null; + } + } + } + + protected void free() { + if(!isPresetCape && customCape.resourceLocation != null) { + ServerCapeCache.this.textureManager.deleteTexture(customCape.resourceLocation); + } + } + + } + + protected static class CacheCustomCape { + + protected final EaglerSkinTexture textureInstance; + protected final ResourceLocation resourceLocation; + + protected CacheCustomCape(EaglerSkinTexture textureInstance, ResourceLocation resourceLocation) { + this.textureInstance = textureInstance; + this.resourceLocation = resourceLocation; + } + + } + + private final CapeCacheEntry defaultCacheEntry = new CapeCacheEntry(0); + private final Map capesCache = new HashMap(); + private final Map waitingCapes = new HashMap(); + private final Map evictedCapes = new HashMap(); + + private final EaglercraftNetworkManager networkManager; + protected final TextureManager textureManager; + + private final EaglercraftUUID clientPlayerId; + private final CapeCacheEntry clientPlayerCacheEntry; + + private long lastFlush = System.currentTimeMillis(); + private long lastFlushReq = System.currentTimeMillis(); + private long lastFlushEvict = System.currentTimeMillis(); + + private static int texId = 0; + + public ServerCapeCache(EaglercraftNetworkManager networkManager, TextureManager textureManager) { + this.networkManager = networkManager; + this.textureManager = textureManager; + this.clientPlayerId = EaglerProfile.getPlayerUUID(); + this.clientPlayerCacheEntry = new CapeCacheEntry(EaglerProfile.getActiveCapeResourceLocation()); + } + + public CapeCacheEntry getClientPlayerCape() { + return clientPlayerCacheEntry; + } + + public CapeCacheEntry getCape(EaglercraftUUID player) { + if(player.equals(clientPlayerId)) { + return clientPlayerCacheEntry; + } + CapeCacheEntry etr = capesCache.get(player); + if(etr == null) { + if(!waitingCapes.containsKey(player) && !evictedCapes.containsKey(player)) { + waitingCapes.put(player, System.currentTimeMillis()); + PacketBuffer buffer; + try { + buffer = CapePackets.writeGetOtherCape(player); + }catch(IOException ex) { + logger.error("Could not write cape request packet!"); + logger.error(ex); + return defaultCacheEntry; + } + networkManager.sendPacket(new C17PacketCustomPayload("EAG|Capes-1.8", buffer)); + } + return defaultCacheEntry; + }else { + etr.lastCacheHit = System.currentTimeMillis(); + return etr; + } + } + + public void cacheCapePreset(EaglercraftUUID player, int presetId) { + if(waitingCapes.remove(player) != null) { + CapeCacheEntry etr = capesCache.remove(player); + if(etr != null) { + etr.free(); + } + capesCache.put(player, new CapeCacheEntry(presetId)); + }else { + logger.error("Unsolicited cape response recieved for \"{}\"! (preset {})", player, presetId); + } + } + + public void cacheCapeCustom(EaglercraftUUID player, byte[] pixels) { + if(waitingCapes.remove(player) != null) { + CapeCacheEntry etr = capesCache.remove(player); + if(etr != null) { + etr.free(); + } + byte[] pixels32x32 = new byte[4096]; + SkinConverter.convertCape23x17RGBto32x32RGBA(pixels, pixels32x32); + try { + etr = new CapeCacheEntry(new EaglerSkinTexture(pixels32x32, 32, 32), + new ResourceLocation("eagler:capes/multiplayer/tex_" + texId++)); + }catch(Throwable t) { + etr = new CapeCacheEntry(0); + logger.error("Could not process custom skin packet for \"{}\"!", player); + logger.error(t); + } + capesCache.put(player, etr); + }else { + logger.error("Unsolicited skin response recieved for \"{}\"!", player); + } + } + + public void flush() { + long millis = System.currentTimeMillis(); + if(millis - lastFlushReq > 5000l) { + lastFlushReq = millis; + if(!waitingCapes.isEmpty()) { + Iterator waitingItr = waitingCapes.values().iterator(); + while(waitingItr.hasNext()) { + if(millis - waitingItr.next().longValue() > 30000l) { + waitingItr.remove(); + } + } + } + } + if(millis - lastFlushEvict > 1000l) { + lastFlushEvict = millis; + if(!evictedCapes.isEmpty()) { + Iterator evictItr = evictedCapes.values().iterator(); + while(evictItr.hasNext()) { + if(millis - evictItr.next().longValue() > 3000l) { + evictItr.remove(); + } + } + } + } + if(millis - lastFlush > 60000l) { + lastFlush = millis; + if(!capesCache.isEmpty()) { + Iterator entryItr = capesCache.values().iterator(); + while(entryItr.hasNext()) { + CapeCacheEntry etr = entryItr.next(); + if(millis - etr.lastCacheHit > 900000l) { // 15 minutes + entryItr.remove(); + etr.free(); + } + } + } + } + } + + public void destroy() { + Iterator entryItr = capesCache.values().iterator(); + while(entryItr.hasNext()) { + entryItr.next().free(); + } + capesCache.clear(); + waitingCapes.clear(); + evictedCapes.clear(); + } + + public void evictCape(EaglercraftUUID uuid) { + evictedCapes.put(uuid, Long.valueOf(System.currentTimeMillis())); + CapeCacheEntry etr = capesCache.remove(uuid); + if(etr != null) { + etr.free(); + } + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerSkinCache.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerSkinCache.java index f2f6abd..5a88c28 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerSkinCache.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerSkinCache.java @@ -321,6 +321,7 @@ public class ServerSkinCache { } skinsCache.clear(); waitingSkins.clear(); + evictedSkins.clear(); } public void evictSkin(EaglercraftUUID uuid) { diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinConverter.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinConverter.java index a91a05c..c776fb2 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinConverter.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinConverter.java @@ -3,7 +3,7 @@ package net.lax1dude.eaglercraft.v1_8.profile; import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; /** - * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. + * Copyright (c) 2022-2024 lax1dude, ayunami2000. 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 @@ -35,6 +35,56 @@ public class SkinConverter { copyRawPixels(skinIn.pixels, skinOut.pixels, 48, 52, 44, 64, 52, 20, 56, 32, 64, 64); } + public static void convertCape32x32RGBAto23x17RGB(ImageData skinIn, byte[] skinOut) { + int i, j; + for(int y = 0; y < 17; ++y) { + for(int x = 0; x < 22; ++x) { + i = (y * 23 + x) * 3; + j = skinIn.pixels[y * skinIn.width + x]; + if((j & 0xFF000000) != 0) { + skinOut[i] = (byte)(j >> 16); + skinOut[i + 1] = (byte)(j >> 8); + skinOut[i + 2] = (byte)(j & 0xFF); + }else { + skinOut[i] = skinOut[i + 1] = skinOut[i + 2] = 0; + } + } + } + for(int y = 0; y < 11; ++y) { + i = ((y + 6) * 23 + 22) * 3; + j = skinIn.pixels[(y + 11) * skinIn.width + 22]; + if((j & 0xFF000000) != 0) { + skinOut[i] = (byte)(j >> 16); + skinOut[i + 1] = (byte)(j >> 8); + skinOut[i + 2] = (byte)(j & 0xFF); + }else { + skinOut[i] = skinOut[i + 1] = skinOut[i + 2] = 0; + } + } + } + + public static void convertCape23x17RGBto32x32RGBA(byte[] skinIn, byte[] skinOut) { + int i, j; + for(int y = 0; y < 17; ++y) { + for(int x = 0; x < 22; ++x) { + i = (y * 32 + x) << 2; + j = (y * 23 + x) * 3; + skinOut[i] = (byte)0xFF; + skinOut[i + 1] = skinIn[j]; + skinOut[i + 2] = skinIn[j + 1]; + skinOut[i + 3] = skinIn[j + 2]; + } + } + for(int y = 0; y < 11; ++y) { + i = ((y + 11) * 32 + 22) << 2; + j = ((y + 6) * 23 + 22) * 3; + skinOut[i] = (byte)0xFF; + skinOut[i + 1] = skinIn[j]; + skinOut[i + 2] = skinIn[j + 1]; + skinOut[i + 3] = skinIn[j + 2]; + } + } + private static void copyRawPixels(int[] imageIn, int[] imageOut, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, int imgSrcWidth, int imgDstWidth) { if(dx1 > dx2) { diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinModel.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinModel.java index 7956881..8dbb655 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinModel.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinModel.java @@ -19,15 +19,19 @@ import java.util.Map; * */ public enum SkinModel { - STEVE(0, 64, 64, "default", false), ALEX(1, 64, 64, "slim", false), ZOMBIE(2, 64, 64, "zombie", true); + STEVE(0, 64, 64, "default", false), ALEX(1, 64, 64, "slim", false), ZOMBIE(2, 64, 64, "zombie", true), + LONG_ARMS(3, HighPolySkin.LONG_ARMS), WEIRD_CLIMBER_DUDE(4, HighPolySkin.WEIRD_CLIMBER_DUDE), + LAXATIVE_DUDE(5, HighPolySkin.LAXATIVE_DUDE), BABY_CHARLES(6, HighPolySkin.BABY_CHARLES), + BABY_WINSTON(7, HighPolySkin.BABY_WINSTON); public final int id; public final int width; public final int height; public final String profileSkinType; public final boolean sanitize; + public final HighPolySkin highPoly; - public static final SkinModel[] skinModels = new SkinModel[3]; + public static final SkinModel[] skinModels = new SkinModel[8]; private static final Map skinModelsByName = new HashMap(); private SkinModel(int id, int w, int h, String profileSkinType, boolean sanitize) { @@ -36,6 +40,16 @@ public enum SkinModel { this.height = h; this.profileSkinType = profileSkinType; this.sanitize = sanitize; + this.highPoly = null; + } + + private SkinModel(int id, HighPolySkin highPoly) { + this.id = id; + this.width = 256; + this.height = 128; + this.profileSkinType = "eagler"; + this.sanitize = true; + this.highPoly = highPoly; } public static SkinModel getModelFromId(String str) { diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPackets.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPackets.java index 93dc6b6..510bd89 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPackets.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPackets.java @@ -58,6 +58,9 @@ public class SkinPackets { modelId = SkinModel.STEVE; } } + if(modelId.highPoly != null) { + modelId = SkinModel.STEVE; + } int bytesToRead = modelId.width * modelId.height * 4; byte[] readSkin = new byte[bytesToRead]; buffer.readBytes(readSkin); diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPreviewRenderer.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPreviewRenderer.java index 1608c04..36a2089 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPreviewRenderer.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPreviewRenderer.java @@ -1,10 +1,14 @@ package net.lax1dude.eaglercraft.v1_8.profile; +import net.lax1dude.eaglercraft.v1_8.opengl.EaglerMeshLoader; +import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.model.ModelPlayer; import net.minecraft.client.model.ModelZombie; import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. @@ -36,7 +40,11 @@ public class SkinPreviewRenderer { playerModelZombie.isChild = false; } - public static void renderBiped(int x, int y, int mx, int my, SkinModel skinModel) { + public static void renderPreview(int x, int y, int mx, int my, SkinModel skinModel) { + renderPreview(x, y, mx, my, false, skinModel, null, null); + } + + public static void renderPreview(int x, int y, int mx, int my, boolean capeMode, SkinModel skinModel, ResourceLocation skinTexture, ResourceLocation capeTexture) { ModelBiped model; switch(skinModel) { case STEVE: @@ -49,6 +57,17 @@ public class SkinPreviewRenderer { case ZOMBIE: model = playerModelZombie; break; + case LONG_ARMS: + case WEIRD_CLIMBER_DUDE: + case LAXATIVE_DUDE: + case BABY_CHARLES: + case BABY_WINSTON: + if(skinModel.highPoly != null && Minecraft.getMinecraft().gameSettings.enableFNAWSkins) { + renderHighPoly(x, y, mx, my, skinModel.highPoly); + return; + } + model = playerModelSteve; + break; } GlStateManager.enableTexture2D(); @@ -65,12 +84,95 @@ public class SkinPreviewRenderer { RenderHelper.enableGUIStandardItemLighting(); GlStateManager.translate(0.0f, 1.0f, 0.0f); - GlStateManager.rotate(((y - my) * -0.06f), 1.0f, 0.0f, 0.0f); + if(capeMode) { + GlStateManager.rotate(140.0f, 0.0f, 1.0f, 0.0f); + mx = x - (x - mx) - 20; + GlStateManager.rotate(((y - my) * -0.02f), 1.0f, 0.0f, 0.0f); + }else { + GlStateManager.rotate(((y - my) * -0.06f), 1.0f, 0.0f, 0.0f); + } GlStateManager.rotate(((x - mx) * 0.06f), 0.0f, 1.0f, 0.0f); GlStateManager.translate(0.0f, -1.0f, 0.0f); + if(skinTexture != null) { + Minecraft.getMinecraft().getTextureManager().bindTexture(skinTexture); + } + model.render(null, 0.0f, 0.0f, (float)(System.currentTimeMillis() % 2000000) / 50f, ((x - mx) * 0.06f), ((y - my) * -0.1f), 0.0625f); + if(capeTexture != null && model instanceof ModelPlayer) { + Minecraft.getMinecraft().getTextureManager().bindTexture(capeTexture); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 0.0F, 0.125F); + GlStateManager.rotate(6.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + ((ModelPlayer)model).renderCape(0.0625f); + GlStateManager.popMatrix(); + } + + GlStateManager.popMatrix(); + GlStateManager.disableLighting(); + } + + private static void renderHighPoly(int x, int y, int mx, int my, HighPolySkin msh) { + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + GlStateManager.disableCull(); + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + + GlStateManager.pushMatrix(); + GlStateManager.translate(x, y - 80.0f, 100.0f); + GlStateManager.scale(50.0f, 50.0f, 50.0f); + GlStateManager.rotate(180.0f, 1.0f, 0.0f, 0.0f); + GlStateManager.scale(1.0f, -1.0f, 1.0f); + + RenderHelper.enableGUIStandardItemLighting(); + + GlStateManager.translate(0.0f, 1.0f, 0.0f); + GlStateManager.rotate(((y - my) * -0.06f), 1.0f, 0.0f, 0.0f); + GlStateManager.rotate(((x - mx) * 0.06f), 0.0f, 1.0f, 0.0f); + GlStateManager.rotate(180.0f, 0.0f, 0.0f, 1.0f); + GlStateManager.translate(0.0f, -0.6f, 0.0f); + + GlStateManager.scale(HighPolySkin.highPolyScale, HighPolySkin.highPolyScale, HighPolySkin.highPolyScale); + Minecraft.getMinecraft().getTextureManager().bindTexture(msh.texture); + + if(msh.bodyModel != null) { + EaglercraftGPU.drawHighPoly(EaglerMeshLoader.getEaglerMesh(msh.bodyModel)); + } + + if(msh.headModel != null) { + EaglercraftGPU.drawHighPoly(EaglerMeshLoader.getEaglerMesh(msh.headModel)); + } + + if(msh.limbsModel != null && msh.limbsModel.length > 0) { + for(int i = 0; i < msh.limbsModel.length; ++i) { + float offset = 0.0f; + if(msh.limbsOffset != null) { + if(msh.limbsOffset.length == 1) { + offset = msh.limbsOffset[0]; + }else { + offset = msh.limbsOffset[i]; + } + } + if(offset != 0.0f || msh.limbsInitialRotation != 0.0f) { + GlStateManager.pushMatrix(); + if(offset != 0.0f) { + GlStateManager.translate(0.0f, offset, 0.0f); + } + if(msh.limbsInitialRotation != 0.0f) { + GlStateManager.rotate(msh.limbsInitialRotation, 1.0f, 0.0f, 0.0f); + } + } + + EaglercraftGPU.drawHighPoly(EaglerMeshLoader.getEaglerMesh(msh.limbsModel[i])); + + if(offset != 0.0f || msh.limbsInitialRotation != 0.0f) { + GlStateManager.popMatrix(); + } + } + } + GlStateManager.popMatrix(); GlStateManager.disableLighting(); } diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/socket/ConnectionHandshake.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/socket/ConnectionHandshake.java index b51965b..318118d 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/socket/ConnectionHandshake.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/socket/ConnectionHandshake.java @@ -293,6 +293,19 @@ public class ConnectionHandshake { d.write(packetSkin); PlatformNetworking.writePlayPacket(bao.toByteArray()); + bao.reset(); + d.writeByte(HandshakePacketTypes.PROTOCOL_CLIENT_PROFILE_DATA); + profileDataType = "cape_v1"; + d.writeByte(profileDataType.length()); + d.writeBytes(profileDataType); + byte[] packetCape = EaglerProfile.getCapePacket(); + if(packetCape.length > 0xFFFF) { + throw new IOException("Cape packet is too long: " + packetCape.length); + } + d.writeShort(packetCape.length); + d.write(packetCape); + PlatformNetworking.writePlayPacket(bao.toByteArray()); + byte[] packetSignatureData = UpdateService.getClientSignatureData(); if(packetSignatureData != null) { bao.reset(); diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenAddRelay.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenAddRelay.java index 7fa49f4..7032d61 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenAddRelay.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenAddRelay.java @@ -140,4 +140,7 @@ public class GuiScreenAddRelay extends GuiScreen { super.drawScreen(par1, par2, par3); } + public boolean blockPTTKey() { + return this.serverName.isFocused() || this.serverAddress.isFocused(); + } } \ No newline at end of file diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnecting.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnecting.java index 38b6ecb..6445e8d 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnecting.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnecting.java @@ -117,7 +117,7 @@ public class GuiScreenLANConnecting extends GuiScreen { this.mc.clearTitles(); networkManager.setConnectionState(EnumConnectionState.LOGIN); networkManager.setNetHandler(new NetHandlerSingleplayerLogin(networkManager, mc, parent)); - networkManager.sendPacket(new C00PacketLoginStart(this.mc.getSession().getProfile(), EaglerProfile.getSkinPacket())); + networkManager.sendPacket(new C00PacketLoginStart(this.mc.getSession().getProfile(), EaglerProfile.getSkinPacket(), EaglerProfile.getCapePacket())); } } } diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenSingleplayerConnecting.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenSingleplayerConnecting.java index ff7d193..fb38a61 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenSingleplayerConnecting.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenSingleplayerConnecting.java @@ -88,7 +88,7 @@ public class GuiScreenSingleplayerConnecting extends GuiScreen { this.mc.clearTitles(); this.networkManager.setConnectionState(EnumConnectionState.LOGIN); this.networkManager.setNetHandler(new NetHandlerSingleplayerLogin(this.networkManager, this.mc, this.menu)); - this.networkManager.sendPacket(new C00PacketLoginStart(this.mc.getSession().getProfile(), EaglerProfile.getSkinPacket())); + this.networkManager.sendPacket(new C00PacketLoginStart(this.mc.getSession().getProfile(), EaglerProfile.getSkinPacket(), EaglerProfile.getCapePacket())); } try { this.networkManager.processReceivedPackets(); diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiShareToLan.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiShareToLan.java index 7ab3dc3..9190a4e 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiShareToLan.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiShareToLan.java @@ -195,4 +195,8 @@ public class GuiShareToLan extends GuiScreen { super.updateScreen(); this.codeTextField.updateCursorCounter(); } + + public boolean blockPTTKey() { + return this.codeTextField.isFocused(); + } } \ No newline at end of file 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 f695ebe..c5d87ee 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 @@ -361,6 +361,9 @@ public class EaglerIntegratedServerWorker { case IPCPacket17ConfigureLAN.ID: { IPCPacket17ConfigureLAN pkt = (IPCPacket17ConfigureLAN)ipc; + if(!pkt.iceServers.isEmpty() && ServerPlatformSingleplayer.getClientConfigAdapter().isAllowVoiceClient()) { + currentProcess.enableVoice(pkt.iceServers.toArray(new String[pkt.iceServers.size()])); + } currentProcess.getConfigurationManager().configureLAN(pkt.gamemode, pkt.cheats); // don't use iceServers break; diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerMinecraftServer.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerMinecraftServer.java index 85a6969..6e76ca9 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerMinecraftServer.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerMinecraftServer.java @@ -16,7 +16,9 @@ import net.minecraft.world.EnumDifficulty; import net.minecraft.world.WorldServer; import net.minecraft.world.WorldSettings; import net.minecraft.world.WorldSettings.GameType; +import net.lax1dude.eaglercraft.v1_8.sp.server.skins.IntegratedCapeService; import net.lax1dude.eaglercraft.v1_8.sp.server.skins.IntegratedSkinService; +import net.lax1dude.eaglercraft.v1_8.sp.server.voice.IntegratedVoiceService; /** * Copyright (c) 2023-2024 lax1dude, ayunami2000. All Rights Reserved. @@ -45,6 +47,8 @@ public class EaglerMinecraftServer extends MinecraftServer { protected boolean paused; protected EaglerSaveHandler saveHandler; protected IntegratedSkinService skinService; + protected IntegratedCapeService capeService; + protected IntegratedVoiceService voiceService; private long lastTPSUpdate = 0l; @@ -62,6 +66,8 @@ public class EaglerMinecraftServer extends MinecraftServer { Bootstrap.register(); this.saveHandler = new EaglerSaveHandler(savesDir, world); this.skinService = new IntegratedSkinService(new VFile2(saveHandler.getWorldDirectory(), "eagler/skulls")); + this.capeService = new IntegratedCapeService(); + this.voiceService = null; this.setServerOwner(owner); logger.info("server owner: " + owner); this.setDemo(demo); @@ -76,6 +82,27 @@ public class EaglerMinecraftServer extends MinecraftServer { return skinService; } + public IntegratedCapeService getCapeService() { + return capeService; + } + + public IntegratedVoiceService getVoiceService() { + return voiceService; + } + + public void enableVoice(String[] iceServers) { + if(iceServers != null) { + if(voiceService != null) { + voiceService.changeICEServers(iceServers); + }else { + voiceService = new IntegratedVoiceService(iceServers); + for(EntityPlayerMP player : getConfigurationManager().func_181057_v()) { + voiceService.handlePlayerLoggedIn(player); + } + } + } + } + public void setBaseServerProperties(EnumDifficulty difficulty, GameType gamemode) { this.difficulty = difficulty; this.gamemode = gamemode; diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerPlayerList.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerPlayerList.java index 32e2b88..525110b 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerPlayerList.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerPlayerList.java @@ -43,6 +43,8 @@ public class EaglerPlayerList extends ServerConfigurationManager { public void playerLoggedOut(EntityPlayerMP playerIn) { super.playerLoggedOut(playerIn); - ((EaglerMinecraftServer)getServerInstance()).skinService.unregisterPlayer(playerIn.getUniqueID()); + EaglerMinecraftServer svr = (EaglerMinecraftServer)getServerInstance(); + svr.skinService.unregisterPlayer(playerIn.getUniqueID()); + svr.capeService.unregisterPlayer(playerIn.getUniqueID()); } } diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapePackets.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapePackets.java new file mode 100644 index 0000000..af37b1e --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapePackets.java @@ -0,0 +1,110 @@ +package net.lax1dude.eaglercraft.v1_8.sp.server.skins; + +import java.io.IOException; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.minecraft.entity.player.EntityPlayerMP; + +/** + * 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 IntegratedCapePackets { + + public static final int PACKET_MY_CAPE_PRESET = 0x01; + public static final int PACKET_MY_CAPE_CUSTOM = 0x02; + public static final int PACKET_GET_OTHER_CAPE = 0x03; + public static final int PACKET_OTHER_CAPE_PRESET = 0x04; + public static final int PACKET_OTHER_CAPE_CUSTOM = 0x05; + + public static void processPacket(byte[] data, EntityPlayerMP sender, IntegratedCapeService capeService) throws IOException { + if(data.length == 0) { + throw new IOException("Zero-length packet recieved"); + } + int packetId = (int)data[0] & 0xFF; + try { + switch(packetId) { + case PACKET_GET_OTHER_CAPE: + processGetOtherCape(data, sender, capeService); + break; + default: + throw new IOException("Unknown packet type " + packetId); + } + }catch(IOException ex) { + throw ex; + }catch(Throwable t) { + throw new IOException("Unhandled exception handling packet type " + packetId, t); + } + } + + private static void processGetOtherCape(byte[] data, EntityPlayerMP sender, IntegratedCapeService capeService) throws IOException { + if(data.length != 17) { + throw new IOException("Invalid length " + data.length + " for skin request packet"); + } + EaglercraftUUID searchUUID = IntegratedSkinPackets.bytesToUUID(data, 1); + capeService.processGetOtherCape(searchUUID, sender); + } + + public static void registerEaglerPlayer(EaglercraftUUID clientUUID, byte[] bs, IntegratedCapeService capeService) throws IOException { + if(bs.length == 0) { + throw new IOException("Zero-length packet recieved"); + } + byte[] generatedPacket; + int packetType = (int)bs[0] & 0xFF; + switch(packetType) { + case PACKET_MY_CAPE_PRESET: + if(bs.length != 5) { + throw new IOException("Invalid length " + bs.length + " for preset cape packet"); + } + generatedPacket = IntegratedCapePackets.makePresetResponse(clientUUID, (bs[1] << 24) | (bs[2] << 16) | (bs[3] << 8) | (bs[4] & 0xFF)); + break; + case PACKET_MY_CAPE_CUSTOM: + if(bs.length != 1174) { + throw new IOException("Invalid length " + bs.length + " for custom cape packet"); + } + generatedPacket = IntegratedCapePackets.makeCustomResponse(clientUUID, bs, 1, 1173); + break; + default: + throw new IOException("Unknown skin packet type: " + packetType); + } + capeService.registerEaglercraftPlayer(clientUUID, generatedPacket); + } + + public static void registerEaglerPlayerFallback(EaglercraftUUID clientUUID, IntegratedCapeService capeService) { + capeService.registerEaglercraftPlayer(clientUUID, IntegratedCapePackets.makePresetResponse(clientUUID, 0)); + } + + public static byte[] makePresetResponse(EaglercraftUUID uuid, int presetId) { + byte[] ret = new byte[1 + 16 + 4]; + ret[0] = (byte)PACKET_OTHER_CAPE_PRESET; + IntegratedSkinPackets.UUIDToBytes(uuid, ret, 1); + ret[17] = (byte)(presetId >> 24); + ret[18] = (byte)(presetId >> 16); + ret[19] = (byte)(presetId >> 8); + ret[20] = (byte)(presetId & 0xFF); + return ret; + } + + public static byte[] makeCustomResponse(EaglercraftUUID uuid, byte[] pixels) { + return makeCustomResponse(uuid, pixels, 0, pixels.length); + } + + public static byte[] makeCustomResponse(EaglercraftUUID uuid, byte[] pixels, int offset, int length) { + byte[] ret = new byte[1 + 16 + length]; + ret[0] = (byte)PACKET_OTHER_CAPE_CUSTOM; + IntegratedSkinPackets.UUIDToBytes(uuid, ret, 1); + System.arraycopy(pixels, offset, ret, 17, length); + return ret; + } +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapeService.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapeService.java new file mode 100644 index 0000000..b3401a8 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapeService.java @@ -0,0 +1,77 @@ +package net.lax1dude.eaglercraft.v1_8.sp.server.skins; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.lax1dude.eaglercraft.v1_8.netty.Unpooled; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.server.S3FPacketCustomPayload; + +/** + * 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 IntegratedCapeService { + + public static final Logger logger = LogManager.getLogger("IntegratedCapeService"); + + public static final int masterRateLimitPerPlayer = 250; + + public static final String CHANNEL = "EAG|Capes-1.8"; + + private final Map capesCache = new HashMap(); + + public void processPacket(byte[] packetData, EntityPlayerMP sender) { + try { + IntegratedCapePackets.processPacket(packetData, sender, this); + } catch (IOException e) { + logger.error("Invalid skin request packet recieved from player {}!", sender.getName()); + logger.error(e); + sender.playerNetServerHandler.kickPlayerFromServer("Invalid skin request packet recieved!"); + } + } + + public void processLoginPacket(byte[] packetData, EntityPlayerMP sender) { + try { + IntegratedCapePackets.registerEaglerPlayer(sender.getUniqueID(), packetData, this); + } catch (IOException e) { + logger.error("Invalid skin data packet recieved from player {}!", sender.getName()); + logger.error(e); + sender.playerNetServerHandler.kickPlayerFromServer("Invalid skin data packet recieved!"); + } + } + + public void registerEaglercraftPlayer(EaglercraftUUID playerUUID, byte[] capePacket) { + capesCache.put(playerUUID, capePacket); + } + + public void processGetOtherCape(EaglercraftUUID searchUUID, EntityPlayerMP sender) { + byte[] maybeCape = capesCache.get(searchUUID); + if(maybeCape == null) { + maybeCape = IntegratedCapePackets.makePresetResponse(searchUUID, 0); + } + sender.playerNetServerHandler.sendPacket(new S3FPacketCustomPayload(CHANNEL, new PacketBuffer(Unpooled.buffer(maybeCape, maybeCape.length).writerIndex(maybeCape.length)))); + } + + public void unregisterPlayer(EaglercraftUUID playerUUID) { + synchronized(capesCache) { + capesCache.remove(playerUUID); + } + } +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/voice/IntegratedVoiceService.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/voice/IntegratedVoiceService.java new file mode 100644 index 0000000..bb20af2 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/voice/IntegratedVoiceService.java @@ -0,0 +1,255 @@ +package net.lax1dude.eaglercraft.v1_8.sp.server.voice; + +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.lax1dude.eaglercraft.v1_8.netty.Unpooled; +import net.lax1dude.eaglercraft.v1_8.voice.ExpiringSet; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.server.S3FPacketCustomPayload; + +/** + * 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 IntegratedVoiceService { + + public static final Logger logger = LogManager.getLogger("IntegratedVoiceService"); + + public static final String CHANNEL = "EAG|Voice-1.8"; + + private byte[] iceServersPacket; + + private final Map voicePlayers = new HashMap<>(); + private final Map> voiceRequests = new HashMap<>(); + private final Set voicePairs = new HashSet<>(); + + public IntegratedVoiceService(String[] iceServers) { + iceServersPacket = IntegratedVoiceSignalPackets.makeVoiceSignalPacketAllowed(true, iceServers); + } + + public void changeICEServers(String[] iceServers) { + iceServersPacket = IntegratedVoiceSignalPackets.makeVoiceSignalPacketAllowed(true, iceServers); + } + + private static class VoicePair { + + private final EaglercraftUUID uuid1; + private final EaglercraftUUID uuid2; + + @Override + public int hashCode() { + return uuid1.hashCode() ^ uuid2.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + VoicePair other = (VoicePair) obj; + return (uuid1.equals(other.uuid1) && uuid2.equals(other.uuid2)) + || (uuid1.equals(other.uuid2) && uuid2.equals(other.uuid1)); + } + + private VoicePair(EaglercraftUUID uuid1, EaglercraftUUID uuid2) { + this.uuid1 = uuid1; + this.uuid2 = uuid2; + } + + private boolean anyEquals(EaglercraftUUID uuid) { + return uuid1.equals(uuid) || uuid2.equals(uuid); + } + } + + public void handlePlayerLoggedIn(EntityPlayerMP player) { + player.playerNetServerHandler.sendPacket(new S3FPacketCustomPayload(CHANNEL, new PacketBuffer( + Unpooled.buffer(iceServersPacket, iceServersPacket.length).writerIndex(iceServersPacket.length)))); + } + + public void handlePlayerLoggedOut(EntityPlayerMP player) { + removeUser(player.getUniqueID()); + } + + public void processPacket(PacketBuffer packetData, EntityPlayerMP sender) { + try { + IntegratedVoiceSignalPackets.processPacket(packetData, sender, this); + } catch (IOException e) { + logger.error("Invalid voice signal packet recieved from player {}!", sender.getName()); + logger.error(e); + sender.playerNetServerHandler.kickPlayerFromServer("Invalid voice signal packet recieved!"); + } + } + + void handleVoiceSignalPacketTypeRequest(EaglercraftUUID player, EntityPlayerMP sender) { + EaglercraftUUID senderUUID = sender.getUniqueID(); + if (senderUUID.equals(player)) + return; // prevent duplicates + if (!voicePlayers.containsKey(senderUUID)) + return; + EntityPlayerMP targetPlayerCon = voicePlayers.get(player); + if (targetPlayerCon == null) + return; + VoicePair newPair = new VoicePair(player, senderUUID); + if (voicePairs.contains(newPair)) + return; // already paired + ExpiringSet senderRequestSet = voiceRequests.get(senderUUID); + if (senderRequestSet == null) { + voiceRequests.put(senderUUID, senderRequestSet = new ExpiringSet<>(2000)); + } + if (!senderRequestSet.add(player)) { + return; + } + + // check if other has requested earlier + ExpiringSet theSet; + if ((theSet = voiceRequests.get(player)) != null && theSet.contains(senderUUID)) { + theSet.remove(senderUUID); + if (theSet.isEmpty()) + voiceRequests.remove(player); + senderRequestSet.remove(player); + if (senderRequestSet.isEmpty()) + voiceRequests.remove(senderUUID); + // send each other add data + voicePairs.add(newPair); + targetPlayerCon.playerNetServerHandler.sendPacket(new S3FPacketCustomPayload(CHANNEL, + IntegratedVoiceSignalPackets.makeVoiceSignalPacketConnect(senderUUID, false))); + sender.playerNetServerHandler.sendPacket(new S3FPacketCustomPayload(CHANNEL, + IntegratedVoiceSignalPackets.makeVoiceSignalPacketConnect(player, true))); + } + } + + void handleVoiceSignalPacketTypeConnect(EntityPlayerMP sender) { + if (voicePlayers.containsKey(sender.getUniqueID())) { + return; + } + boolean hasNoOtherPlayers = voicePlayers.isEmpty(); + voicePlayers.put(sender.getUniqueID(), sender); + if (hasNoOtherPlayers) { + return; + } + byte[] packetToBroadcast = IntegratedVoiceSignalPackets.makeVoiceSignalPacketGlobal(voicePlayers.values()); + for (EntityPlayerMP userCon : voicePlayers.values()) { + userCon.playerNetServerHandler.sendPacket(new S3FPacketCustomPayload(CHANNEL, new PacketBuffer(Unpooled + .buffer(packetToBroadcast, packetToBroadcast.length).writerIndex(packetToBroadcast.length)))); + } + } + + void handleVoiceSignalPacketTypeICE(EaglercraftUUID player, String str, EntityPlayerMP sender) { + VoicePair pair = new VoicePair(player, sender.getUniqueID()); + EntityPlayerMP pass = voicePairs.contains(pair) ? voicePlayers.get(player) : null; + if (pass != null) { + pass.playerNetServerHandler.sendPacket(new S3FPacketCustomPayload(CHANNEL, + IntegratedVoiceSignalPackets.makeVoiceSignalPacketICE(sender.getUniqueID(), str))); + } + } + + void handleVoiceSignalPacketTypeDesc(EaglercraftUUID player, String str, EntityPlayerMP sender) { + VoicePair pair = new VoicePair(player, sender.getUniqueID()); + EntityPlayerMP pass = voicePairs.contains(pair) ? voicePlayers.get(player) : null; + if (pass != null) { + pass.playerNetServerHandler.sendPacket(new S3FPacketCustomPayload(CHANNEL, + IntegratedVoiceSignalPackets.makeVoiceSignalPacketDesc(sender.getUniqueID(), str))); + } + } + + void handleVoiceSignalPacketTypeDisconnect(EaglercraftUUID player, EntityPlayerMP sender) { + if (player != null) { + if (!voicePlayers.containsKey(player)) { + return; + } + byte[] userDisconnectPacket = null; + Iterator pairsItr = voicePairs.iterator(); + while (pairsItr.hasNext()) { + VoicePair voicePair = pairsItr.next(); + EaglercraftUUID target = null; + if (voicePair.uuid1.equals(player)) { + target = voicePair.uuid2; + } else if (voicePair.uuid2.equals(player)) { + target = voicePair.uuid1; + } + if (target != null) { + pairsItr.remove(); + EntityPlayerMP conn = voicePlayers.get(target); + if (conn != null) { + if (userDisconnectPacket == null) { + userDisconnectPacket = IntegratedVoiceSignalPackets.makeVoiceSignalPacketDisconnect(player); + } + conn.playerNetServerHandler.sendPacket(new S3FPacketCustomPayload(CHANNEL, + new PacketBuffer(Unpooled.buffer(userDisconnectPacket, userDisconnectPacket.length) + .writerIndex(userDisconnectPacket.length)))); + } + sender.playerNetServerHandler.sendPacket(new S3FPacketCustomPayload(CHANNEL, + IntegratedVoiceSignalPackets.makeVoiceSignalPacketDisconnectPB(target))); + } + } + } else { + removeUser(sender.getUniqueID()); + } + } + + public void removeUser(EaglercraftUUID user) { + if (voicePlayers.remove(user) == null) { + return; + } + voiceRequests.remove(user); + if (voicePlayers.size() > 0) { + byte[] voicePlayersPkt = IntegratedVoiceSignalPackets.makeVoiceSignalPacketGlobal(voicePlayers.values()); + for (EntityPlayerMP userCon : voicePlayers.values()) { + if (!user.equals(userCon.getUniqueID())) { + userCon.playerNetServerHandler.sendPacket(new S3FPacketCustomPayload(CHANNEL, + new PacketBuffer(Unpooled.buffer(voicePlayersPkt, voicePlayersPkt.length) + .writerIndex(voicePlayersPkt.length)))); + } + } + } + byte[] userDisconnectPacket = null; + Iterator pairsItr = voicePairs.iterator(); + while (pairsItr.hasNext()) { + VoicePair voicePair = pairsItr.next(); + EaglercraftUUID target = null; + if (voicePair.uuid1.equals(user)) { + target = voicePair.uuid2; + } else if (voicePair.uuid2.equals(user)) { + target = voicePair.uuid1; + } + if (target != null) { + pairsItr.remove(); + if (voicePlayers.size() > 0) { + EntityPlayerMP conn = voicePlayers.get(target); + if (conn != null) { + if (userDisconnectPacket == null) { + userDisconnectPacket = IntegratedVoiceSignalPackets.makeVoiceSignalPacketDisconnect(user); + } + conn.playerNetServerHandler.sendPacket(new S3FPacketCustomPayload(CHANNEL, + new PacketBuffer(Unpooled.buffer(userDisconnectPacket, userDisconnectPacket.length) + .writerIndex(userDisconnectPacket.length)))); + } + } + } + } + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/voice/IntegratedVoiceSignalPackets.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/voice/IntegratedVoiceSignalPackets.java new file mode 100644 index 0000000..017916b --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/voice/IntegratedVoiceSignalPackets.java @@ -0,0 +1,198 @@ +package net.lax1dude.eaglercraft.v1_8.sp.server.voice; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Collection; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.lax1dude.eaglercraft.v1_8.netty.ByteBuf; +import net.lax1dude.eaglercraft.v1_8.netty.Unpooled; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.PacketBuffer; + +/** + * 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 IntegratedVoiceSignalPackets { + + static final int VOICE_SIGNAL_ALLOWED = 0; + static final int VOICE_SIGNAL_REQUEST = 0; + static final int VOICE_SIGNAL_CONNECT = 1; + static final int VOICE_SIGNAL_DISCONNECT = 2; + static final int VOICE_SIGNAL_ICE = 3; + static final int VOICE_SIGNAL_DESC = 4; + static final int VOICE_SIGNAL_GLOBAL = 5; + + public static void processPacket(PacketBuffer buffer, EntityPlayerMP sender, IntegratedVoiceService voiceService) throws IOException { + int packetId = -1; + if(buffer.readableBytes() == 0) { + throw new IOException("Zero-length packet recieved"); + } + try { + packetId = buffer.readUnsignedByte(); + switch(packetId) { + case VOICE_SIGNAL_REQUEST: { + voiceService.handleVoiceSignalPacketTypeRequest(buffer.readUuid(), sender); + break; + } + case VOICE_SIGNAL_CONNECT: { + voiceService.handleVoiceSignalPacketTypeConnect(sender); + break; + } + case VOICE_SIGNAL_ICE: { + voiceService.handleVoiceSignalPacketTypeICE(buffer.readUuid(), buffer.readStringFromBuffer(32767), sender); + break; + } + case VOICE_SIGNAL_DESC: { + voiceService.handleVoiceSignalPacketTypeDesc(buffer.readUuid(), buffer.readStringFromBuffer(32767), sender); + break; + } + case VOICE_SIGNAL_DISCONNECT: { + voiceService.handleVoiceSignalPacketTypeDisconnect(buffer.readableBytes() > 0 ? buffer.readUuid() : null, sender); + break; + } + default: { + throw new IOException("Unknown packet type " + packetId); + } + } + if(buffer.readableBytes() > 0) { + throw new IOException("Voice packet is too long!"); + } + }catch(IOException ex) { + throw ex; + }catch(Throwable t) { + throw new IOException("Unhandled exception handling voice packet type " + packetId, t); + } + } + + static byte[] makeVoiceSignalPacketAllowed(boolean allowed, String[] iceServers) { + if (iceServers == null) { + byte[] ret = new byte[2]; + ByteBuf wrappedBuffer = Unpooled.buffer(ret, ret.length); + wrappedBuffer.writeByte(VOICE_SIGNAL_ALLOWED); + wrappedBuffer.writeBoolean(allowed); + return ret; + } + byte[][] iceServersBytes = new byte[iceServers.length][]; + int totalLen = 2 + PacketBuffer.getVarIntSize(iceServers.length); + for(int i = 0; i < iceServers.length; ++i) { + byte[] b = iceServersBytes[i] = iceServers[i].getBytes(StandardCharsets.UTF_8); + totalLen += PacketBuffer.getVarIntSize(b.length) + b.length; + } + byte[] ret = new byte[totalLen]; + PacketBuffer wrappedBuffer = new PacketBuffer(Unpooled.buffer(ret, ret.length)); + wrappedBuffer.writeByte(VOICE_SIGNAL_ALLOWED); + wrappedBuffer.writeBoolean(allowed); + wrappedBuffer.writeVarIntToBuffer(iceServersBytes.length); + for(int i = 0; i < iceServersBytes.length; ++i) { + byte[] b = iceServersBytes[i]; + wrappedBuffer.writeVarIntToBuffer(b.length); + wrappedBuffer.writeBytes(b); + } + return ret; + } + + static byte[] makeVoiceSignalPacketGlobal(Collection users) { + int cnt = users.size(); + byte[][] displayNames = new byte[cnt][]; + int i = 0; + for(EntityPlayerMP user : users) { + String name = user.getName(); + if(name.length() > 16) name = name.substring(0, 16); + displayNames[i++] = name.getBytes(StandardCharsets.UTF_8); + } + int totalLength = 1 + PacketBuffer.getVarIntSize(cnt) + (cnt << 4); + for(i = 0; i < cnt; ++i) { + totalLength += PacketBuffer.getVarIntSize(displayNames[i].length) + displayNames[i].length; + } + byte[] ret = new byte[totalLength]; + PacketBuffer wrappedBuffer = new PacketBuffer(Unpooled.buffer(ret, ret.length)); + wrappedBuffer.writeByte(VOICE_SIGNAL_GLOBAL); + wrappedBuffer.writeVarIntToBuffer(cnt); + for(EntityPlayerMP user : users) { + wrappedBuffer.writeUuid(user.getUniqueID()); + } + for(i = 0; i < cnt; ++i) { + wrappedBuffer.writeVarIntToBuffer(displayNames[i].length); + wrappedBuffer.writeBytes(displayNames[i]); + } + return ret; + } + + static PacketBuffer makeVoiceSignalPacketConnect(EaglercraftUUID player, boolean offer) { + byte[] ret = new byte[18]; + PacketBuffer wrappedBuffer = new PacketBuffer(Unpooled.buffer(ret, ret.length)); + wrappedBuffer.writeByte(VOICE_SIGNAL_CONNECT); + wrappedBuffer.writeUuid(player); + wrappedBuffer.writeBoolean(offer); + return wrappedBuffer; + } + + static byte[] makeVoiceSignalPacketConnectAnnounce(EaglercraftUUID player) { + byte[] ret = new byte[17]; + PacketBuffer wrappedBuffer = new PacketBuffer(Unpooled.buffer(ret, ret.length)); + wrappedBuffer.writeByte(VOICE_SIGNAL_CONNECT); + wrappedBuffer.writeUuid(player); + return ret; + } + + static byte[] makeVoiceSignalPacketDisconnect(EaglercraftUUID player) { + if(player == null) { + return new byte[] { (byte)VOICE_SIGNAL_DISCONNECT }; + } + byte[] ret = new byte[17]; + PacketBuffer wrappedBuffer = new PacketBuffer(Unpooled.buffer(ret, ret.length)); + wrappedBuffer.writeByte(VOICE_SIGNAL_DISCONNECT); + wrappedBuffer.writeUuid(player); + return ret; + } + + static PacketBuffer makeVoiceSignalPacketDisconnectPB(EaglercraftUUID player) { + if(player == null) { + byte[] ret = new byte[1]; + PacketBuffer wrappedBuffer = new PacketBuffer(Unpooled.buffer(ret, ret.length)); + wrappedBuffer.writeByte(VOICE_SIGNAL_DISCONNECT); + return wrappedBuffer; + } + byte[] ret = new byte[17]; + PacketBuffer wrappedBuffer = new PacketBuffer(Unpooled.buffer(ret, ret.length)); + wrappedBuffer.writeByte(VOICE_SIGNAL_DISCONNECT); + wrappedBuffer.writeUuid(player); + return wrappedBuffer; + } + + static PacketBuffer makeVoiceSignalPacketICE(EaglercraftUUID player, String str) { + byte[] strBytes = str.getBytes(StandardCharsets.UTF_8); + byte[] ret = new byte[17 + PacketBuffer.getVarIntSize(strBytes.length) + strBytes.length]; + PacketBuffer wrappedBuffer = new PacketBuffer(Unpooled.buffer(ret, ret.length)); + wrappedBuffer.writeByte(VOICE_SIGNAL_ICE); + wrappedBuffer.writeUuid(player); + wrappedBuffer.writeVarIntToBuffer(strBytes.length); + wrappedBuffer.writeBytes(strBytes); + return wrappedBuffer; + } + + static PacketBuffer makeVoiceSignalPacketDesc(EaglercraftUUID player, String str) { + byte[] strBytes = str.getBytes(StandardCharsets.UTF_8); + byte[] ret = new byte[17 + PacketBuffer.getVarIntSize(strBytes.length) + strBytes.length]; + PacketBuffer wrappedBuffer = new PacketBuffer(Unpooled.buffer(ret, ret.length)); + wrappedBuffer.writeByte(VOICE_SIGNAL_DESC); + wrappedBuffer.writeUuid(player); + wrappedBuffer.writeVarIntToBuffer(strBytes.length); + wrappedBuffer.writeBytes(strBytes); + return wrappedBuffer; + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateCheckerOverlay.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateCheckerOverlay.java index 0e1cc0c..4379bae 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateCheckerOverlay.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateCheckerOverlay.java @@ -41,6 +41,8 @@ public class GuiUpdateCheckerOverlay extends Gui { private int width; private int height; + private int totalHeightOffset = 0; + private boolean isIngame; private GuiScreen backScreen; @@ -61,10 +63,10 @@ public class GuiUpdateCheckerOverlay extends Gui { this.mc = mc; this.width = w; this.height = h; - checkForUpdatesButton = new GuiButton(0, w - 150, 0, 150, 20, I18n.format("update.button") + " " + I18n.format(mc.gameSettings.enableUpdateSvc ? "gui.yes" : "gui.no")); - startDownloadButton = new GuiButton(1, w - 115, 0, 115, 20, I18n.format("update.startDownload")); - viewAllUpdatesButton = new GuiButton(2, w - 115, 0, 115, 20, I18n.format("update.viewAll", 0)); - dismissUpdatesButton = new GuiButton(3, w - 115, 0, 115, 20, I18n.format("update.dismiss")); + checkForUpdatesButton = new GuiButton(0, 0, 0, 150, 20, I18n.format("update.button") + " " + I18n.format(mc.gameSettings.enableUpdateSvc ? "gui.yes" : "gui.no")); + startDownloadButton = new GuiButton(1, 1, 0, 115, 20, I18n.format("update.startDownload")); + viewAllUpdatesButton = new GuiButton(2, 1, 0, 115, 20, I18n.format("update.viewAll", 0)); + dismissUpdatesButton = new GuiButton(3, 1, 0, 115, 20, I18n.format("update.dismiss")); } public void drawScreen(int mx, int my, float partialTicks) { @@ -81,6 +83,7 @@ public class GuiUpdateCheckerOverlay extends Gui { startDownloadButton.visible = false; viewAllUpdatesButton.visible = false; dismissUpdatesButton.visible = false; + totalHeightOffset = 0; int i = UpdateService.getAvailableUpdates().size(); boolean shownSP = i > 0 || !mc.isSingleplayer() || LANServerController.isHostingLAN(); @@ -95,7 +98,7 @@ public class GuiUpdateCheckerOverlay extends Gui { dismissUpdatesButton.visible = true; viewAllUpdatesButton.displayString = I18n.format("update.viewAll", i); str = I18n.format("update.found"); - mc.fontRendererObj.drawStringWithShadow(str, width - mc.fontRendererObj.getStringWidth(str) - 3, 22, 0xFFFFAA); + mc.fontRendererObj.drawStringWithShadow(str, 3, 22, 0xFFFFAA); int embedY = 35; int embedWidth = 115; @@ -109,7 +112,7 @@ public class GuiUpdateCheckerOverlay extends Gui { } GlStateManager.pushMatrix(); - GlStateManager.translate(width - embedWidth - 1, embedY, 0.0f); + GlStateManager.translate(1.0f, embedY, 0.0f); GlStateManager.scale(0.75f, 0.75f, 0.75f); int embedHeight2 = (int)(embedHeight / 0.75f); @@ -143,16 +146,20 @@ public class GuiUpdateCheckerOverlay extends Gui { startDownloadButton.yPosition = embedHeight + embedY + 5; viewAllUpdatesButton.yPosition = startDownloadButton.yPosition + 22; dismissUpdatesButton.yPosition = viewAllUpdatesButton.yPosition + 22; + totalHeightOffset = dismissUpdatesButton.yPosition + 20; GlStateManager.popMatrix(); }else if(isIngame) { if(shownSP) { str = I18n.format("update.noneNew"); - mc.fontRendererObj.drawString(str, width - mc.fontRendererObj.getStringWidth(str) - 3, 22, 0xDDDDDD); + mc.fontRendererObj.drawString(str, 3, 22, 0xDDDDDD); if(i > 0) { viewAllUpdatesButton.yPosition = 40; viewAllUpdatesButton.visible = true; viewAllUpdatesButton.displayString = I18n.format("update.viewAll", i); + totalHeightOffset = 60; + }else { + totalHeightOffset = 32; } } } @@ -173,23 +180,23 @@ public class GuiUpdateCheckerOverlay extends Gui { viewAllUpdatesButton.visible = false; dismissUpdatesButton.visible = false; GlStateManager.pushMatrix(); - GlStateManager.translate(width, isIngame ? 0.0f : 10.0f, 0.0f); + GlStateManager.translate(1.0f, isIngame ? 0.0f : 18.0f, 0.0f); String str = I18n.format("update.downloading"); - mc.fontRendererObj.drawStringWithShadow(str, -mc.fontRendererObj.getStringWidth(str) - 2, 2, 0xFFFFAA); + mc.fontRendererObj.drawStringWithShadow(str, 2, 2, 0xFFFFAA); GlStateManager.translate(0.0f, 14.0f, 0.0f); GlStateManager.scale(0.75f, 0.75f, 0.75f); if(!StringUtils.isAllBlank(progressState.statusString1)) { str = progressState.statusString1; - mc.fontRendererObj.drawStringWithShadow(str, -mc.fontRendererObj.getStringWidth(str) - 3, 0, 0xFFFFFF); + mc.fontRendererObj.drawStringWithShadow(str, 3, 0, 0xFFFFFF); } int cc = isIngame ? 0xBBBBBB : 0xFFFFFF; if(!StringUtils.isAllBlank(progressState.statusString2)) { str = progressState.statusString2; - mc.fontRendererObj.drawStringWithShadow(str, -mc.fontRendererObj.getStringWidth(str) - 3, 11, cc); + mc.fontRendererObj.drawStringWithShadow(str, 3, 11, cc); } - int progX1 = -135; + int progX1 = 3; int progY1 = 22; - int progX2 = -3; + int progX2 = 135; int progY2 = 32; float prog = progressState.progressBar; if(prog >= 0.0f) { @@ -202,6 +209,7 @@ public class GuiUpdateCheckerOverlay extends Gui { drawGradientRect(progX1, progY1 + 1, progX1 + 1, progY2 - 1, 0xFF000000, 0xFF000000); drawGradientRect(progX2 - 1, progY1 + 1, progX2, progY2 - 1, 0xFF000000, 0xFF000000); } + totalHeightOffset = 32; if(!StringUtils.isAllBlank(progressState.statusString3)) { GlStateManager.translate(0.0f, progY2 + 2, 0.0f); GlStateManager.scale(0.66f, 0.66f, 0.66f); @@ -209,10 +217,12 @@ public class GuiUpdateCheckerOverlay extends Gui { List wrappedURL = mc.fontRendererObj.listFormattedStringToWidth(str, (int)((progX2 - progX1) * 1.5f)); for(int i = 0, l = wrappedURL.size(); i < l; ++i) { str = wrappedURL.get(i); - mc.fontRendererObj.drawStringWithShadow(str, -mc.fontRendererObj.getStringWidth(str) - 5, i * 11, cc); + mc.fontRendererObj.drawStringWithShadow(str, 5, i * 11, cc); } + totalHeightOffset += (int)(wrappedURL.size() * 5.5f); } GlStateManager.popMatrix(); + } public void mouseClicked(int mx, int my, int btn) { @@ -244,4 +254,8 @@ public class GuiUpdateCheckerOverlay extends Gui { } } } + + public int getSharedWorldInfoYOffset() { + return totalHeightOffset; + } } diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelPeerState.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelPeerState.java new file mode 100644 index 0000000..0b1ff09 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelPeerState.java @@ -0,0 +1,20 @@ +package net.lax1dude.eaglercraft.v1_8.voice; + +/** + * Copyright (c) 2024 ayunami2000. 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 enum EnumVoiceChannelPeerState { + FAILED, SUCCESS, LOADING; +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelReadyState.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelReadyState.java new file mode 100644 index 0000000..c470876 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelReadyState.java @@ -0,0 +1,20 @@ +package net.lax1dude.eaglercraft.v1_8.voice; + +/** + * Copyright (c) 2024 ayunami2000. 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 enum EnumVoiceChannelReadyState { + NONE, ABORTED, DEVICE_INITIALIZED; +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelStatus.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelStatus.java new file mode 100644 index 0000000..8a6d737 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelStatus.java @@ -0,0 +1,20 @@ +package net.lax1dude.eaglercraft.v1_8.voice; + +/** + * 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. + * + */ +public enum EnumVoiceChannelStatus { + DISCONNECTED, CONNECTING, CONNECTED, UNAVAILABLE; +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelType.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelType.java new file mode 100644 index 0000000..d035edb --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelType.java @@ -0,0 +1,20 @@ +package net.lax1dude.eaglercraft.v1_8.voice; + +/** + * 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. + * + */ +public enum EnumVoiceChannelType { + NONE, GLOBAL, PROXIMITY; +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/ExpiringSet.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/ExpiringSet.java new file mode 100644 index 0000000..79af3a2 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/ExpiringSet.java @@ -0,0 +1,84 @@ +package net.lax1dude.eaglercraft.v1_8.voice; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; + +/** + * Copyright (c) 2022 ayunami2000. 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 ExpiringSet extends HashSet { + private final long expiration; + private final ExpiringEvent event; + + private final Map timestamps = new HashMap<>(); + + public ExpiringSet(long expiration) { + this.expiration = expiration; + this.event = null; + } + + public ExpiringSet(long expiration, ExpiringEvent event) { + this.expiration = expiration; + this.event = event; + } + + public interface ExpiringEvent { + void onExpiration(T item); + } + + public void checkForExpirations() { + Iterator iterator = this.timestamps.keySet().iterator(); + long now = System.currentTimeMillis(); + while (iterator.hasNext()) { + T element = iterator.next(); + if (super.contains(element)) { + if (this.timestamps.get(element) + this.expiration < now) { + if (this.event != null) this.event.onExpiration(element); + iterator.remove(); + super.remove(element); + } + } else { + iterator.remove(); + super.remove(element); + } + } + } + + public boolean add(T o) { + checkForExpirations(); + boolean success = super.add(o); + if (success) timestamps.put(o, System.currentTimeMillis()); + return success; + } + + public boolean remove(Object o) { + checkForExpirations(); + boolean success = super.remove(o); + if (success) timestamps.remove(o); + return success; + } + + public void clear() { + this.timestamps.clear(); + super.clear(); + } + + public boolean contains(Object o) { + checkForExpirations(); + return super.contains(o); + } +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceMenu.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceMenu.java new file mode 100644 index 0000000..42f029a --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceMenu.java @@ -0,0 +1,772 @@ +package net.lax1dude.eaglercraft.v1_8.voice; + +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; + +import java.util.List; +import java.util.Set; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.lax1dude.eaglercraft.v1_8.Keyboard; +import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.lax1dude.eaglercraft.v1_8.sp.gui.GuiSlider2; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; + +/** + * Copyright (c) 2022-2024 lax1dude, ayunami2000. 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 GuiVoiceMenu extends Gui { + + public class AbortedException extends RuntimeException { + } + + private static final ResourceLocation voiceGuiIcons = new ResourceLocation("eagler:gui/eagler_gui.png"); + + protected final GuiScreen parent; + + protected Minecraft mc; + protected FontRenderer fontRendererObj; + protected int width; + protected int height; + + protected int voiceButtonOFFposX; + protected int voiceButtonOFFposY; + protected int voiceButtonOFFposW; + protected int voiceButtonOFFposH; + + protected int voiceButtonRADIUSposX; + protected int voiceButtonRADIUSposY; + protected int voiceButtonRADIUSposW; + protected int voiceButtonRADIUSposH; + + protected int voiceButtonGLOBALposX; + protected int voiceButtonGLOBALposY; + protected int voiceButtonGLOBALposW; + protected int voiceButtonGLOBALposH; + + protected int voiceScreenButtonOFFposX; + protected int voiceScreenButtonOFFposY; + protected int voiceScreenButtonOFFposW; + protected int voiceScreenButtonOFFposH; + + protected int voiceScreenButtonRADIUSposX; + protected int voiceScreenButtonRADIUSposY; + protected int voiceScreenButtonRADIUSposW; + protected int voiceScreenButtonRADIUSposH; + + protected int voiceScreenButtonGLOBALposX; + protected int voiceScreenButtonGLOBALposY; + protected int voiceScreenButtonGLOBALposW; + protected int voiceScreenButtonGLOBALposH; + + protected int voiceScreenButtonChangeRadiusposX; + protected int voiceScreenButtonChangeRadiusposY; + protected int voiceScreenButtonChangeRadiusposW; + protected int voiceScreenButtonChangeRadiusposH; + + protected int voiceScreenVolumeIndicatorX; + protected int voiceScreenVolumeIndicatorY; + protected int voiceScreenVolumeIndicatorW; + protected int voiceScreenVolumeIndicatorH; + + protected boolean showSliderBlocks = false; + protected boolean showSliderVolume = false; + protected boolean showPTTKeyConfig = false; + protected int showNewPTTKey = 0; + protected GuiSlider2 sliderBlocks = null; + protected GuiSlider2 sliderListenVolume = null; + protected GuiSlider2 sliderSpeakVolume = null; + + protected GuiButton applyRadiusButton = null; + protected GuiButton applyVolumeButton = null; + protected GuiButton noticeContinueButton = null; + protected GuiButton noticeCancelButton = null; + + protected static boolean showingCompatWarning = false; + protected static boolean showCompatWarning = true; + + protected static boolean showingTrackingWarning = false; + protected static boolean showTrackingWarning = true; + + protected static EnumVoiceChannelType continueChannel = null; + + public GuiVoiceMenu(GuiScreen parent) { + this.parent = parent; + } + + public void setResolution(Minecraft mc, int w, int h) { + this.mc = mc; + this.fontRendererObj = mc.fontRendererObj; + this.width = w; + this.height = h; + initGui(); + } + + public void initGui() { + this.sliderBlocks = new GuiSlider2(-1, (width - 150) / 2, height / 3 + 20, 150, 20, (VoiceClientController.getVoiceProximity() - 5) / 17.0f, 1.0f) { + public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3) { + if(super.mousePressed(par1Minecraft, par2, par3)) { + this.displayString = "" + (int)((sliderValue * 17.0f) + 5.0f) + " Blocks"; + return true; + }else { + return false; + } + } + public void mouseDragged(Minecraft par1Minecraft, int par2, int par3) { + super.mouseDragged(par1Minecraft, par2, par3); + this.displayString = "" + (int)((sliderValue * 17.0f) + 5.0f) + " Blocks"; + } + }; + sliderBlocks.displayString = "" + VoiceClientController.getVoiceProximity() + " Blocks"; + this.sliderListenVolume = new GuiSlider2(-1, (width - 150) / 2, height / 3 + 10, 150, 20, VoiceClientController.getVoiceListenVolume(), 1.0f); + this.sliderSpeakVolume = new GuiSlider2(-1, (width - 150) / 2, height / 3 + 56, 150, 20, VoiceClientController.getVoiceSpeakVolume(), 1.0f); + + applyRadiusButton = new GuiButton(2, (width - 150) / 2, height / 3 + 49, 150, 20, I18n.format("voice.apply")); + applyVolumeButton = new GuiButton(3, (width - 150) / 2, height / 3 + 90, 150, 20, I18n.format("voice.apply")); + noticeContinueButton = new GuiButton(5, (width - 150) / 2, height / 3 + 60, 150, 20, I18n.format("voice.unsupportedWarning10")); + noticeCancelButton = new GuiButton(6, (width - 150) / 2, height / 3 + 90, 150, 20, I18n.format("voice.unsupportedWarning11")); + applyRadiusButton.visible = applyVolumeButton.visible = noticeContinueButton.visible = noticeCancelButton.visible = false; + } + + private void drawButtons(int mx, int my, float partialTicks) { + applyRadiusButton.drawButton(mc, mx, my); + applyVolumeButton.drawButton(mc, mx, my); + noticeContinueButton.drawButton(mc, mx, my); + noticeCancelButton.drawButton(mc, mx, my); + } + + public void drawScreen(int mx, int my, float partialTicks) { + String txt = I18n.format("voice.title"); + drawString(fontRendererObj, txt, width - 5 - fontRendererObj.getStringWidth(txt), 5, 0xFFCC22); + + applyRadiusButton.visible = showSliderBlocks; + applyVolumeButton.visible = showSliderVolume; + + if(showSliderBlocks || showSliderVolume || showPTTKeyConfig) { + + drawRect(0, 0, this.width, this.height, 0xB0101010); + + if(showSliderBlocks) { + + drawRect(width / 2 - 86, height / 4 - 1, this.width / 2 + 86, height / 3 + 64 + height / 16, 0xFFDDDDDD); + drawRect(width / 2 - 85, height / 4 + 0, this.width / 2 + 85, height / 3 + 63 + height / 16, 0xFF333333); + + drawCenteredString(this.fontRendererObj, I18n.format("voice.radiusTitle"), this.width / 2, height / 4 + 9, 16777215); + drawString(this.fontRendererObj, I18n.format("voice.radiusLabel"), (this.width - 150) / 2 + 3, height / 3 + 6, 0xCCCCCC); + sliderBlocks.drawButton(mc, mx, my); + + }else if(showSliderVolume) { + + drawRect(width / 2 - 86, height / 4 - 11, this.width / 2 + 86, height / 3 + 104 + height / 16, 0xFFDDDDDD); + drawRect(width / 2 - 85, height / 4 - 10, this.width / 2 + 85, height / 3 + 103 + height / 16, 0xFF333333); + + drawCenteredString(this.fontRendererObj, I18n.format("voice.volumeTitle"), this.width / 2, height / 4 - 1, 16777215); + drawString(this.fontRendererObj, I18n.format("voice.volumeListen"), (this.width - 150) / 2 + 3, height / 3 - 4, 0xCCCCCC); + sliderListenVolume.drawButton(mc, mx, my); + + drawString(this.fontRendererObj, I18n.format("voice.volumeSpeak"), (this.width - 150) / 2 + 3, height / 3 + 42, 0xCCCCCC); + sliderSpeakVolume.drawButton(mc, mx, my); + + }else if(showPTTKeyConfig) { + + drawRect(width / 2 - 86, height / 3 - 10, this.width / 2 + 86, height / 3 + 35, 0xFFDDDDDD); + drawRect(width / 2 - 85, height / 3 - 9, this.width / 2 + 85, height / 3 + 34, 0xFF333333); + + if(showNewPTTKey > 0) { + GlStateManager.pushMatrix(); + GlStateManager.translate(this.width / 2, height / 3 + 5, 0.0f); + GlStateManager.scale(2.0f, 2.0f, 2.0f); + drawCenteredString(this.fontRendererObj, Keyboard.getKeyName(mc.gameSettings.voicePTTKey), 0, 0, 0xFFCC11); + GlStateManager.popMatrix(); + }else { + drawCenteredString(this.fontRendererObj, I18n.format("voice.pttChangeDesc"), this.width / 2, height / 3 + 8, 16777215); + } + } + + drawButtons(mx, my, partialTicks); + throw new AbortedException(); + } + + GlStateManager.pushMatrix(); + + GlStateManager.translate(width - 6, 15, 0.0f); + GlStateManager.scale(0.75f, 0.75f, 0.75f); + + if(!VoiceClientController.isClientSupported()) { + txt = I18n.format("voice.titleVoiceUnavailable"); + drawString(fontRendererObj, txt, 1 - fontRendererObj.getStringWidth(txt), 6, 0xFF7777); + txt = I18n.format("voice.titleVoiceBrowserError"); + drawString(fontRendererObj, txt, 1 - fontRendererObj.getStringWidth(txt), 19, 0xAA4444); + GlStateManager.popMatrix(); + return; + } + + if(!VoiceClientController.isServerSupported()) { + txt = I18n.format("voice.titleNoVoice"); + drawString(fontRendererObj, txt, 1 - fontRendererObj.getStringWidth(txt), 5, 0xFF7777); + GlStateManager.popMatrix(); + return; + } + + int xo = 0; + // this feature is optional + //if(VoiceClientController.voiceRelayed()) { + // txt = I18n.format("voice.warning1"); + // drawString(fontRendererObj, txt, 1 - fontRendererObj.getStringWidth(txt), 8, 0xBB9999); + // txt = I18n.format("voice.warning2"); + // drawString(fontRendererObj, txt, 1 - fontRendererObj.getStringWidth(txt), 18, 0xBB9999); + // txt = I18n.format("voice.warning3"); + // drawString(fontRendererObj, txt, 1 - fontRendererObj.getStringWidth(txt), 28, 0xBB9999); + // xo = 43; + // GlStateManager.translate(0.0f, xo, 0.0f); + //} + + EnumVoiceChannelStatus status = VoiceClientController.getVoiceStatus(); + EnumVoiceChannelType channel = VoiceClientController.getVoiceChannel(); + + boolean flag = false; + + if(channel == EnumVoiceChannelType.NONE) { + flag = true; + }else { + if(status == EnumVoiceChannelStatus.CONNECTED) { + + if(channel == EnumVoiceChannelType.PROXIMITY) { + txt = I18n.format("voice.connectedRadius").replace("$radius$", "" + VoiceClientController.getVoiceProximity()).replace("$f$", ""); + int w = fontRendererObj.getStringWidth(txt); + int xx = width - 5 - (w * 3 / 4); + int yy = 15 + (xo * 3 / 4); + voiceScreenButtonChangeRadiusposX = xx; + voiceScreenButtonChangeRadiusposY = yy; + voiceScreenButtonChangeRadiusposW = width - 3 - xx; + voiceScreenButtonChangeRadiusposH = 12; + if(mx >= xx && my >= yy && mx < xx + voiceScreenButtonChangeRadiusposW && my < yy + 12) { + txt = I18n.format("voice.connectedRadius").replace("$radius$", "" + VoiceClientController.getVoiceProximity()) + .replace("$f$", "" + EnumChatFormatting.UNDERLINE) + EnumChatFormatting.RESET; + } + }else { + txt = I18n.format("voice.connectedGlobal"); + } + + voiceScreenVolumeIndicatorX = width - 15 - (104 * 3 / 4); + voiceScreenVolumeIndicatorY = 15 + (xo * 3 / 4) + 30; + voiceScreenVolumeIndicatorW = width - voiceScreenVolumeIndicatorX - 4; + voiceScreenVolumeIndicatorH = 23; + + drawString(fontRendererObj, txt, 1 - fontRendererObj.getStringWidth(txt), 5, 0x66DD66); + + drawRect(-90, 42, 2, 52, 0xFFAAAAAA); + drawRect(-89, 43, 1, 51, 0xFF222222); + + float vol = VoiceClientController.getVoiceListenVolume(); + drawRect(-89, 43, -89 + (int)(vol * 90), 51, 0xFF993322); + + for(float f = 0.07f; f < vol; f += 0.08f) { + int ww = (int)(f * 90); + drawRect(-89 + ww, 43, -89 + ww + 1, 51, 0xFF999999); + } + + drawRect(-90, 57, 2, 67, 0xFFAAAAAA); + drawRect(-89, 58, 1, 66, 0xFF222222); + + vol = VoiceClientController.getVoiceSpeakVolume(); + drawRect(-89, 58, -89 + (int)(vol * 90), 66, 0xFF993322); + + for(float f = 0.07f; f < vol; f += 0.08f) { + int ww = (int)(f * 90); + drawRect(-89 + ww, 58, -89 + ww + 1, 66, 0xFF999999); + } + + mc.getTextureManager().bindTexture(voiceGuiIcons); + GlStateManager.color(0.7f, 0.7f, 0.7f, 1.0f); + + GlStateManager.pushMatrix(); + GlStateManager.translate(-104.0f, 41.5f, 0.0f); + GlStateManager.scale(0.7f, 0.7f, 0.7f); + drawTexturedModalRect(0, 0, 64, 144, 16, 16); + GlStateManager.popMatrix(); + + GlStateManager.pushMatrix(); + GlStateManager.translate(-104.0f, 56.5f, 0.0f); + GlStateManager.scale(0.7f, 0.7f, 0.7f); + if((mc.currentScreen == null || !mc.currentScreen.blockPTTKey()) && Keyboard.isKeyDown(mc.gameSettings.voicePTTKey)) { + GlStateManager.color(0.9f, 0.4f, 0.4f, 1.0f); + drawTexturedModalRect(0, 0, 64, 64, 16, 16); + }else { + drawTexturedModalRect(0, 0, 64, 32, 16, 16); + } + GlStateManager.popMatrix(); + + txt = I18n.format("voice.ptt", Keyboard.getKeyName(mc.gameSettings.voicePTTKey)); + drawString(fontRendererObj, txt, 1 - fontRendererObj.getStringWidth(txt) - 10, 76, 0x66DD66); + + mc.getTextureManager().bindTexture(voiceGuiIcons); + GlStateManager.color(0.4f, 0.9f, 0.4f, 1.0f); + GlStateManager.pushMatrix(); + GlStateManager.translate(-7.0f, 74.5f, 0.0f); + GlStateManager.scale(0.35f, 0.35f, 0.35f); + drawTexturedModalRect(0, 0, 32, 224, 32, 32); + GlStateManager.popMatrix(); + + txt = I18n.format("voice.playersListening"); + + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0f, 98.0f, 0.0f); + GlStateManager.scale(1.2f, 1.2f, 1.2f); + drawString(fontRendererObj, txt, -fontRendererObj.getStringWidth(txt), 0, 0xFF7777); + GlStateManager.popMatrix(); + + List playersToRender = VoiceClientController.getVoiceRecent(); + + if(playersToRender.size() > 0) { + EaglercraftUUID uuid; + Set playersSpeaking = VoiceClientController.getVoiceSpeaking(); + Set playersMuted = VoiceClientController.getVoiceMuted(); + for(int i = 0, l = playersToRender.size(); i < l; ++i) { + uuid = playersToRender.get(i); + txt = VoiceClientController.getVoiceUsername(uuid); + + boolean muted = playersMuted.contains(uuid); + boolean speaking = !muted && playersSpeaking.contains(uuid); + + int mhy = voiceScreenVolumeIndicatorY + voiceScreenVolumeIndicatorH + 33 + i * 9; + boolean hovered = mx >= voiceScreenVolumeIndicatorX - 3 && my >= mhy && mx < voiceScreenVolumeIndicatorX + voiceScreenVolumeIndicatorW + 2 && my < mhy + 9; + float cm = hovered ? 1.5f : 1.0f; + mc.getTextureManager().bindTexture(voiceGuiIcons); + + GlStateManager.pushMatrix(); + GlStateManager.translate(-100.0f, 115.0f + i * 12.0f, 0.0f); + GlStateManager.scale(0.78f, 0.78f, 0.78f); + + if(muted) { + GlStateManager.color(1.0f * cm, 0.2f * cm, 0.2f * cm, 1.0f); + drawTexturedModalRect(0, 0, 64, 208, 16, 16); + }else if(speaking) { + GlStateManager.color(1.0f * cm, 1.0f * cm, 1.0f * cm, 1.0f); + drawTexturedModalRect(0, 0, 64, 176, 16, 16); + }else { + GlStateManager.color(0.65f * cm, 0.65f * cm, 0.65f * cm, 1.0f); + drawTexturedModalRect(0, 0, 64, 144, 16, 16); + } + + GlStateManager.popMatrix(); + + if(muted) { + drawString(fontRendererObj, txt, -84, 117 + i * 12, attenuate(0xCC4444, cm)); + }else if(speaking) { + drawString(fontRendererObj, txt, -84, 117 + i * 12, attenuate(0xCCCCCC, cm)); + }else { + drawString(fontRendererObj, txt, -84, 117 + i * 12, attenuate(0x999999, cm)); + } + + } + }else { + txt = "(none)"; + drawString(fontRendererObj, txt, -fontRendererObj.getStringWidth(txt), 112, 0xAAAAAA); + } + + }else if(status == EnumVoiceChannelStatus.CONNECTING) { + float fadeTimer = MathHelper.sin((float)((System.currentTimeMillis() % 700l) * 0.0014d) * 3.14159f) * 0.35f + 0.3f; + txt = I18n.format("voice.connecting"); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + drawString(fontRendererObj, txt, 1 - fontRendererObj.getStringWidth(txt), 5, (0xFFDD77 | ((int)(Math.pow(fadeTimer, 1.0d / 2.2d) * 255.0f) << 24))); + GlStateManager.disableBlend(); + }else if(status == EnumVoiceChannelStatus.UNAVAILABLE) { + txt = I18n.format("voice.unavailable"); + drawString(fontRendererObj, txt, 1 - fontRendererObj.getStringWidth(txt), 5, 0xFF3333); + }else { + flag = true; + } + } + + if(flag) { + txt = I18n.format("voice.notConnected"); + drawString(fontRendererObj, txt, 1 - fontRendererObj.getStringWidth(txt), 5, 0xBB9999); + } + + String OFFstring = I18n.format("voice.off"); + String RADIUSstring = I18n.format("voice.radius"); + String GLOBALstring = I18n.format("voice.global"); + + int OFFwidth = fontRendererObj.getStringWidth(OFFstring); + int RADIUSwidth = fontRendererObj.getStringWidth(RADIUSstring); + int GLOBALwidth = fontRendererObj.getStringWidth(GLOBALstring); + + voiceButtonOFFposX = 0 - OFFwidth - 8 - RADIUSwidth - 8 - GLOBALwidth; + voiceButtonOFFposY = 20; + voiceButtonOFFposW = OFFwidth + 5; + voiceButtonOFFposH = 15; + + voiceScreenButtonOFFposX = voiceButtonOFFposX * 3 / 4 + width - 6; + voiceScreenButtonOFFposY = 15 + (voiceButtonOFFposY + xo) * 3 / 4; + voiceScreenButtonOFFposW = voiceButtonOFFposW * 3 / 4; + voiceScreenButtonOFFposH = voiceButtonOFFposH * 3 / 4; + + voiceButtonRADIUSposX = 0 - RADIUSwidth - 8 - GLOBALwidth; + voiceButtonRADIUSposY = 20; + voiceButtonRADIUSposW = RADIUSwidth + 5; + voiceButtonRADIUSposH = 15; + + voiceScreenButtonRADIUSposX = voiceButtonRADIUSposX * 3 / 4 + width - 6; + voiceScreenButtonRADIUSposY = 15 + (voiceButtonRADIUSposY + xo) * 3 / 4; + voiceScreenButtonRADIUSposW = voiceButtonRADIUSposW * 3 / 4; + voiceScreenButtonRADIUSposH = voiceButtonRADIUSposH * 3 / 4; + + voiceButtonGLOBALposX = 0 - GLOBALwidth; + voiceButtonGLOBALposY = 20; + voiceButtonGLOBALposW = GLOBALwidth + 5; + voiceButtonGLOBALposH = 15; + + voiceScreenButtonGLOBALposX = voiceButtonGLOBALposX * 3 / 4 + width - 6; + voiceScreenButtonGLOBALposY = 15 + (voiceButtonGLOBALposY + xo) * 3 / 4; + voiceScreenButtonGLOBALposW = voiceButtonGLOBALposW * 3 / 4; + voiceScreenButtonGLOBALposH = voiceButtonGLOBALposH * 3 / 4; + + if(channel == EnumVoiceChannelType.NONE) { + drawOutline(voiceButtonOFFposX, voiceButtonOFFposY, voiceButtonOFFposW, voiceButtonOFFposH, 0xFFCCCCCC); + drawRect(voiceButtonOFFposX + 1, voiceButtonOFFposY + 1, voiceButtonOFFposX + voiceButtonOFFposW - 2, + voiceButtonOFFposY + voiceButtonOFFposH - 1, 0xFF222222); + }else if(mx >= voiceScreenButtonOFFposX && my >= voiceScreenButtonOFFposY && mx < voiceScreenButtonOFFposX + + voiceScreenButtonOFFposW && my < voiceScreenButtonOFFposY + voiceScreenButtonOFFposH) { + drawOutline(voiceButtonOFFposX, voiceButtonOFFposY, voiceButtonOFFposW, voiceButtonOFFposH, 0xFF777777); + } + + if(channel == EnumVoiceChannelType.PROXIMITY) { + drawOutline(voiceButtonRADIUSposX, voiceButtonRADIUSposY, voiceButtonRADIUSposW, voiceButtonRADIUSposH, 0xFFCCCCCC); + drawRect(voiceButtonRADIUSposX + 1, voiceButtonRADIUSposY + 1, voiceButtonRADIUSposX + voiceButtonRADIUSposW - 2, + voiceButtonRADIUSposY + voiceButtonRADIUSposH - 1, 0xFF222222); + }else if(mx >= voiceScreenButtonRADIUSposX && my >= voiceScreenButtonRADIUSposY && mx < voiceScreenButtonRADIUSposX + + voiceScreenButtonRADIUSposW && my < voiceScreenButtonRADIUSposY + voiceScreenButtonRADIUSposH) { + drawOutline(voiceButtonRADIUSposX, voiceButtonRADIUSposY, voiceButtonRADIUSposW, voiceButtonRADIUSposH, 0xFF777777); + } + + if(channel == EnumVoiceChannelType.GLOBAL) { + drawOutline(voiceButtonGLOBALposX, voiceButtonGLOBALposY, voiceButtonGLOBALposW, voiceButtonGLOBALposH, 0xFFCCCCCC); + drawRect(voiceButtonGLOBALposX + 1, voiceButtonGLOBALposY + 1, voiceButtonGLOBALposX + voiceButtonGLOBALposW - 2, + voiceButtonGLOBALposY + voiceButtonGLOBALposH - 1, 0xFF222222); + }else if(mx >= voiceScreenButtonGLOBALposX && my >= voiceScreenButtonGLOBALposY && mx < voiceScreenButtonGLOBALposX + + voiceScreenButtonGLOBALposW && my < voiceScreenButtonGLOBALposY + voiceScreenButtonGLOBALposH) { + drawOutline(voiceButtonGLOBALposX, voiceButtonGLOBALposY, voiceButtonGLOBALposW, voiceButtonGLOBALposH, 0xFF777777); + } + + int enabledColor = (status == EnumVoiceChannelStatus.CONNECTED || channel == EnumVoiceChannelType.NONE) ? 0x66DD66 : 0xDDCC66; + int disabledColor = 0xDD4444; + + if(channel != EnumVoiceChannelType.NONE && status == EnumVoiceChannelStatus.UNAVAILABLE) { + enabledColor = disabledColor; + } + + drawString(fontRendererObj, OFFstring, 3 - OFFwidth - 8 - RADIUSwidth - 8 - GLOBALwidth, 24, channel == EnumVoiceChannelType.NONE ? enabledColor : disabledColor); + drawString(fontRendererObj, RADIUSstring, 3 - RADIUSwidth - 8 - GLOBALwidth, 24, channel == EnumVoiceChannelType.PROXIMITY ? enabledColor : disabledColor); + drawString(fontRendererObj, GLOBALstring, 3 - GLOBALwidth, 24, channel == EnumVoiceChannelType.GLOBAL ? enabledColor : disabledColor); + + GlStateManager.popMatrix(); + + if(showingCompatWarning) { + + drawNotice(I18n.format("voice.unsupportedWarning1"), false, I18n.format("voice.unsupportedWarning2"), I18n.format("voice.unsupportedWarning3"), + "", I18n.format("voice.unsupportedWarning4"), I18n.format("voice.unsupportedWarning5"), I18n.format("voice.unsupportedWarning6"), + I18n.format("voice.unsupportedWarning7"), I18n.format("voice.unsupportedWarning8"), I18n.format("voice.unsupportedWarning9")); + + noticeContinueButton.visible = true; + noticeCancelButton.visible = false; + }else if(showingTrackingWarning) { + + drawNotice(I18n.format("voice.ipGrabWarning1"), true, I18n.format("voice.ipGrabWarning2"), I18n.format("voice.ipGrabWarning3"), + I18n.format("voice.ipGrabWarning4"), "", I18n.format("voice.ipGrabWarning5"), I18n.format("voice.ipGrabWarning6"), + I18n.format("voice.ipGrabWarning7"), I18n.format("voice.ipGrabWarning8"), I18n.format("voice.ipGrabWarning9"), + I18n.format("voice.ipGrabWarning10"), I18n.format("voice.ipGrabWarning11"), I18n.format("voice.ipGrabWarning12")); + + noticeContinueButton.visible = true; + noticeCancelButton.visible = true; + }else { + noticeContinueButton.visible = false; + noticeCancelButton.visible = false; + } + + drawButtons(mx, my, partialTicks); + + if(showingCompatWarning || showingTrackingWarning) { + throw new AbortedException(); + } + } + + private void drawNotice(String title, boolean showCancel, String... lines) { + + int widthAccum = 0; + + for(int i = 0; i < lines.length; ++i) { + int w = fontRendererObj.getStringWidth(lines[i]); + if(widthAccum < w) { + widthAccum = w; + } + } + + int margin = 15; + + int x = (width - widthAccum) / 2; + int y = (height - lines.length * 10 - 60 - margin) / 2; + + drawRect(x - margin - 1, y - margin - 1, x + widthAccum + margin + 1, + y + lines.length * 10 + 49 + margin, 0xFFCCCCCC); + drawRect(x - margin, y - margin, x + widthAccum + margin, + y + lines.length * 10 + 48 + margin, 0xFF111111); + + drawCenteredString(fontRendererObj, EnumChatFormatting.BOLD + title, width / 2, y, 0xFF7766); + + for(int i = 0; i < lines.length; ++i) { + drawString(fontRendererObj, lines[i], x, y + i * 10 + 18, 0xDDAAAA); + } + + if(!showCancel) { + noticeContinueButton.width = 150; + noticeContinueButton.xPosition = (width - 150) / 2; + noticeContinueButton.yPosition = y + lines.length * 10 + 29; + }else { + noticeContinueButton.width = widthAccum / 2 - 10; + noticeContinueButton.xPosition = (width - widthAccum) / 2 + widthAccum / 2 + 3; + noticeContinueButton.yPosition = y + lines.length * 10 + 28; + noticeCancelButton.width = widthAccum / 2 - 10; + noticeCancelButton.xPosition = (width - widthAccum) / 2 + 4; + noticeCancelButton.yPosition = y + lines.length * 10 + 28; + } + + } + + public static int attenuate(int cin, float f) { + return attenuate(cin, f, f, f, 1.0f); + } + + public static int attenuate(int cin, float r, float g, float b, float a) { + float var10 = (float) (cin >> 24 & 255) / 255.0F; + float var6 = (float) (cin >> 16 & 255) / 255.0F; + float var7 = (float) (cin >> 8 & 255) / 255.0F; + float var8 = (float) (cin & 255) / 255.0F; + var10 *= a; + var6 *= r; + var7 *= g; + var8 *= b; + if(var10 > 1.0f) { + var10 = 1.0f; + } + if(var6 > 1.0f) { + var6 = 1.0f; + } + if(var7 > 1.0f) { + var7 = 1.0f; + } + if(var8 > 1.0f) { + var8 = 1.0f; + } + return (((int)(var10 * 255.0f) << 24) | ((int)(var6 * 255.0f) << 16) | ((int)(var7 * 255.0f) << 8) | (int)(var8 * 255.0f)); + } + + private void drawOutline(int x, int y, int w, int h, int color) { + drawRect(x, y, x + w, y + 1, color); + drawRect(x + w - 1, y + 1, x + w, y + h - 1, color); + drawRect(x, y + h - 1, x + w, y + h, color); + drawRect(x, y + 1, x + 1, y + h - 1, color); + } + + public void mouseReleased(int par1, int par2, int par3) { + applyRadiusButton.mouseReleased(par1, par2); + applyVolumeButton.mouseReleased(par1, par2); + noticeContinueButton.mouseReleased(par1, par2); + noticeCancelButton.mouseReleased(par1, par2); + if(showSliderBlocks || showSliderVolume) { + if(showSliderBlocks) { + if(par3 == 0) { + sliderBlocks.mouseReleased(par1, par2); + } + }else if(showSliderVolume) { + if(par3 == 0) { + sliderListenVolume.mouseReleased(par1, par2); + sliderSpeakVolume.mouseReleased(par1, par2); + } + } + throw new AbortedException(); + } + } + + public void keyTyped(char par1, int par2) { + if(showSliderBlocks || showSliderVolume || showPTTKeyConfig) { + if(showPTTKeyConfig) { + if(par2 == 1) { + showPTTKeyConfig = false; + }else { + mc.gameSettings.voicePTTKey = par2; + showNewPTTKey = 10; + } + } + throw new AbortedException(); + } + } + + public void mouseClicked(int mx, int my, int button) { + if(showSliderBlocks || showSliderVolume || showPTTKeyConfig || showingCompatWarning || showingTrackingWarning) { + if(showSliderBlocks) { + sliderBlocks.mousePressed(mc, mx, my); + }else if(showSliderVolume) { + sliderListenVolume.mousePressed(mc, mx, my); + sliderSpeakVolume.mousePressed(mc, mx, my); + } + if(button == 0) { + if(applyRadiusButton.mousePressed(mc, mx, my)) actionPerformed(applyRadiusButton); + if(applyVolumeButton.mousePressed(mc, mx, my)) actionPerformed(applyVolumeButton); + if(noticeContinueButton.mousePressed(mc, mx, my)) actionPerformed(noticeContinueButton); + if(noticeCancelButton.mousePressed(mc, mx, my)) actionPerformed(noticeCancelButton); + } + throw new AbortedException(); + } + + EnumVoiceChannelStatus status = VoiceClientController.getVoiceStatus(); + EnumVoiceChannelType channel = VoiceClientController.getVoiceChannel(); + + if(button == 0) { + if(VoiceClientController.isSupported()) { + if(mx >= voiceScreenButtonOFFposX && my >= voiceScreenButtonOFFposY && mx < voiceScreenButtonOFFposX + + voiceScreenButtonOFFposW && my < voiceScreenButtonOFFposY + voiceScreenButtonOFFposH) { + VoiceClientController.setVoiceChannel(EnumVoiceChannelType.NONE); + this.mc.getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); + }else if(mx >= voiceScreenButtonRADIUSposX && my >= voiceScreenButtonRADIUSposY && mx < voiceScreenButtonRADIUSposX + + voiceScreenButtonRADIUSposW && my < voiceScreenButtonRADIUSposY + voiceScreenButtonRADIUSposH) { + + if(showCompatWarning) { + continueChannel = EnumVoiceChannelType.PROXIMITY; + showingCompatWarning = true; + }else if(showTrackingWarning) { + continueChannel = EnumVoiceChannelType.PROXIMITY; + showingTrackingWarning = true; + }else { + VoiceClientController.setVoiceChannel(EnumVoiceChannelType.PROXIMITY); + } + + this.mc.getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); + + }else if(mx >= voiceScreenButtonGLOBALposX && my >= voiceScreenButtonGLOBALposY && mx < voiceScreenButtonGLOBALposX + + voiceScreenButtonGLOBALposW && my < voiceScreenButtonGLOBALposY + voiceScreenButtonGLOBALposH) { + + if(showCompatWarning) { + continueChannel = EnumVoiceChannelType.GLOBAL; + showingCompatWarning = true; + }else if(showTrackingWarning) { + continueChannel = EnumVoiceChannelType.GLOBAL; + showingTrackingWarning = true; + }else { + VoiceClientController.setVoiceChannel(EnumVoiceChannelType.GLOBAL); + } + + this.mc.getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); + + this.mc.getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); + }else if(channel == EnumVoiceChannelType.PROXIMITY && status == EnumVoiceChannelStatus.CONNECTED && mx >= voiceScreenButtonChangeRadiusposX && + my >= voiceScreenButtonChangeRadiusposY && mx < voiceScreenButtonChangeRadiusposX + voiceScreenButtonChangeRadiusposW && + my < voiceScreenButtonChangeRadiusposY + voiceScreenButtonChangeRadiusposH) { + showSliderBlocks = true; + sliderBlocks.sliderValue = (VoiceClientController.getVoiceProximity() - 5) / 17.0f; + this.mc.getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); + }else if(status == EnumVoiceChannelStatus.CONNECTED && channel != EnumVoiceChannelType.NONE && mx >= voiceScreenVolumeIndicatorX && + my >= voiceScreenVolumeIndicatorY && mx < voiceScreenVolumeIndicatorX + voiceScreenVolumeIndicatorW && + my < voiceScreenVolumeIndicatorY + voiceScreenVolumeIndicatorH) { + showSliderVolume = true; + sliderListenVolume.sliderValue = VoiceClientController.getVoiceListenVolume(); + sliderSpeakVolume.sliderValue = VoiceClientController.getVoiceSpeakVolume(); + this.mc.getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); + }else if(status == EnumVoiceChannelStatus.CONNECTED && channel != EnumVoiceChannelType.NONE && mx >= voiceScreenVolumeIndicatorX - 1 && + my >= voiceScreenVolumeIndicatorY + voiceScreenVolumeIndicatorH + 2 && mx < voiceScreenVolumeIndicatorX + voiceScreenVolumeIndicatorW + 2 && + my < voiceScreenVolumeIndicatorY + voiceScreenVolumeIndicatorH + 12) { + showPTTKeyConfig = true; + this.mc.getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); + }else if(status == EnumVoiceChannelStatus.CONNECTED) { + List playersToRender = VoiceClientController.getVoiceRecent(); + if(playersToRender.size() > 0) { + Set playersMuted = VoiceClientController.getVoiceMuted(); + for(int i = 0, l = playersToRender.size(); i < l; ++i) { + EaglercraftUUID uuid = playersToRender.get(i); + String txt = VoiceClientController.getVoiceUsername(uuid); + boolean muted = playersMuted.contains(uuid); + int mhy = voiceScreenVolumeIndicatorY + voiceScreenVolumeIndicatorH + 33 + i * 9; + if(mx >= voiceScreenVolumeIndicatorX - 3 && my >= mhy && mx < voiceScreenVolumeIndicatorX + voiceScreenVolumeIndicatorW + 2 && my < mhy + 9) { + VoiceClientController.setVoiceMuted(uuid, !muted); + this.mc.getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); + break; + } + } + } + } + } + } + + } + + private void actionPerformed(GuiButton btn) { + if(btn.id == 2) { + showSliderBlocks = false; + VoiceClientController.setVoiceProximity(mc.gameSettings.voiceListenRadius = (int)((sliderBlocks.sliderValue * 17.0f) + 5.0f)); + mc.gameSettings.saveOptions(); + }else if(btn.id == 3) { + showSliderVolume = false; + VoiceClientController.setVoiceListenVolume(mc.gameSettings.voiceListenVolume = sliderListenVolume.sliderValue); + VoiceClientController.setVoiceSpeakVolume(mc.gameSettings.voiceSpeakVolume = sliderSpeakVolume.sliderValue); + mc.gameSettings.saveOptions(); + }else if(btn.id == 4) { + showPTTKeyConfig = false; + mc.gameSettings.saveOptions(); + }else if(btn.id == 5) { + if(showingCompatWarning) { + showingCompatWarning = false; + showCompatWarning = false; + if(showTrackingWarning) { + showingTrackingWarning = true; + }else { + VoiceClientController.setVoiceChannel(continueChannel); + } + }else if(showingTrackingWarning) { + showingTrackingWarning = false; + showTrackingWarning = false; + VoiceClientController.setVoiceChannel(continueChannel); + } + }else if(btn.id == 6) { + if(showingTrackingWarning) { + showingTrackingWarning = false; + VoiceClientController.setVoiceChannel(EnumVoiceChannelType.NONE); + } + } + } + + public void updateScreen() { + if(showNewPTTKey > 0) { + --showNewPTTKey; + if(showNewPTTKey == 0) { + showPTTKeyConfig = false; + mc.gameSettings.saveOptions(); + } + } + } + + public boolean isBlockingInput() { + return showSliderBlocks || showSliderVolume || showPTTKeyConfig || showingCompatWarning || showingTrackingWarning; + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceOverlay.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceOverlay.java new file mode 100644 index 0000000..2621c60 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceOverlay.java @@ -0,0 +1,258 @@ +package net.lax1dude.eaglercraft.v1_8.voice; + +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_GREATER; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.lax1dude.eaglercraft.v1_8.Keyboard; +import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiChat; +import net.minecraft.client.gui.GuiIngameMenu; +import net.minecraft.util.ResourceLocation; + +/** + * Copyright (c) 2022-2024 lax1dude, ayunami2000. 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 GuiVoiceOverlay extends Gui { + + public final Minecraft mc; + public int width; + public int height; + + private long pttTimer = 0l; + + public GuiVoiceOverlay(Minecraft mc) { + this.mc = mc; + } + + public void setResolution(int w, int h) { + this.width = w; + this.height = h; + } + + private static final ResourceLocation voiceGuiIcons = new ResourceLocation("eagler:gui/eagler_gui.png"); + + public void drawOverlay() { + if(mc.theWorld != null && VoiceClientController.getVoiceStatus() == EnumVoiceChannelStatus.CONNECTED && VoiceClientController.getVoiceChannel() != EnumVoiceChannelType.NONE && + !(mc.currentScreen != null && (mc.currentScreen instanceof GuiIngameMenu))) { + + if(mc.currentScreen != null && mc.currentScreen.doesGuiPauseGame()) { + return; + } + + GlStateManager.disableLighting(); + GlStateManager.disableBlend(); + GlStateManager.enableAlpha(); + GlStateManager.alphaFunc(GL_GREATER, 0.1F); + GlStateManager.pushMatrix(); + + if(mc.currentScreen == null || (mc.currentScreen instanceof GuiChat)) { + GlStateManager.translate(width / 2 + 77, height - 56, 0.0f); + if(mc.thePlayer == null || mc.thePlayer.capabilities.isCreativeMode) { + GlStateManager.translate(0.0f, 16.0f, 0.0f); + } + }else { + GlStateManager.translate(width / 2 + 10, 4, 0.0f); + } + + GlStateManager.scale(0.75f, 0.75f, 0.75f); + + String txxt = "press '" + Keyboard.getKeyName(mc.gameSettings.voicePTTKey) + "'"; + drawString(mc.fontRendererObj, txxt, -3 - mc.fontRendererObj.getStringWidth(txxt), 9, 0xDDDDDD); + + GlStateManager.scale(0.66f, 0.66f, 0.66f); + + mc.getTextureManager().bindTexture(voiceGuiIcons); + + if((mc.currentScreen == null || !mc.currentScreen.blockPTTKey()) && Keyboard.isKeyDown(mc.gameSettings.voicePTTKey)) { + long millis = System.currentTimeMillis(); + if(pttTimer == 0l) { + pttTimer = millis; + } + GlStateManager.color(0.2f, 0.2f, 0.2f, 1.0f); + drawTexturedModalRect(0, 0, 0, 64, 32, 32); + GlStateManager.translate(-1.5f, -1.5f, 0.0f); + if(millis - pttTimer < 1050l) { + if((millis - pttTimer) % 300l < 150l) { + GlStateManager.color(0.9f, 0.2f, 0.2f, 1.0f); + }else { + GlStateManager.color(0.9f, 0.7f, 0.7f, 1.0f); + } + }else { + GlStateManager.color(0.9f, 0.3f, 0.3f, 1.0f); + } + drawTexturedModalRect(0, 0, 0, 64, 32, 32); + }else { + pttTimer = 0l; + GlStateManager.color(0.2f, 0.2f, 0.2f, 1.0f); + drawTexturedModalRect(0, 0, 0, 32, 32, 32); + GlStateManager.translate(-1.5f, -1.5f, 0.0f); + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + drawTexturedModalRect(0, 0, 0, 32, 32, 32); + GlStateManager.translate(-0.5f, -0.5f, 0.0f); + drawTexturedModalRect(0, 0, 0, 32, 32, 32); + } + + GlStateManager.popMatrix(); + + if(VoiceClientController.getVoiceChannel() == EnumVoiceChannelType.PROXIMITY) { + Set listeners = VoiceClientController.getVoiceListening(); + if(listeners.size() > 0) { + Set speakers = VoiceClientController.getVoiceSpeaking(); + Set muted = VoiceClientController.getVoiceMuted(); + + List listenerList = new ArrayList(); + listenerList.addAll(listeners); + listenerList.removeAll(muted); + + while(listenerList.size() > 5) { + boolean flag = false; + for(int i = 0, l = listenerList.size(); i < l; ++i) { + if(!speakers.contains(listenerList.get(i))) { + listenerList.remove(i); + flag = true; + break; + } + } + if(!flag) { + break; + } + } + + int more = listenerList.size() - 5; + + int ww = width; + int hh = height; + + if(mc.currentScreen != null && (mc.currentScreen instanceof GuiChat)) { + hh -= 15; + } + + List listenerListStr = new ArrayList(Math.min(5, listenerList.size())); + + int left = 50; + for(int i = 0, l = listenerList.size(); i < l && i < 5; ++i) { + String txt = VoiceClientController.getVoiceUsername(listenerList.get(i)); + listenerListStr.add(txt); + int j = mc.fontRendererObj.getStringWidth(txt) + 4; + if(j > left) { + left = j; + } + } + + if(more > 0) { + GlStateManager.pushMatrix(); + GlStateManager.translate(ww - left + 3, hh - 10, left); + GlStateManager.scale(0.75f, 0.75f, 0.75f); + drawString(mc.fontRendererObj, "(" + more + " more)", 0, 0, 0xBBBBBB); + GlStateManager.popMatrix(); + hh -= 9; + } + + for(int i = 0, l = listenerList.size(); i < l && i < 5; ++i) { + boolean speaking = speakers.contains(listenerList.get(i)); + float speakf = speaking ? 1.0f : 0.75f; + + drawString(mc.fontRendererObj, listenerListStr.get(i), ww - left, hh - 13 - i * 11, speaking ? 0xEEEEEE : 0xBBBBBB); + + mc.getTextureManager().bindTexture(voiceGuiIcons); + + GlStateManager.pushMatrix(); + GlStateManager.translate(ww - left - 14, hh - 14 - i * 11, 0.0f); + + GlStateManager.scale(0.75f, 0.75f, 0.75f); + GlStateManager.color(speakf * 0.2f, speakf * 0.2f, speakf * 0.2f, 1.0f); + drawTexturedModalRect(0, 0, 64, speaking ? 176 : 208, 16, 16); + GlStateManager.translate(0.25f, 0.25f, 0.0f); + drawTexturedModalRect(0, 0, 64, speaking ? 176 : 208, 16, 16); + + GlStateManager.translate(-1.25f, -1.25f, 0.0f); + GlStateManager.color(speakf, speakf, speakf, 1.0f); + drawTexturedModalRect(0, 0, 64, speaking ? 176 : 208, 16, 16); + + GlStateManager.popMatrix(); + + } + + } + }else if(VoiceClientController.getVoiceChannel() == EnumVoiceChannelType.GLOBAL) { + Set speakers = VoiceClientController.getVoiceSpeaking(); + Set muted = VoiceClientController.getVoiceMuted(); + + List listenerList = new ArrayList(); + listenerList.addAll(speakers); + listenerList.removeAll(muted); + + int more = listenerList.size() - 5; + + int ww = width; + int hh = height; + + if(mc.currentScreen != null && (mc.currentScreen instanceof GuiChat)) { + hh -= 15; + } + + List listenerListStr = new ArrayList(Math.min(5, listenerList.size())); + + int left = 50; + for(int i = 0, l = listenerList.size(); i < l && i < 5; ++i) { + String txt = VoiceClientController.getVoiceUsername(listenerList.get(i)); + listenerListStr.add(txt); + int j = mc.fontRendererObj.getStringWidth(txt) + 4; + if(j > left) { + left = j; + } + } + + if(more > 0) { + GlStateManager.pushMatrix(); + GlStateManager.translate(ww - left + 3, hh - 10, left); + GlStateManager.scale(0.75f, 0.75f, 0.75f); + drawString(mc.fontRendererObj, "(" + more + " more)", 0, 0, 0xBBBBBB); + GlStateManager.popMatrix(); + hh -= 9; + } + + for(int i = 0, l = listenerList.size(); i < l && i < 5; ++i) { + drawString(mc.fontRendererObj, listenerListStr.get(i), ww - left, hh - 13 - i * 11, 0xEEEEEE); + + mc.getTextureManager().bindTexture(voiceGuiIcons); + + GlStateManager.pushMatrix(); + GlStateManager.translate(ww - left - 14, hh - 14 - i * 11, 0.0f); + + GlStateManager.scale(0.75f, 0.75f, 0.75f); + GlStateManager.color(0.2f, 0.2f, 0.2f, 1.0f); + drawTexturedModalRect(0, 0, 64, 176, 16, 16); + GlStateManager.translate(0.25f, 0.25f, 0.0f); + drawTexturedModalRect(0, 0, 64, 176, 16, 16); + + GlStateManager.translate(-1.25f, -1.25f, 0.0f); + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + drawTexturedModalRect(0, 0, 64, 176, 16, 16); + + GlStateManager.popMatrix(); + + } + } + } + } + +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceClientController.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceClientController.java new file mode 100644 index 0000000..5e3dc80 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceClientController.java @@ -0,0 +1,367 @@ +package net.lax1dude.eaglercraft.v1_8.voice; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; + +import net.lax1dude.eaglercraft.v1_8.EagRuntime; +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.lax1dude.eaglercraft.v1_8.Keyboard; +import net.lax1dude.eaglercraft.v1_8.internal.PlatformVoiceClient; +import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.lax1dude.eaglercraft.v1_8.profile.EaglerProfile; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.network.PacketBuffer; + +/** + * Copyright (c) 2022-2024 lax1dude, ayunami2000. 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 VoiceClientController { + + public static final String SIGNAL_CHANNEL = "EAG|Voice-1.8"; + + static final Logger logger = LogManager.getLogger("VoiceClientController"); + + private static boolean clientSupport = false; + private static boolean serverSupport = false; + private static Consumer packetSendCallback = null; + private static EnumVoiceChannelType voiceChannel = EnumVoiceChannelType.NONE; + private static final HashSet nearbyPlayers = new HashSet<>(); + private static final ExpiringSet recentlyNearbyPlayers = new ExpiringSet<>(5000, uuid -> { + if (!nearbyPlayers.contains(uuid)) { + PlatformVoiceClient.signalDisconnect(uuid, false); + } + }); + private static final Map uuidToNameLookup = new HashMap<>(256); + + public static boolean isSupported() { + return isClientSupported() && isServerSupported(); + } + + private static boolean checked = false; + + public static boolean isClientSupported() { + if (!checked) { + checked = true; + clientSupport = EagRuntime.getConfiguration().isAllowVoiceClient() && PlatformVoiceClient.isSupported(); + } + return clientSupport; + } + + public static boolean isServerSupported() { + return serverSupport; + } + + public static void initializeVoiceClient(Consumer signalSendCallbackIn) { + packetSendCallback = signalSendCallbackIn; + uuidToNameLookup.clear(); + if (getVoiceChannel() != EnumVoiceChannelType.NONE) sendInitialVoice(); + } + + public static void handleVoiceSignalPacket(PacketBuffer packetData) { + VoiceSignalPackets.handleVoiceSignal(packetData); + } + + static void handleVoiceSignalPacketTypeGlobal(EaglercraftUUID[] voicePlayers, String[] voiceNames) { + uuidToNameLookup.clear(); + for (int i = 0; i < voicePlayers.length; i++) { + if(voiceNames != null) { + uuidToNameLookup.put(voicePlayers[i], voiceNames[i]); + } + sendPacketRequestIfNeeded(voicePlayers[i]); + } + } + + public static void handleServerDisconnect() { + if(!isClientSupported()) return; + serverSupport = false; + uuidToNameLookup.clear(); + for (EaglercraftUUID uuid : nearbyPlayers) { + PlatformVoiceClient.signalDisconnect(uuid, false); + } + for (EaglercraftUUID uuid : recentlyNearbyPlayers) { + PlatformVoiceClient.signalDisconnect(uuid, false); + } + nearbyPlayers.clear(); + recentlyNearbyPlayers.clear(); + Set antiConcurrentModificationUUIDs = new HashSet<>(listeningSet); + for (EaglercraftUUID uuid : antiConcurrentModificationUUIDs) { + PlatformVoiceClient.signalDisconnect(uuid, false); + } + activateVoice(false); + } + + static void handleVoiceSignalPacketTypeAllowed(boolean voiceAvailableStat, String[] servs) { + serverSupport = voiceAvailableStat; + PlatformVoiceClient.setICEServers(servs); + if(isSupported()) { + EnumVoiceChannelType ch = getVoiceChannel(); + setVoiceChannel(EnumVoiceChannelType.NONE); + setVoiceChannel(ch); + } + } + + static void handleVoiceSignalPacketTypeConnect(EaglercraftUUID user, boolean offer) { + PlatformVoiceClient.signalConnect(user, offer); + } + + static void handleVoiceSignalPacketTypeConnectAnnounce(EaglercraftUUID user) { + sendPacketRequest(user); + } + + static void handleVoiceSignalPacketTypeDisconnect(EaglercraftUUID user) { + PlatformVoiceClient.signalDisconnect(user, true); + } + + static void handleVoiceSignalPacketTypeICECandidate(EaglercraftUUID user, String ice) { + PlatformVoiceClient.signalICECandidate(user, ice); + } + + static void handleVoiceSignalPacketTypeDescription(EaglercraftUUID user, String desc) { + PlatformVoiceClient.signalDescription(user, desc); + } + + public static void tickVoiceClient(Minecraft mc) { + if(!isClientSupported()) return; + recentlyNearbyPlayers.checkForExpirations(); + speakingSet.clear(); + PlatformVoiceClient.tickVoiceClient(); + + if (getVoiceChannel() != EnumVoiceChannelType.NONE && (getVoiceStatus() == EnumVoiceChannelStatus.CONNECTING || getVoiceStatus() == EnumVoiceChannelStatus.CONNECTED)) { + activateVoice((mc.currentScreen == null || !mc.currentScreen.blockPTTKey()) && Keyboard.isKeyDown(mc.gameSettings.voicePTTKey)); + + if (mc.theWorld != null && mc.thePlayer != null) { + HashSet seenPlayers = new HashSet<>(); + for (EntityPlayer player : mc.theWorld.playerEntities) { + if (player == mc.thePlayer) continue; + if (getVoiceChannel() == EnumVoiceChannelType.PROXIMITY) updateVoicePosition(player.getUniqueID(), player.posX, player.posY + player.getEyeHeight(), player.posZ); + int prox = 22; + // cube + if (Math.abs(mc.thePlayer.posX - player.posX) <= prox && Math.abs(mc.thePlayer.posY - player.posY) <= prox && Math.abs(mc.thePlayer.posZ - player.posZ) <= prox) { + if (!uuidToNameLookup.containsKey(player.getUniqueID())) { + uuidToNameLookup.put(player.getUniqueID(), player.getName()); + } + if (addNearbyPlayer(player.getUniqueID())) { + seenPlayers.add(player.getUniqueID()); + } + } + } + cleanupNearbyPlayers(seenPlayers); + } + } + } + + public static final boolean addNearbyPlayer(EaglercraftUUID uuid) { + recentlyNearbyPlayers.remove(uuid); + if (nearbyPlayers.add(uuid)) { + sendPacketRequestIfNeeded(uuid); + return true; + } + return false; + } + + public static final void removeNearbyPlayer(EaglercraftUUID uuid) { + if (nearbyPlayers.remove(uuid)) { + if (getVoiceStatus() == EnumVoiceChannelStatus.DISCONNECTED || getVoiceStatus() == EnumVoiceChannelStatus.UNAVAILABLE) return; + if (voiceChannel == EnumVoiceChannelType.PROXIMITY) recentlyNearbyPlayers.add(uuid); + } + } + + public static final void cleanupNearbyPlayers(HashSet existingPlayers) { + nearbyPlayers.stream().filter(ud -> !existingPlayers.contains(ud)).collect(Collectors.toSet()).forEach(VoiceClientController::removeNearbyPlayer); + } + + public static final void updateVoicePosition(EaglercraftUUID uuid, double x, double y, double z) { + PlatformVoiceClient.updateVoicePosition(uuid, x, y, z); + } + + public static void setVoiceChannel(EnumVoiceChannelType channel) { + if (voiceChannel == channel) return; + if (channel != EnumVoiceChannelType.NONE) PlatformVoiceClient.initializeDevices(); + PlatformVoiceClient.resetPeerStates(); + if (channel == EnumVoiceChannelType.NONE) { + for (EaglercraftUUID uuid : nearbyPlayers) { + PlatformVoiceClient.signalDisconnect(uuid, false); + } + for (EaglercraftUUID uuid : recentlyNearbyPlayers) { + PlatformVoiceClient.signalDisconnect(uuid, false); + } + nearbyPlayers.clear(); + recentlyNearbyPlayers.clear(); + Set antiConcurrentModificationUUIDs = new HashSet<>(listeningSet); + for (EaglercraftUUID uuid : antiConcurrentModificationUUIDs) { + PlatformVoiceClient.signalDisconnect(uuid, false); + } + sendPacketDisconnect(null); + activateVoice(false); + } else if (voiceChannel == EnumVoiceChannelType.PROXIMITY) { + for (EaglercraftUUID uuid : nearbyPlayers) { + PlatformVoiceClient.signalDisconnect(uuid, false); + } + for (EaglercraftUUID uuid : recentlyNearbyPlayers) { + PlatformVoiceClient.signalDisconnect(uuid, false); + } + nearbyPlayers.clear(); + recentlyNearbyPlayers.clear(); + sendPacketDisconnect(null); + } else if(voiceChannel == EnumVoiceChannelType.GLOBAL) { + Set antiConcurrentModificationUUIDs = new HashSet<>(listeningSet); + antiConcurrentModificationUUIDs.removeAll(nearbyPlayers); + antiConcurrentModificationUUIDs.removeAll(recentlyNearbyPlayers); + for (EaglercraftUUID uuid : antiConcurrentModificationUUIDs) { + PlatformVoiceClient.signalDisconnect(uuid, false); + } + sendPacketDisconnect(null); + } + voiceChannel = channel; + if (channel != EnumVoiceChannelType.NONE) { + sendInitialVoice(); + } + } + + public static void sendInitialVoice() { + sendPacketConnect(); + for (EaglercraftUUID uuid : nearbyPlayers) { + sendPacketRequest(uuid); + } + } + + public static EnumVoiceChannelType getVoiceChannel() { + return voiceChannel; + } + + private static boolean voicePeerErrored() { + return PlatformVoiceClient.getPeerState() == EnumVoiceChannelPeerState.FAILED || PlatformVoiceClient.getPeerStateConnect() == EnumVoiceChannelPeerState.FAILED || PlatformVoiceClient.getPeerStateInitial() == EnumVoiceChannelPeerState.FAILED || PlatformVoiceClient.getPeerStateDesc() == EnumVoiceChannelPeerState.FAILED || PlatformVoiceClient.getPeerStateIce() == EnumVoiceChannelPeerState.FAILED; + } + public static EnumVoiceChannelStatus getVoiceStatus() { + return (!isClientSupported() || !isServerSupported()) ? EnumVoiceChannelStatus.UNAVAILABLE : + (PlatformVoiceClient.getReadyState() != EnumVoiceChannelReadyState.DEVICE_INITIALIZED ? + EnumVoiceChannelStatus.CONNECTING : (voicePeerErrored() ? EnumVoiceChannelStatus.UNAVAILABLE : EnumVoiceChannelStatus.CONNECTED)); + } + + private static boolean talkStatus = false; + + public static void activateVoice(boolean talk) { + if (talkStatus != talk) { + PlatformVoiceClient.activateVoice(talk); + talkStatus = talk; + } + } + + private static int proximity = 16; + + public static void setVoiceProximity(int prox) { + PlatformVoiceClient.setVoiceProximity(prox); + proximity = prox; + } + + public static int getVoiceProximity() { + return proximity; + } + + private static float volumeListen = 0.5f; + + public static void setVoiceListenVolume(float f) { + PlatformVoiceClient.setVoiceListenVolume(f); + volumeListen = f; + } + + public static float getVoiceListenVolume() { + return volumeListen; + } + + private static float volumeSpeak = 0.5f; + + public static void setVoiceSpeakVolume(float f) { + if (volumeSpeak != f) { + PlatformVoiceClient.setMicVolume(f); + } + volumeSpeak = f; + } + + public static float getVoiceSpeakVolume() { + return volumeSpeak; + } + + private static final Set listeningSet = new HashSet<>(); + private static final Set speakingSet = new HashSet<>(); + private static final Set mutedSet = new HashSet<>(); + + public static Set getVoiceListening() { + return listeningSet; + } + + public static Set getVoiceSpeaking() { + return speakingSet; + } + + public static void setVoiceMuted(EaglercraftUUID uuid, boolean mute) { + PlatformVoiceClient.mutePeer(uuid, mute); + if (mute) { + mutedSet.add(uuid); + } else { + mutedSet.remove(uuid); + } + } + + public static Set getVoiceMuted() { + return mutedSet; + } + + public static List getVoiceRecent() { + return new ArrayList<>(listeningSet); + } + + public static String getVoiceUsername(EaglercraftUUID uuid) { + if(uuid == null) { + return "null"; + } + String ret = uuidToNameLookup.get(uuid); + return ret == null ? uuid.toString() : ret; + } + + public static void sendPacketICE(EaglercraftUUID peerId, String candidate) { + packetSendCallback.accept(VoiceSignalPackets.makeVoiceSignalPacketICE(peerId, candidate)); + } + + public static void sendPacketDesc(EaglercraftUUID peerId, String desc) { + packetSendCallback.accept(VoiceSignalPackets.makeVoiceSignalPacketDesc(peerId, desc)); + } + + public static void sendPacketDisconnect(EaglercraftUUID peerId) { + packetSendCallback.accept(VoiceSignalPackets.makeVoiceSignalPacketDisconnect(peerId)); + } + + public static void sendPacketConnect() { + packetSendCallback.accept(VoiceSignalPackets.makeVoiceSignalPacketConnect()); + } + + public static void sendPacketRequest(EaglercraftUUID peerId) { + packetSendCallback.accept(VoiceSignalPackets.makeVoiceSignalPacketRequest(peerId)); + } + + private static void sendPacketRequestIfNeeded(EaglercraftUUID uuid) { + if (getVoiceStatus() == EnumVoiceChannelStatus.DISCONNECTED || getVoiceStatus() == EnumVoiceChannelStatus.UNAVAILABLE) return; + if(uuid.equals(EaglerProfile.getPlayerUUID())) return; + if (!getVoiceListening().contains(uuid)) sendPacketRequest(uuid); + } +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceSignalPackets.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceSignalPackets.java new file mode 100644 index 0000000..07643a8 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceSignalPackets.java @@ -0,0 +1,142 @@ +package net.lax1dude.eaglercraft.v1_8.voice; + +import java.nio.charset.StandardCharsets; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.lax1dude.eaglercraft.v1_8.netty.Unpooled; +import net.minecraft.network.PacketBuffer; + +/** + * Copyright (c) 2024 lax1dude, ayunami2000. 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 VoiceSignalPackets { + + static final int VOICE_SIGNAL_ALLOWED = 0; + static final int VOICE_SIGNAL_REQUEST = 0; + static final int VOICE_SIGNAL_CONNECT = 1; + static final int VOICE_SIGNAL_DISCONNECT = 2; + static final int VOICE_SIGNAL_ICE = 3; + static final int VOICE_SIGNAL_DESC = 4; + static final int VOICE_SIGNAL_GLOBAL = 5; + + static void handleVoiceSignal(PacketBuffer streamIn) { + try { + int sig = streamIn.readUnsignedByte(); + switch(sig) { + case VOICE_SIGNAL_ALLOWED: { + boolean voiceAvailableStat = streamIn.readUnsignedByte() == 1; + String[] servs = null; + if(voiceAvailableStat) { + servs = new String[streamIn.readVarIntFromBuffer()]; + for(int i = 0; i < servs.length; i++) { + servs[i] = streamIn.readStringFromBuffer(1024); + } + } + VoiceClientController.handleVoiceSignalPacketTypeAllowed(voiceAvailableStat, servs); + break; + } + case VOICE_SIGNAL_GLOBAL: { + if (VoiceClientController.getVoiceChannel() != EnumVoiceChannelType.GLOBAL) return; + EaglercraftUUID[] voiceIds = new EaglercraftUUID[streamIn.readVarIntFromBuffer()]; + for(int i = 0; i < voiceIds.length; i++) { + voiceIds[i] = streamIn.readUuid(); + } + String[] voiceNames = null; + if (streamIn.isReadable()) { + voiceNames = new String[voiceIds.length]; + for(int i = 0; i < voiceNames.length; i++) { + voiceNames[i] = streamIn.readStringFromBuffer(16); + } + } + VoiceClientController.handleVoiceSignalPacketTypeGlobal(voiceIds, voiceNames); + break; + } + case VOICE_SIGNAL_CONNECT: { + EaglercraftUUID uuid = streamIn.readUuid(); + if (streamIn.isReadable()) { + VoiceClientController.handleVoiceSignalPacketTypeConnect(uuid, streamIn.readBoolean()); + } else if (VoiceClientController.getVoiceChannel() != EnumVoiceChannelType.PROXIMITY || VoiceClientController.getVoiceListening().contains(uuid)) { + VoiceClientController.handleVoiceSignalPacketTypeConnectAnnounce(uuid); + } + break; + } + case VOICE_SIGNAL_DISCONNECT: { + VoiceClientController.handleVoiceSignalPacketTypeDisconnect(streamIn.readableBytes() > 0 ? streamIn.readUuid() : null); + break; + } + case VOICE_SIGNAL_ICE: { + VoiceClientController.handleVoiceSignalPacketTypeICECandidate(streamIn.readUuid(), streamIn.readStringFromBuffer(32767)); + break; + } + case VOICE_SIGNAL_DESC: { + VoiceClientController.handleVoiceSignalPacketTypeDescription(streamIn.readUuid(), streamIn.readStringFromBuffer(32767)); + break; + } + default: { + VoiceClientController.logger.error("Unknown voice signal packet '{}'!", sig); + break; + } + } + }catch(Throwable ex) { + VoiceClientController.logger.error("Failed to handle signal packet!"); + VoiceClientController.logger.error(ex); + } + } + + static PacketBuffer makeVoiceSignalPacketRequest(EaglercraftUUID user) { + PacketBuffer ret = new PacketBuffer(Unpooled.buffer(17, 17)); + ret.writeByte(VOICE_SIGNAL_REQUEST); + ret.writeUuid(user); + return ret; + } + + static PacketBuffer makeVoiceSignalPacketICE(EaglercraftUUID user, String icePacket) { + byte[] str = icePacket.getBytes(StandardCharsets.UTF_8); + int estLen = 17 + PacketBuffer.getVarIntSize(str.length) + str.length; + PacketBuffer ret = new PacketBuffer(Unpooled.buffer(estLen, estLen)); + ret.writeByte(VOICE_SIGNAL_ICE); + ret.writeUuid(user); + ret.writeByteArray(str); + return ret; + } + + static PacketBuffer makeVoiceSignalPacketDesc(EaglercraftUUID user, String descPacket) { + byte[] str = descPacket.getBytes(StandardCharsets.UTF_8); + int estLen = 17 + PacketBuffer.getVarIntSize(str.length) + str.length; + PacketBuffer ret = new PacketBuffer(Unpooled.buffer(estLen, estLen)); + ret.writeByte(VOICE_SIGNAL_DESC); + ret.writeUuid(user); + ret.writeByteArray(str); + return ret; + } + + static PacketBuffer makeVoiceSignalPacketDisconnect(EaglercraftUUID user) { + if (user == null) { + PacketBuffer ret = new PacketBuffer(Unpooled.buffer(1, 1)); + ret.writeByte(VOICE_SIGNAL_DISCONNECT); + return ret; + } + PacketBuffer ret = new PacketBuffer(Unpooled.buffer(17, 17)); + ret.writeByte(VOICE_SIGNAL_DISCONNECT); + ret.writeUuid(user); + return ret; + } + + public static PacketBuffer makeVoiceSignalPacketConnect() { + PacketBuffer ret = new PacketBuffer(Unpooled.buffer(1, 1)); + ret.writeByte(VOICE_SIGNAL_CONNECT); + return ret; + } +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceTagRenderer.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceTagRenderer.java new file mode 100644 index 0000000..5c04715 --- /dev/null +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceTagRenderer.java @@ -0,0 +1,118 @@ +package net.lax1dude.eaglercraft.v1_8.voice; + +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; + +import java.util.HashSet; +import java.util.Set; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityOtherPlayerMP; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; + +/** + * 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. + * + */ +public class VoiceTagRenderer { + + private static final ResourceLocation voiceGuiIcons = new ResourceLocation("eagler:gui/eagler_gui.png"); + + private static final Set voiceTagsDrawnThisFrame = new HashSet(); + + public static void renderVoiceNameTag(Minecraft mc, EntityOtherPlayerMP player, int offset) { + EaglercraftUUID uuid = player.getUniqueID(); + boolean mute = VoiceClientController.getVoiceMuted().contains(uuid); + if((mute || VoiceClientController.getVoiceSpeaking().contains(uuid)) && voiceTagsDrawnThisFrame.add(uuid)) { + GlStateManager.disableLighting(); + GlStateManager.disableTexture2D(); + GlStateManager.enableAlpha(); + GlStateManager.depthMask(false); + GlStateManager.disableDepth(); + GlStateManager.enableBlend(); + + GlStateManager.pushMatrix(); + GlStateManager.translate(-8.0f, -18.0f + offset, 0.0f); + + GlStateManager.scale(16.0f, 16.0f, 16.0f); + + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR); + float a = 0.25F; + worldrenderer.pos(-0.02, -0.02, 0.0).color(0.0F, 0.0F, 0.0F, a).endVertex(); + worldrenderer.pos(-0.02, 1.02, 0.0).color(0.0F, 0.0F, 0.0F, a).endVertex(); + worldrenderer.pos(1.02, 1.02, 0.0).color(0.0F, 0.0F, 0.0F, a).endVertex(); + worldrenderer.pos(1.02, -0.02, 0.0).color(0.0F, 0.0F, 0.0F, a).endVertex(); + tessellator.draw(); + + GlStateManager.enableTexture2D(); + GlStateManager.enableAlpha(); + GlStateManager.alphaFunc(GL_GREATER, 0.02f); + + mc.getTextureManager().bindTexture(voiceGuiIcons); + + int u = 0; + int v = mute ? 192 : 160; + + float var7 = 0.00390625F; + float var8 = 0.00390625F; + + if(mute) { + GlStateManager.color(0.9F, 0.3F, 0.3F, 0.125F); + }else { + GlStateManager.color(1.0F, 1.0F, 1.0F, 0.125F); + } + + worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); + worldrenderer.pos(0, 1.0, 0).tex((double) ((float) (u + 0.2f) * var7), (double) ((float) (v + 32 - 0.2f) * var8)).endVertex(); + worldrenderer.pos(1.0, 1.0, 0).tex((double) ((float) (u + 32 - 0.2f) * var7), (double) ((float) (v + 32 - 0.2f) * var8)).endVertex(); + worldrenderer.pos(1.0, 0, 0).tex((double) ((float) (u + 32 - 0.2f) * var7), (double) ((float) (v + 0.2f) * var8)).endVertex(); + worldrenderer.pos(0, 0, 0).tex((double) ((float) (u + 0.2f) * var7), (double) ((float) (v + 0.2f) * var8)).endVertex(); + tessellator.draw(); + + GlStateManager.alphaFunc(GL_GREATER, 0.1f); + GlStateManager.enableDepth(); + GlStateManager.depthMask(true); + + if(mute) { + GlStateManager.color(0.9F, 0.3F, 0.3F, 1.0F); + }else { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + } + + worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); + worldrenderer.pos(0, 1.0, 0).tex((double) ((float) (u + 0.2f) * var7), (double) ((float) (v + 32 - 0.2f) * var8)).endVertex(); + worldrenderer.pos(1.0, 1.0, 0).tex((double) ((float) (u + 32 - 0.2f) * var7), (double) ((float) (v + 32 - 0.2f) * var8)).endVertex(); + worldrenderer.pos(1.0, 0, 0).tex((double) ((float) (u + 32 - 0.2f) * var7), (double) ((float) (v + 0.2f) * var8)).endVertex(); + worldrenderer.pos(0, 0, 0).tex((double) ((float) (u + 0.2f) * var7), (double) ((float) (v + 0.2f) * var8)).endVertex(); + tessellator.draw(); + + GlStateManager.enableLighting(); + GlStateManager.disableBlend(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + GlStateManager.popMatrix(); + } + } + + public static void clearTagsDrawnSet() { + voiceTagsDrawnThisFrame.clear(); + } + +} diff --git a/sources/resources/assets/eagler/CREDITS.txt b/sources/resources/assets/eagler/CREDITS.txt index 8aec862..63df388 100644 --- a/sources/resources/assets/eagler/CREDITS.txt +++ b/sources/resources/assets/eagler/CREDITS.txt @@ -11,13 +11,15 @@ - Made the integrated PBR resource pack - Wrote all desktop emulation code - Wrote EaglercraftXBungee - - Wrote WebRTC Relay Server + - Wrote WebRTC relay server + - Wrote voice chat server - Wrote the patch and build system ayunami2000: - Many bug fixes - WebRTC LAN worlds + - WebRTC voice chat - Added resource packs - Added screen recording - Added seamless fullscreen diff --git a/sources/resources/assets/eagler/capes/01.minecon_2011.png b/sources/resources/assets/eagler/capes/01.minecon_2011.png new file mode 100644 index 0000000000000000000000000000000000000000..77e0ccc3a85baf085f4bdc7b9839e1ce177039a2 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv^#Gp`S0D`p!VC;*j0}#93?593 z@ytvm%#0J+ST;&CAJgVI%gK7pg2%$;U?@->V@Z%-FoVOh8)+a;lDE4HLkFv@2av;A z;1OBOz`zYOiCdVFVb&Z8pdfpRr>`sf3l=68VGhP}n+l-NN>3NZ5RLQ64?K8zd9#C< zm{{2iI%Z6qcJXEw50gOShI4m!r!P_BY-w*>+B!{%(`8B9vgr#smMkyb!g$u8kvnC{ zVoo2k{B15`9QJQ6CNT>Yv~hkBnLR(l)U1)aB~(J%U*A=1g-PMOxGW~2jD}rTKA+%O z(7+v&;P;$!Lj!k+Le068#_C>;HR6w%1saXj&(CoY>tNvA(!?@HF=_%sVk74ZCUy=k co;(HyR{@W|Z)BbR10Bua>FVdQ&MBb@0MI62*Z=?k literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/capes/02.minecon_2012.png b/sources/resources/assets/eagler/capes/02.minecon_2012.png new file mode 100644 index 0000000000000000000000000000000000000000..639066225121e01e4099f040385a83ba4de607a1 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvg8-ipS0D`pjC?YTV%m(dmW;|S zj7Eu!W|@rcos4lC8FSC_^}WxDFxl21^>erA|Ns9({!ds2(ohoQ7tG-B>_!@hljQC0 z!qCAg>jC6&7I;J!Gca%qgD@k*tT_@uLG}_)Usv`QEKDrII<_S@Rsw~Vc)B=-Xq-=e z;K9qwn;pc&#L8yS5ixPv#j9C7OahG?*3C2yU!ug>(%!bTb(#{V%aXQb(-(3qc|I?L zc~&Bm_=(!@@1(j8?6pq6uf*N5f2D0HpUMLs;S(=*U%i)=!z9kJ`o-?Odqg4^aH%9P z31u|w+VcJz*MbJ_n1ruZ9Sz-uOh+zU-Cg!xgZ0xxrrqUl@3ra(FbZX`a#}c_abRj; g74i_5xWmA3wb9RONBAWlpnDlSUHx3vIVCg!0H|MZ?EnA( literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/capes/03.minecon_2013.png b/sources/resources/assets/eagler/capes/03.minecon_2013.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd6a125b9b2e910b38d66cccfeaa02649249611 GIT binary patch literal 408 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dynE^f_t_%!eKqi+sAHR}_u&}U* zzKn#0lB}zyqK}@EzkzDFsak}owzjrTx}9Nxi)BlI!{kV(8PP5-E?%qBysecI5)#q_ zv`V9lnp2EAv+O73+s~@>THEZkWkS@RzM!*b&z?JX?*04s|NsAgW*@5ww284K$S;_| z;n|He5GTpo-G!lpRn`N@;VkfoEM{Qf76xHPhFNnYfP(BLp1!W^FIbqEjU{@x<*b21 zD?D8sLo80eJ@3oiY{1iycypGJhi9aHiu%X@|4*s9#+uJQEV29T(yPtY0a+fk`Gw2G()#@E(!XQ$uP-( zGs7*$J@J!gyem%0az4b+BH}bDw|Uko9o7xZRkn^t`4U({mZ%Fn{2gr}uJT;u0LPIz tsZTQ)&q+UEcCbIZ<9*|Q+aKQx`41)Xa;UG~91V0cgQu&X%Q~loCIG7cir@eM literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/capes/04.minecon_2015.png b/sources/resources/assets/eagler/capes/04.minecon_2015.png new file mode 100644 index 0000000000000000000000000000000000000000..a272284d7c05466029beb4eaf4b9f7212e406265 GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy9sxcfu0R?B7^TEm6=iv~)P#+6 z6&!5TJzPw}0xhG%+%r=`%Znmi%#vE_n+r2Kh4tt5x366|>%hX!<7;PLxpL*k{Yh7ML)4fb^HlvI%U^z**MbZmOqg8qcCF7>6)SYH@3)M+Yx{iRdMxksM;J?jh68L|pe%7Ki(c!WL+ zSYBlNA}1jo({pYiLu|uZM-IjM@C~Lb)E6*V?qG~21szhGfvHsLb({BsLXXr-r%V~EE29VA4+4O}ROO}^zVLWTl zn0?Yi-&@;NsAEs@+HY?{Qbdidt#1q&0iiR2dF9a%u3lb$Y)Ar`0KUf4LvS&@VF!u5rV8$1sD|9{!_{<&k*eRqjy z7IDw2F1hengEh=+rH*z?zwX69OgD-crv#nTyvRL)@fVA%f<3#W*Oa{uaSbmRRTPfg z=AEc;c3)W4jfKgFJr37>^UhKDbS@JEt}zVX`#UZ#VpMv||A5b= z;rE=4-2Mk^Shb$zEn=Kusn?+?zJM{tS5@lR&CPcm=Y+@~KKqBY;Ig2h^rm0+2{8wE s9%j2GyJhR+nxlO4o(ng~+}~quzi)@g#}qdcP)IO%y85}Sb4q9e06&eFJ^%m! literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/capes/07.mapmaker.png b/sources/resources/assets/eagler/capes/07.mapmaker.png new file mode 100644 index 0000000000000000000000000000000000000000..58a217a4d27be6f9a7c64af545c010bd176a41a7 GIT binary patch literal 580 zcmV-K0=xZ*P)ib!pYNt04aaF9!KlS`FVOmmb>mRC)3kxq7)Pj{J5c$-pupi_RM zRDYyZfu~-GtY3+(Vog6{i>_l&L1a%sWKcq7QA1~sv3#}SeYWI&x8;7g=7^`lp}Nnn zsFtv*nXs#w%)L|1zEjV^SklE_)5c!q>+j~*Pv+QA=Gjo@>+t66@#oo5=k4L;#2d9Y_EG010qNS#tmY3ljhU3ljkV znw%H_000McNliru=mY`-G%0Od(UK~y-)?a^(Ef}J+f zCvvxT*>S+itf>G0r#g-hno0CA=;nO$;$c9;*tP0as@~dduNj#lj4i8Hv)VC6=Cv$v z64AC|bRrWfX*nS5=ALTWA~NY46aadkw(azUR|?QYL?IA0&>|0%LM2on-Eu$^r(-Fg zZC4)7rxZX1;0Aa~{Yxo>KtB?o2u7o?;gC)Pc4uMr_r3h3BLIx2Z)lVP1`KXMXB~#g zZ3cP)IERmWAWQ(GIE~~$w=*8o_4@=kMI^s4S^W5O-}h(J%0GFW?A5 zf=)mr07ODwoZQ|Z#N*Ay&Yi)*oyRRuBdgrR!Q09s*ugD0iAQL%fcR7% z;pq~JbA%+9ODL`26aC`<^)rq&`(bn#}JFtZ_h{jw-^YpCM+sho4R7hu2l2gEbC8u^$H*1{{Me^W!r%Me$B`bIqo}eeb~=!iPL3`*_L+X-Ya;yiQ74)fayW^ zS?f)jdro&~v>Grzc(qXDlyp3&$B9J>ISKdP&)l2-PWpt9YVm`ezu8{yVLbAi@d3Zr zA;}LC6S){QBYgxLR!KK0ew3SeMuB1fmxeQk7|uu)#BXMh&c4~SX*K7HNHNh38&3Hh z$i05D_U-%MY}M=DW-`d7w)yigE_f7?nfjRFj_F|`hN$_OOTTzB@U54B>wSBlt^Lk7 lMJFWw%&}+u_xW`VV{evr(991^HfBWW31N%2_!Eb;4`yU_kf7y~f)9$+fH87S0`2{mLJiCzw;v{*y zyD)UH%6b4foCO|{#S9GG!XV7ZFl&wkP>{XE)7O>#1q&0ism7mOq>FZbJN4- z?qd{-U=Vx3$~DJDEP~tQ@ekdU##6@Wamw6p_Li1keS6!3$)iDviIc|}7+UEY{f}O; S*8)0`fx*+&&t;ucLK6Vbh-(x8 literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/capes/10.jira_mod.png b/sources/resources/assets/eagler/capes/10.jira_mod.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d4fe8f8205eaf72de27495c615822ba19ce599 GIT binary patch literal 474 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy6#+gWu0R?Hq{PH!C8bp56*QGq zw3HaMR8)<%b!-e7Y>Z57jZN)M&7Cc+Tr90UZS8$so&B6$0-a^U+!?|=Ji|P_q5}Nl zd>JyMqf6o$+6x$`Rx>VWVOZM1xOpJl>segED7=pW^j0RBMrn!@^*J&=wOxg0CG4BJR*x37`TN&n2}-D90{Nxdx@v7 zEBgx;CT3I9`F&4M0EKRQx;TbdoPK-$VAo*<0k#JMrR86YytSmaa$HL}^Lzh8DdDDR zzTWw^U)cTY&e&frm2=_zv0gcL>P7Yz8J@Z+f8`>XUms>MV9ob$5PoFk8?JcgM44h_ z@WyuxUI#4$7MMz%u-@?J^zV5m#S~t7@He>mZuHR*{j={-W{*n;`-ATa|Cj63d9%hl zMkg9BoATn@<8uv4Ufixz&+o}`FuLt?VT%s;L$(UWeQdV^q_`&BXDv|6EpAnmnxxtA ze!;v4JW?_|ueK&JzvZi&_k4q0eS`Pj!~Zv)KVa?i;UgFKyry_`e5TtmEFLcQHWeOyC*+`@d^!+kx%{X8Q4JR|+RA_Kgl1AX$t zJo3Xm3nGBXt1!~LD9Wce%C{uiuO!B=G{(OyHlQpnpgbQMhbF#eWX86v{@|m0EJ1^UBUXJg)93bgGKQ~~0Uf};LARlqR+o1#W8)He3 zUoeBivm0q3PLj8~3quF1tOt<8S>O>_%)r1c48n{Iv*t(u1=&kHeO=jKurM*32??%b zP5|l&_jGX#u{iy9!rh=l1_Ex93l%dnyhQ(KZwYd}n24x=h^!NKF9cN*6Gw&^OUkaG-q|x z{&hTyebg3~dsM}?^vf<>V^*5^YOd)Wm5v9>SKgN|?^9TM>T{Q&w$@Bn1Bvg4ChX7_ z3%NOsD?&3!h=t|1^9;*F-CO1dl*+kSeDLVdyW3LBz;GbSGx*J6Mb3o$XVX&N?wMDd zFxAsgDv{^6b2+Q-+N(itc@q3Jk2DunpWMzjC2F^k*Lv~PQc;;7a!oBe4i(*RH0O`@ zo^I&!w%68v)&%`V&JTqw0XAw2`wJQtUlD9schK5v&zuF{c$J+Jo^dQ&(UbNnN<;VD zE%V0$!bPt*dIMHXXuXiS(eKbh1*aJmc}-f`dS}|qqZeLEvGUv$Ic?XW^M5!W&X51h Y79L}+AzPJn7Z~acp00i_>zopr0IG-*MF0Q* literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/capes/12.scrolls.png b/sources/resources/assets/eagler/capes/12.scrolls.png new file mode 100644 index 0000000000000000000000000000000000000000..25e144743680c78108ed9bddb2c6f13862da774b GIT binary patch literal 737 zcmV<70v`Q|P)vi46$(Wc3P>9ZNgE4EA`nd}6jnF`SS$coE)`-j z0cu7HYd;`sNeXRUT5dZ4ZbS-pTmpMqPJTuMesz0-aA}530f|Zhi(3wjUNe++6P9FE zoRE;AesiRAK&P6QtB886n*y(J1+j@yv!MjEb2qeoTD7O4xq)50mU_RjsKcWI$$>q} zb1cfCU&^}y&BX%GdIHdy2+*Ts(uN1pp=Q#_0Mg0<)3O57wF1+}0MxDv)qDfhwgJ_- z0oI@a*0KTDgb3KDWZ8!Z+Ij@qgag`%1lpAe+L;&IdIa05Z{2SR-Ejloa0%wMap$&s z?Yd^~zIN}!a`U`w_r`kn#*6u12!q3qUuBd z00A*cL_t(I%k7bCGs8d>hBIW{8^sbd!78VSL2DAEdeOSI?!|N`He&z(pKubLO!ia9 zHy=EopMB4J_GlVSnM=_!P}c?4?E-UMYNRNF5CTAOo(LpC5de4<5x`I&_m{8lZ+j#w z$S+6`k{aY?-89X$b47?COn^^1`tUe5H9fQOtOyWV)>64#3W1WF+vSN|ZhTV_Sl_bj zgQHR(sG(n7?_))^BCjYCSi&of?$x~`)8fb-4iiD z8BxXeo+q&6WIjJ%DBv8X{3IrDEVMR)0M@VHzOlL_=ZRdV5)6dtGIFYkPZe ze0)+}d}3;SQe1srWPM<2ePC;SVrzY3Zhlx_epzOITVj4-Y<^^Ie^p<9TV#J;WPny= zfLC6CSZ9D;XnUV{L<2VS`(1gI{Tc zS7L-$V}w^_gjr*RS!9G;WQ1R9gko)lTWp10WrkQ^hFN2VU~q?9X^2^4h+AQZTx5t{ zZHZfAiCk%kU1o}1YKmWMk7;m_TxgVQahGm(sO0mg<@Bj}iK*uHtLXTzevYq$kg$4- zuz-uOfRV6(lCgl1vVe`Uf{(I?l(T+|vwx4Ye~z?+mbHVHwu6+peUiF@mAr_Wy@ipz zh?TyHnZJRZzk-;*f||dDm%oUZzlfQ?iNQm&A&o#FnPVlc30y zsLGS3%A2msmZ!^_u*{XF&YG{)@blI2^w#nA*Yo$-^!Qr0ix2<+00DGTPE!Ct=GbNc z0004EOGiWihy@);00009a7bBm000XU000XU0RWnu7ytkO2XskIMF;2v0s}Vy`wK&9 z0002sNkl7!G5WsPioQK;gOUKzuEf!Cfk~tsk)NEOrR|2^&1k`UA>?96J zg;+B7FR}du#|dGum_oCd6Hx{C%{yY#^js|GVu0*_L!L1K%JF&(@02Nk#ha8=ViFKh z07O>+&w!=W)@mY70e03}Z00000NkvXXu0mjf{6c{F literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/capes/14.translator.png b/sources/resources/assets/eagler/capes/14.translator.png new file mode 100644 index 0000000000000000000000000000000000000000..b681c269353cfbafe5c2f2fb674575f425e20f80 GIT binary patch literal 774 zcmV+h1Nr=kP)o(PK;nqjbTlVVNZ=>PmW_yj$~4gWKrjLgy-OQ z?dEvy>7eiL@AB@U|NsAAxJrru0004WQchC^0Xh}ptR5;7+&|6c2Ko|yK zr$S`Kb?t1Dl^vldrNq)&gpF;9GEif4`v3o8x!Xi}WHLxQUI3JIW z4C6RWIOiG!OIoow&!qyT&RX^LrMm4T)UB!dih>X{a{@DFr4l!Y5McHZRTiFT*Wjhn z%y2xmuYVS_%bXA%R{5;DmkI%t)hyFhMHZrxu zA|dFYW^-8>rD2#7!rnirL$C~?DhtW*JZW^;Nuv>ymUuHj0K!&IU~EW-B#wlDP^G2; zxF8EG8ex)*@#L8>+p-QUx9!@leCN06|5W%3!he39Hy9*N?re1LRsaA107*qoM6N<$ Ef(Z&XCjbBd literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/capes/15.millionth_account.png b/sources/resources/assets/eagler/capes/15.millionth_account.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f0a02d8878c76af6743cdaab449e0270465b17 GIT binary patch literal 859 zcmV-h1El27Fed^rCj&7l0yHTDG%Er%D*`tw12rrH zHY@@+Edw|$1UN1PIWGe{F9bO+1UfJSJ1_)0F$6p^1U)kZKQseCGz3641wu9kK{o|M zI0ZyH1x7mtMmz;bJO)TT21z~!NMQVd>H4PaFaVO0%bR}W)Y4rEyn zWm*tsT@h(s5o%r%YF`m+U=nO;6?JMAcW)MaaTkGf7lCybgLW5(cNc|s7>IZnig_1{ zd>D>>7>s=xkA4}Ee;AU38kU3^mxURbg<P8=s9Ep^kD`}r9B`7QkVEByLB|NVFW{e=JhkN^Fd|NXT8{lQUIy4(N&00DGTPE!Ct=GbNc z0004EOGiWihy@);00009a7bBm000XU000XU0RWnu7ytkO2XskIMF;2v0s}WHAh3$R z0003(Nkl|?y~(v0ux&-@Mzs6t<9RKaaAKwE3e&ee5NK>WT?9MHzn^oZH!+9ZH{mri}Wr_w1I zgSr03TEpZD0bcF;k9YgvBHX5QqRD?oN*Ycyt$pCS^TCN z?E93wUf&*m)6!9nZ lsye5fYVdP^0{r*uJ^{s4b_>o1w*~+J002ovPDHLkV1mO9JmvrZ literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/capes/16.prismarine.png b/sources/resources/assets/eagler/capes/16.prismarine.png new file mode 100644 index 0000000000000000000000000000000000000000..3ee69b2ed641cd3ea5459a25c4c198a27147bb82 GIT binary patch literal 1007 zcmVpa4S(i^XP)Qz z&1(RB`SZ=#r6wOAD-CyULBPZZMP* z*$Dt>&9?A-pZ8ZTv$3{LduyA9=b$r255jX1o{MQ)Xf;HuAw{M!YzyH%Y^iBG3L5K)$B9jz~glq%m=tVi*RYjFE}LaYZSgcn6Gnl}qowM~aEC1O*n|aKQOj&U5aymq!P}gMc`c zU|5)zjS53Nzf#HzT}(cLl`AX!_}j0{%soYJ+9XkgQWB+7UV8Bbe*fv0qZWum3rsZL z+&tA*c6AN-GL(02v2bK^fJB$yMqp$KI{g49M2$%2PF&SP(5OS!u9<_3%bGaEHG>f@|@l9 zfTen!n&;DMoI>NUwS5<@RM`T{Cy!%r1hrEwqHciWd$e4KJdP)_V6+1|HwpSN{dSM} z`5AJ#i6v%m{5naTQDpkzU64p93Mz(47{w%sqGlE(kwmA8itDo7?lRE`mgg79$k`e6 z*zfkq^NhUMq1kGc4ul5*X#rlfN}=5`D+WE z>C#Q dgcD9U;cxJ!+Ts?@*Cqe}002ovPDHLkV1mWU(z*Zu literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/capes/17.snowman.png b/sources/resources/assets/eagler/capes/17.snowman.png new file mode 100644 index 0000000000000000000000000000000000000000..f4ad55259cb1afad3413da8bb51bdb3e499ec1a9 GIT binary patch literal 578 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEdf3uu0R?H6crUMEG(Q|oLyX9 zT-{t<-Q3(g+&w%!JiI(Sy}UdFJ-vLqyn?*Eg1x$ zqe8=D!XslNBI6>X5~89LqGJ|NsB|Po7hOj$kYa@(X5gcy=QV#7XjYcVXyYmGuB}I14-?iy0WWg+Z8+ zVb&Z8pdfpRr>`sf3l=68LH@O>rz3%S%spKkLo80eop>33jXkZcmQ~oqBPVEq8hKhF!KC3O{?b!nsZ7 zT%2|C)1LD0niX-zg2q|g(SAkW+1F+4U3uYC=KNj9GJxK8ef^zHJ}uWG`S!uONn*>3 zq7S&9VVJv7Ml?Iou~H*^@2}K!i{~s0?y3YY`C`;FyD_Qa`7BAs8?i@B4}X=gbNQ6s zGB0}5g&jJpmdQAIDaJD?K9ak8aN(98kzdz0wu?=7cUbrD>-Aqueh*dGF4TXQ3=CBU MPgg&ebxsLQ0A}9fegFUf literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/capes/18.spade.png b/sources/resources/assets/eagler/capes/18.spade.png new file mode 100644 index 0000000000000000000000000000000000000000..7cf8e8bfacb5f535db2f9aca34bd0d4cc2d83faf GIT binary patch literal 557 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy#{zspT!AzY@Ue6AbMWwU^6+!< z3IGu|uZW1SsHljT7K1pikT}1vgrKM_zqq`dth~IOf`Xii7lWD)gGMlemX?NI9D`*E zgLMUiO%;Q4JEPZBM&CIMK}#8Fdh=f`y4iQ0c|5={i862c9mDAr`0K zobI>b_Wz<2Nh}u6>A3-YzG!?2N!S$7-R9a|s-N2_Aw99CZpDdI}tS z3LR| zkP|MG6E2z)FPs!Fk`ynL6fl$&FqsrGmK8CU6*H6-GoKcHBo{WG7k(rdHklYVoEU~B z88(+0IG`Cgq8U1-8HObqI;R>tr5ih?8$6~PJf|Byr5in`8$GBTJf$2xryM@19fv9* zkuD*UE+Qv2Bb6~Jo;WHpOe&u^E1)_np*mk~pL>b4gOb68lfa6TuZ(XqlbpJm5eu87 zy`ZSUp{c~A7Z0b{t*DAZwGHq)#n#3qR00001bW%=J06^y0 zW&i*H0b)x>L;#2d9Y_EG010qNS#tmY3ljhU3ljkVnw%H_000McNliru=mY`;5*P*B z9bEtb0Ub$1K~y-)V_-0b0|_`_Kmx{&VQJ~<=>-|iuEu$AfUF=Osk=G7ur4>m$~Z3@ z3Q!b8v`%PmF09LsF~^}Gs-wTFIj1no&>n{Z-^P}v+Vo6I4A)=gXAYpY(r7ND^%uF8ttya zAqF%7B9CeU6Khd*O0vHUI~&M~iEVA@Rawy5vy?5r<0Q$tdKY=V(zY&j65 zdgz^hMqyDzG1e3VUCeym9b^DiB+wMb)BhogQ-oUnO%#yU8{wCo25gi zrTY|1k7-t()2%#bSbG7{ENidXHeR!BedgHu%(L~GZ|A$v&UcZ$?_vkPr7azvt)1Sj zoj$EyzHME8?cM$z6Cye$Ms-e%?wkZfF?NMQ zuIw*Zm{^3&Zt@CD0_xHCba4!^IQ@3QS--;u0xjA(?`KV!w2Sdp&MTe5ADmN;`M#d= zz23M-;Ly~nhaE?boO=1WCtXcgzOA5VzWjI9^|OAbp0)8bVUho}(f$peUCDaa>HBSF zztdzi`+MNctF~=_*EttgqZEBrnAlflQ z{lKId{p;%Zqc^cJKDxNcqhVQ8VS?4I18+?;8eS~O^OLFJ=;KQaj$~FaZ4&8bNsy{6 z`RbwQ)^JKmxl}4JEI+x2<6v>N$^#QK%Sz{&TXwW^3wSBbWBOwn;%PQrt4w6U^GECp zUR7)46}tooR7(}st*HTDTRAHmJzwO<4-8EPPgg&ebxsLQ0J_8RhyVZp literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/charles.fallback.png b/sources/resources/assets/eagler/mesh/charles.fallback.png new file mode 100644 index 0000000000000000000000000000000000000000..f1d90ca587b3997b7fee5848a5cd92c9fbef9b53 GIT binary patch literal 59749 zcmV*VKw7_vP)PyA07*naRCr$Oy;+l`*>xSZ&hX9m-pr~VFg6B~0ExMQZuATSAVJckAS*&*SfL2n z51ts(gC6`QhyQ|YMwk%}g+fo3Wj={EDUvdUfk30t0|=lobXB8A0F7?+Se2Rge$)BR z;8^?Ig8W{NxMpNF0zFh^<;}eLoqhIRdkqQ){_C-?T}k{BVg$5RKum}}K^cXVB0}^~ z-k@lW{92eI;u4_1{|2A|@G~gDScRk@AIHy;d;%h%6wtN`vj++TOj7`ifzdz=Kv4oA z0faib22y3kTx+?Oo zM-P}1s4E3GC)i5iQ+Itx9r#CZ@$%>R9XR;I_t-bCBzQpa@CK;`a`1QYE+!zx4?0{flOAVfU zZ4CkfTs%XH0oDWE>IflN_#qV!|;`;mkH49@*2ILB|m!5_YFe*H?)6`&1}M&8K#o0|VEtvs)B z1GR4s__G?OGtBeM3l)u3FxtR`wS0_jERv6K(V^@j3ROWx4Icu+=%91~WjJqC@>=XH zbODrBq2%l7glS2bN46OYlwE+r%B{YP4z_3jYv8AVh221mF#H7k{Om#yq+8$@5 zQxZSmoUY(~lGmMA1I3us65-(-*uDnKO` zf(-tl(pdTlyJ3g3vs1wUx^4}loPY??YeC&h6QN9jRoB5*5v8ipZ%>dG4P!NqZ&}O7 z5y3AC!?FTcjt%*F;7#t9glJ~CFhfU$#qmT3DFDs~L=OK>%Q(R?A}tE0;5eZ%ZWm~! zQLPN(5)qaJRpjkP3K}RQbV?|#!Eb%`q60Yhr|^Jpz`+Z^BY%A**;3_o9)URpB+C^Z z5Qz?Q;in?v=m1+`nH_f9Q=AMtRN4qK@8$tT)uO07q$NNnkGfi;X*AlEMPX`;eLxI+ z9Rx*nPhmt<2DWO@H3ck31|IYfVXVjI zwo3v62B)RH_tC>o9;@RTCAST1-^ni+IM*x8b3pG0#K`?W*Nqy<78u7tK6mdu0yhc5 zKj7P!@c?)w-9Y4`FC-{}4VpMWkl*8GB7+WG8z$*Mj7s>u&wuXVKZ655gBLG){z2DcniD)yTUju^rRP!^y4%mWAi865EWyLjmX zzXJz<_`dP@)l^!Is0sW5mp4b)4L#<`=aGQ_=U$zsdGSzPm2cDl1n=PE1gl$Y+7h~o zSp0(VYyly*qG_-y4Yn@HT(2GR0scF{)j+jTvOQR2l^Y!GnJL2QL6$|HhS6)V!5D-urT+SCz)@%~L4=stia|2G&eL@=oU3NAw7jhcTOc z_$lsTyUoLy5^Am%jY8Q1*I(G&@-n3jS9nq=5x0lbn9{ zH!ljnK~KOrfANDCfUi7!CAAGZZH=laG3+KBty^fH(2qMzX~DGJNqbGXO{kGw=0; z*##LR{E{%ZEk@5(B*y^q6e4V=g@K;}cDpdsJTF9(jXahGon55Bm7H^$i!)d=2?!Q$P+R~zJ zSE#BQZlEj=SZ_M80q2N)Lw1`b1(fav1eahGnRh@RyOM~>Q4I)_(AG7^?Tp0LU76q(k2kKr0q3@` zw#0gUj8)meRF!lA1m)IUE$zH>3w1iu#t)N1yQ&fV0`JJ^Bgn_`L4g-_(`4X&npp%g zw#as#6ar4`b4Wr7Ufhh?O>mPF`LO5{_N)Ka5&+a#mWWl$^(2Kxg=i62ek}L>VS&bi z-QZCa8dgUPG3(-<_UdbTiK8 z5tEy6OIP8ROK%g_A7wSX@u>kwF2Y)ivPc5tky9`a3e9Q-AA5upG4(vmUMRZtS_?+N zgG_>->w%IAJz@D}O#o%Q!<4Wa&fo^F6&3jRg32Ox7dD|V3d9vzFlr6Bs9}gJG%NXj zhN+kJVW}e~>K!=ti;n?m!5I^{=l~A-{Ga<5KX?In^pPuRNeRv;q3)6}M+1*AJ6!MI z!r9Pc=Vn3A-@e)4)?05yQC66_p(_CC!U^7yF-Q@R<>yGE{#zX%!>1l8I*dJAd9n=? z%H}_|{QMkY1bRw+DG*YblQ0fFeDavM;@cB`*fDTykdcAzLOjfSFp;nAgF#blP}CYr zSco=aT+U!k$TWeFL;<)EYv2YU0bl&Biw@x2pTYya0S7MtU-{BgskRC;k^5F5rhs90 z29pYG-E~}>PLYB^3^VSy{arZTT!Ny}2HS8d2X&%3m;iVz9?hy2>Te1&>h%WGc!GIM z&_Rn*&(=f>X1T?A@VRD`PJmbee-Jhcc&?wGLRG+=0*a!57e4?Rl5kugfhd7zoQy^8 z`B@aW_ve^Wlol=qC`yaHLsB#TKJ^9sS^T*lxG7<0qG%$a`EI+REUzOYcP29>LaytkJ~OCo6A-*IyEiH%63pwz4Q} ziD}o135fUzat3ec&F2wjRshH$cSFELgAuC*gK)FM$?gm!2vQ_ujYef#`TBgy8U*nY zj3uH9FgjqFfz~!4d%;u|frG&uQ9)twqu>r9@@q3#w39J|#Dd@c^$RB8xj%&md;<<% z0RH-`S5nnwV-A%Pw*3jt`YjUm{w|Ym$fsMaE@4xzP}WBR#u2RJ;TI!M{!`R-nU7Bm zL0Q${9SgJMj=|Ef!=Ng83j;$xBZi1T{{CJD%-NjfgqXxz*RKm7K(+%y^rNo;t-Ka7 z^c2}KSBqi+lF+FJ!6$b8C~B@L_bNqx309#`W9}UI-J~Gf3R;kT;ny$Zzz2N(&;3gu zya0Up>sM0SadwYL(}KZ`7af_X;Ox*Tou406PkmpioxX zN!ZDe2WnUlzX(e}C0t?yZA%y}4g>P_M{);r!0er{9Sfx}Wh+sXF!;^ic<|sqgL8ih z&hZ;?@Q3fKU%!&-Ium3d^Rh*xzn*vlL==_6rfo3{oWhj=eY}z<(tx#wQWh!}!t*zD z2o`H`g%yoIt&;=G+gi*(X*5C*k88d$+kq3*;?ilRYJ#Biq-5W8D7v<>Z z@Snjse*Vw>w|?-4@8QR;(EBsb#QTOT_l*i_JXMAHEzMoc4>e7T@d5=_%juKjp$cYeeaoah5;Q)A{9 zff#~d4Ef9CUmLT*7-yCPG_gimHBf0m?=kfJRq13up4@S7L=poH(5*`W-TKo-0KtkhVg7ll`S|In2cRy9?Y)cu1&Yez`t=d>xP|Ffn3kQi z?OZ>Wro<2&TBR}iAov3ri^r=Y?EF@^0LRrvD%CigNf8k&L6vCQjR*%$<}={{tn3;m zyHhOm3QWN7UZ?>N`1oJE^uY_jm%s7d)Yw8e_2LW2Mwxqh0&hG=dlZgtJ58%Ghk#|+ zir2r`YSP-9i+%R?p6I{ErQ6nUV~=HI6wjU?044%u$#31{u7bAU%S1wt736-mopHty zpsca;J48=s;Os|0)=^hA;t@z*K+`rT>jwR_gN+93qgJfI`t4~RJJ@Ih7Na9HO@Zy{ z0IvhOdIdL)7)fK+3cvF^7h8afV|ciC;P3_D>)%PW<+4oYv>w`NSp`*bcTe)pel)<0 zsv~DN$t^1df&;v1p)7F#g@&y{h-fwq=9%lie0JGIkk>!=NrXCem2Jn}Ovx`$*NpH= z7-$FP1`Nv#u_^k0Wf9!?_qr%hSB;2)ilW54(0$0FYHHyg%smB4GzQ7qgsNLXnF{kb z$$FwHS}cnbG0-%R_`+}BfAF8d;U2$>S3dMRaPWuk8;@R*i#((AStrlc9$Rnu;)tX> z^70+3&Y-F-hJJ*nI}m$&s_K*#kZ;{Kn0GVEvcyO#pezS6X{TG+EcNZZ6q@x~VetvW zc0$z}u?c_k`W9}X$)|yjE@ueP5tslX8GV8KJTPUp7Mrgn(MCl$pZ}^G?pj=4k z_aA4j24~o^grm`i$-aWS?I^vw*BW!2ve_s{jTF(aC@6=<)L5;oj3P7?W$;H-J{N;Y z!H)rbzZ3TGdbNUW44Rs0Lv$;qV2Ht^KxGVeJC6r{YXqH8YYSaw$}dAhX%bqu z9aLbTNfd3rW&{~y#pX#U!foA1QHq+(L4JP>1xc8O9+jzJ$`bcHco7bI=tFRxU;p3* z;JZ&flN{ZB39Tz;^c9&0kaCjFvh$+r56a`xQ6=P@ifg{Mz&sJ9&o*6R211^F0%j6; zND&@0n8?G|6be0Af}G7Oij5`-3*Gt=3z7Y$N1;ox7iTeWH2g4y_yrKvqvaQ)zC3sQ z^aiL6tXWCkpYtQy=15*g+eJ7DTq`y$!%7M%4#Rkg($c)7fDb#wDZo@KJn;F84&Xc= zz(arU>d7BoNhICSr%u*zlFSQX-jPk0_v}FcEdpx1m>JkxR2tW=?d0Ip#TvG>2(-O2 zLH?|&3%Uk~XD@4_~R!gWiHKy$VPrbY<&{Xu`&0mwG z?~py0N{oRiy_DMy2$3T}BT7DY65QEW)a7&FCU{Sc0L3?%;3sQFnsfvgWmo^^>4;(4 zVLR?%+2#j@OY4;Yc?|hv7GYvC0e6R7-HD^f0#y_e0Y;`^Sw=}En#lP##3bk}OuBD@ zB}CM=foAfM(;^|}`;%l3Ss?HW({vqTG4qI?%E3iI$?IEwO$-?gST`%Q^-5^Zrl5zS zM(_${y^lN>;F17mE#xWwEKNnrvl`b=1|dkXQ(8j6(VCrC?MQM>1#kV?tm?pU~^} zabF?A^;;OzLZ?C`v}VnDeub0m8Lq!Ph~TEsRtz)ve-@x&n4v>$->$p+xV9_blC zM;}q*(b_9wT4u51qSl{TfHOV#ltNpS;=aqzLBbDt`&Be>WEj#fuuC|(2D#CJ7(Ut__5Lf3GMlcKnyiODj`f7@iTP)UMBExZaSixN%I zU^h+jd;ISuPAEWMg9%01Ai5D#oY9nZ?o3X17{?x6%df*?EhZ@0y@*z0j5DB(IXfFl zsV6r=ixDEb9ulJzO6nd+jpombv}a1LsfM&s-g6e(yY9Lu0Oz^@eD^z75+$*;tR|Yx z=Z8)<1gc}u=-L+BsTZ#NYHzl|S(&r7OFL*)ims$)B*yYkl9a>SZDFK$LRVPQ{b4Pmyfl^+;6s#fP$me?!HZL{ z%;Cvk)vWUOL7Q$QlvD?bYLL-jJP<)%uPPcS>k$@)gf4JPj}YlWK^81&%m3SVOMF&kL(G5QW5}d3?*%h*VU^hkCvnrKhRbMFcEt=d+QzMuU3XVNt= zmYZrow%okU#k@mT(tS{TbKG>&_RnsSBg_KjmRT5jl~N+vWy@_);&htu!VAyfz3+NA z-g(K&&f+%2*JvvqL~azw?GNyJ!FC+vc4crU7ZB9=OfF*bEGE<#SkV*^ z7vLyV>l$-d5cCAAth`TW!>(e#pzxZJqy?XU>)%dX#RH0u&oQ{jb|pGRUk4_|W$qRD5R zwpB+0>OK6eui+byds^mhFKA`ds8F(Cu*mUt^jXnIlaAi+U^yZP)tD}*&7+ona*PIv+}Qv)I}kVgREs4h^1 zQaTIbF4E~Fjn1xw$3P`vvkx(qkaBKHw3jTfWA zu<-XOrqJS#aPI>b1>js4fbTw;I{@D5JXE?Ugwe*^Sr@gmp{H+gKTZoQ-clSDl2~O4 zqmIFzWg!pz*_&q>B+~|LD0pj^1PyYykUV6NaVw82D=7V2c z7GUtvzxg))mp}X?{J}r_Z}1xreGV#kBoc!Va7G?J3kT@~5jb%UPe1cBEbhnn;H}@o zEyu@r+wH%Hs=f0yqcQeL%tE4{5NsnF0260awn15TB0A#CeL4@A z`90eTWzq;$z&JbjFblzmU?2~_WC-s!66}0#WQel+p#7LN6`HDqnKKqK`J6d;RJ9U8 z&TWHpJ!U^5=t{N_#*fgp7A}N@itv`#3z}6SNy)0Hpoo`9QDYvVLf~d&WG(?aBZH3N zD^_FMGx(HMIY@l@C-45~#RzbYD}cK4L&kG!M8}po3OY|uejZNSP?e+LW-rdSoGY8E zmK$xF7jf2MuAgo?^e5K^6kJ@8n|-y}2(Bas7i^X#2!e+|E%i65f$@0X6>g&;JC^Uik|C;qN#2U;pq4?6y1n^Z)*SeC)&j9FzV4 zXvLx8h>B^#b%RAGRC_CMet#@zBnO?1J?gR&9)RHJnxn-It7eV5qJ?o@iH5LXJCOPt z;2pz4_BLZ>URlC%7|(ztrO1Ub()}?0Op<{pP?~4##x2%NEQ$0CBFMR5ax*qfCvoYT zCwtFvC<}$r(Sd+2B_uNex+!IRs|qa~3A!XR97PH%or~%MRx%EPe7?CKrLggH-g);$ z0XWwM;F)KxlIgk+z@VEh!!$BshPO$zF5#z19-R8p24P~3mO)C3DBR{aVj6bRigGO% zV9}8mU}`kgT5d|y0&QzCpAmH@D=$|AssLYl>lGwbBBc^4@rADe!~cwb@h`uIKl^tj z{=wfb@lXHB|A_Cru)(EYge@@>**bB9g(Ov0o4@-GVA~MV1^>WW)_bD~B40Q^al_ zMRJ_9#<;yM_T*ea+G>TRzXq;O%Bqt?F8qmo@lcgQRYuvuNIDTav!45XVmg`6K^{cC zY7k^oz)gu2q7wgNz54K77Z|{~E&$*E-j&3;l7JL%CEh6H&~vVBT0YDq_%Pv?(Oqkd zXFY63-n+}(dbhfG5+d5{0Uxp@fdgBUEz2B?*D{WPu>O{Cal*T`lzrF4FCWj07*naR9!DP z0F666Njg=HTF`Kys@6Deu3>xjP0`~U^Fc)QegX4H4Wz`VEoxZ$`+?~`m7D}m!w*DR z(M`jQ#bvLbwmC*1Fj!FjTZ%!6TQb|vC=2JD#DLFCHY8veC=w#f4@`@bTfd@OP(nkD z2$fhUi;CHS1<^za9r4QuV^+{3Ib?=bO=1vH+Xyt97X5CJ41>BN zSAuv3lZW#PR^XT%U<^&77FWB2mtUurfj{TFKl8B*4B#AB0Cn|;Pp5I>U6{=@$q*5` ztX60%dgN1MPp(h_6$zs)h$;zs&D5K5I>G6}Ld;!y%x(wx4)GP*Qi#8P}0#P@--Pe)iJq@QPmj2J<*Tl{5O~n(WFebp~VJgTWo+^!01#I$C{k zOOe-LXXA)vCP20paL%v|mR&bn_K2`dSk)`sdUTn`5s4==dNg${7UHXoMIkIGHUS=P zAkazAKk5lQ>N1Z9)3Qk97iW3ip6nLR&Q9h1B2lX69KUmtXjC=?3AxVGaB+eg1I8&} zwJOn775afILtwKxl3QIU*c3yB1@szVn?DgqEm(3PbmOwk-iN%^tJMlgM1BrHkF{kv8WK4rC=7!p-1ut_kZ@nlkhxO0QJn%Pp5fc z|DR_$?J%jxWKM4Z=)@8RNEQS^F(Z zLf6qOvw+!XOygF>H$}T56gmn9fYgdehy zbV4AIlwPw}#U+uoPFx=e(CskocDS}X!{uAwhILz^YbxOa)a4q!pW(&jK(AX|CLwX5P-|;Okg=1SX30OujK|!GavLM@?7Ue6lI5D+=_ufSyTd; zks!w}o?d)R7Cydo3rf>r!h|vyxHu!V3eUaz64rH%55N08k~TD+%y`%B9r`l@a}w#TMXP7l0R@dp-#b*HHbQ_t~`9 zV{BIR7JZ*@MVjCY%OW@a=tdFT5HLKxe2jHdN(6Uvyb-W44H3#NvUBF{ISYI=hTS5l z^uo)iQ0UqQFF*e}W*uaeMMWM9kEerAQD9tncsxwWDP8b41nsc9zLhRTl_l1?6YH-Mfnw4e~6VCHo9ny@r zUmPMS(aVB@ASqWOsuD9(7TAjZg)D4sgl;X|^{hQms*#Rl-Ib`0J1oN>;|&v%s2-Gz zG;6Ut8RWfVAtv}&)Qnrxhy%x%OaN>fK(7t@6Q&tyeER-hy8r>taRpG%JasjZ8(wv_ zI(j_tC;?MJubw#_kyX~s`pe;M8fthyul9Iy3n;ZOdze}($!cKqG{^dI2k zcf1d)ih4XFUlWytCBp@&W+dWnwU~#H$IrE!NTF#BhJd!qxqj3N2#;Da%19Sr_5g2P zma72E)gEtPVFK-~<xTIbU$-Wxx_rkno`BeWI*Te7Vx#h(b`td1fXOpHNtF%wVdK z8ini6jh=Uu{Z_(Z;7Uj62qbis32kSP#vr@^k$F>(!DOY7SH7RTPy?Rh;}578U-)TS zhF%_4>fgyuBNL4eH<5DAz67GErV}QbUJ$7=9!*yHv?kXu&Kq@z-J>)I^)@oU43$F4qsfA_!t3w-*%&*Ha#>x<~eLE3J4atSVq zmpc=UVU$DjNke~kBk^dq?Q{$GbK0-7ch zV0y3c&ebK{aoc6+Fyrm*5lpfYMJATvl_u7SL=|BZg(f@<`GB*9=9fe9-y9~)GuNY= z98V^zIj-UMl4$aWl9JJihnP1r3q^`&vU=p2bRIJ2Du5ma{(5b9hUZ^-3C~~o7Vf+6*Kz6ScAV`_ zup6gL93mhYBj))OZ|u&nxpaj0-2PtJVDRmipTSqZ`Xzkg&X3@??*C0Z{P-jI=9j;Y zJ0Exm@A;JvqEIt7s}66!{5IM36-8b_GC1^?F5M1gII|Oo<3U%lp7W!}+|nsXFi4@! zax1{QpPc@)lM}hU%c6xYNWWz!0D1Nc>h)SA)tt+ z5LhJ#s^~InvKkC53l{f!#3iULVB8pO&SV>5(N7aRKPOdwhQ*r6$Jx+?8;P#YuEgT& zz_*x5#rx5V4T(smjlxGRsKDp>{6jte+;eF>+5xer*c3)Gh?xOsqgK`gvD%TLn&?s>B@BhZn|IN3!-k-Ls(ykSq^G;lh2 zw2a>>TP)Gx)z@FacHH9jTW`0(NWE5Q+6p0fv}TP62j>P%E}^4?@sxcQY8IQ)VxTNqIu3CF z!SSZSf=NcB-F1qGvPg=`VRkMQOXX;D5|1(n%XZ+ddoP%P=eYu?XP&&0NpdUzStN$` zh|W3&tJOx#6fx{rwSe|Wi-6_zS28Yo_bR7*TnCwR` zdZx2-T{h1Q&18WYF_Dc(2Arw{GkA6T8vgxX{981p!GoXug6#9TN<5oRahA4t&+T_e zF|rHr`fv?r-r=@&i_6_H-gxa*G0;$5i%m`ToQAPBdkM@2!LsKjCK2$VTW({mkU5{s zxRL=N$4nrmO;-=b{W2kl^K~=|O-(8-lZ%6dkW%22Ez1a4CUGpL*8#f~-qP%H#2Azv z3^_qF%|>!J!O@2t3?>wjYApeyMSv|j1Q*bsoWjM7<`W;FvX{3#8x_h7=$UZCKy^h| z;uHi!AV500Y-`TnztN%bhsd!*{v3T8Qp9}^U8n)ibpd$#TLc03A|PtW$u|??Ng>u) zB$!aGCO{b1gcG+&lnryvEM$INc$M0;Uo(lNkfiH4-kgCCI@gPf08hLD`-wh$+$7An zrM(4{>t${YV(DcNQ^3!zy^b&a-+zI&uJQ4^?#3-gw@}K1Kl!tNjZb{?ZhYWZKZIM# z78QK}rWw0=!0m6pP51%dx$<4S_m21CZAZ5V?Ut!OV^DbOjImwh23P?UZ`Cc{eSDj! z0cAwz#w{rv9j^sI6A=_8y}Cu@H*S>(br|@$yFP(- zWH!`ABQ{>`k?hlEn$LVmA?ZYySUI43;dB8B7;a!(+M=JB}`_ijF zgHaVWO@-sjx8RM@;b$*DBWl2Ua|!R*aMtf|oj!(($40d<97o`=P(4T@k}VOF!lkmt z9k(;Oiw8o$3V9TWyK`iz3Cd}LZoHi-^zoAZ>*)R8laG_YXk-2<$u`+AjplZ|ESNPGcyaaM4l($-p^cM0O$DpLp}Y(PgA`vg$U## z9dT>8Ddf0rtKi5f=j=+fSsqy4Iw2ErDl6(bKAdvJ@mb^lb^i4zv{|;VD${)x@Y-8% zV!O*6eio6-o3}%2Co}cg$RjH4)u^%N`NOA5*tzn63&mNZZJq0r3EOb&L_R<;e%_QaF z!~s-PGGL4 zn~f2D0yFz4B;o*u{4H+brEqX?C5$%f!ubrL<@Yrx%DLZUd3>Ym?s|IylVnahj-p2ga3Joh^C=?V?e?W%- z@)}$0ra?L*-mWdbSEBK<8rdKGeF9M;1-K)rioOHnF`GBmy%>=2C(bk z_rmXsE&Cz>3xUK^3M1cB8k6k&09!IFrIcIzXkBBZf$Ku}Prjh1S%Q+(vmEI~DIeEuny$G+kFr>y(@f7vNR~PPI{HMs_|lu$ zxmi|N>#~N8ob|aX(@30YQ^K3`h!=+$VLHVfx4#2-P<%5?XnB~HfS~#H)&lm?Gk7;- zc`a{ax&aG6M&S)^U$vmC7z^C`nBMz5oO71*I*+Q_VCpA~qZ3** z-w!AnkkG0tk1B?1Pz3N*^(MudG6a)9ScVaU z980>8nsR6jK%HEEwZX(@mOD?s;?K8U`^(ooNgyiIiP-RSfQs4!q{~$N-c=3{&|1i=Ft$XfPHnF9n4D z0{PGqPe~cb%RHp)HORHBv{`J|GSgDLPH7-wm~Y76&o0ZmlSNjM{2c78Y*k`8opIlV z8t^=yf2e1kd_GZ^&Rd*D6UG|RptJE6iLK9cUOtH`S=s+{E?@kDvZ?Y7#xPEf37n4! z6wf1JfnR(39s7-gDCn`S8VS(&@tZH<@$Wo>YiARld+8PY{ue)w5C8Iq@aA?F ztblfYV)4yQCT~$PGZ{xnx-3MNmGYU;IAd)k<#CyfK|0ve!(`_on-$%GW^Iz=vFH%zDLng@_PnF$~6x; z4{1rS1BQTR|2}H^xyq9u6u$mG{f9gOY4iEo+(=NNCEW)>M+M~z1h+s5HISr$>iTJEozrv^MejU3e0V%tbOudkauDgg zb03lDVYe|Ts}eIe2=v4&XwxOYI*c-?+7jU3KYmGU!MUPiE6uIJs$5|j9d6xR z#!3GcUU>5jG4d$e+tAXtfToEwE8y>v>Zaj3?J*esy zXWKsrR&U26n*@En>MGG)ZV!ENd6>||aaI?W` zl|+@t_k)2v(j`gya6-l8pFoPVMomwDnwv;;m=~uXx&zaEq$t-=-2Z!xB`%1w&uqRf zD|s>(g9=KXa1x~|%#>`Co53c8Bq5F!tj`rYB4HGXxGSp^3)wg@@rebHqY4WIixx4R zivn<-k3XQE`@suIB))veX5ehg&JT?AoUFky02TmFI zVG(qkx2MdtM4DwtH3)OS)GO3vztPBI;I*sq?Ddz$*1C)|!pL&gB3jvb)0>|Gmpm9u z7FO2Eu6){#BGcW`P1h&9vg`4!C!a+B^2>Plue=+dd+;Hdkz=A=*MiRE;8WhZ1v?Wm z?*QDgY0=%fhU!@vGFV0<&!RCxL1sG7vRLs7Alo8-2-j8 zHb{3QZy*a$RSPL-bhC6A+*0s1S4)Y~R+4k5>H^-6QfwH6T59V388n(b{%N=>JCAvk zn_XA}G;w96l0rl~ak>v%Ed7{CKAK4$@ldEMX%t ziE}ldd&Z45MGK#1eB!>tuCc!Ty{8kq5rTVVsnOOgrg6@0KRlN=ion8*g#wdzC~1yD zu!9A1CQFaOC_!Y;e9yXWE#M|um^2*a`$D!Ny%h=2a$P9zs;MNifR3MaTM9{w8=NWd z@JHEf@cm|o!mWm%@`i?70lukpGh(=k?dK*a^~nRzcIc zT{k#AA%irE@QR@?HHBT8PEUoXNZI^~yV4$yx%abwyNOgcUjTk|HBk>hP)Tc#X*bCj zVWc~tqcFz_G71^DMd6A@QLTj~$N)>;_&3&6Go5Q>mUcPLdrIhPuIWet$~P7RMkvCe zTz4LOeE9AU-t_lyGgrXl-@ZcOqwo(_Z4D2HaiGF6<014BU?0zYJ?kRdZYmS~K*t{s zWf>rv?Z##0hXtmv!c{QJi5DOrNZ~oujdTR!+sMPN7#LCu=U|%2u5_7^NFfvP4z~I{ z*tBZtZRw2|#QmA_YL+{uBF8yzNeV{E(R#fkr^Dnil^r5=8eC`* zX9)=d*{W$qYia53<@sgtrpSvO9&xU7UjTmm?9++sLSAQFS1l7g=W{ZRT!IV`TG% z_~unf4=bqCWp_e3;FPU**yfui;{qJ7q#!_{Yt|UH6QW;)?Wc5rSCgy{<#sBVFJNI) zkXxF*3bb0|mWJF3Axxq{tz5!aw;*dq4X?U~j>+!l~;L1$vJ0vrB1 zYn1pKP$iT-30N_x+u%lo*5e!<1l`;h2w^tP`Rn}uLjic~t5+m}m0f4l#8wv0N}}zc z2IOefU^nvl%4^!LVfJJa7Ah&`?0&RLqH>kEG;Xm(G&PA$-M9>r5y_Qp+maE=t~SZK zn{UgfA3AISyqU{OM#!7}1kXQvHSwnAe96{ayz}yfB{w?{zjOh$hGCu`-GvOvL)?jH zL6N8ZHT~@*<9^Sn=bSD88rNib9N>D9;iNYf+QV*(j~^Jte*BRuiLiYB8JXHl`}BMkiung7Tukq%EpZ$(3pi?dztbr0P5 z@XO~qalaz|g+|FL+;`_;M}Wuv`icNA3s=px#mE@=(!!LDTow&^B1CrON0QJQDkZbv zis{o-Nph5-=7Y~LZ*{I@MJz?D_PRnWyu=?2oB#kI07*naR1nR0voY9)91SX7havr~ zH&nUl0`T0^SCStx8qM~pAj-@)ai2HH7oep+S6V{U2|jD>iExvGCuJzNaMM7g9OqP% z`S7GDvrRiL1bEb{LSZXJm6M6j0AE0$zxoCD9+=4TH&0wiydAh6od%z+xOw2%(X$hf zRevr3GPh^H&^=bNZ-w^YA<=ra@3OixS+K<6hig1t6_|bhiw=RS+PbLn`^>~9rX=(9 zFJ3Iocu41MrbzQ|G;$>-$PEWgN(4Ae3M+!LM+|Xw3=@!T2EV)&-*ZI*lL85eR6_EQ z@GJ?Pm_^G1_kH59H{jzBUrp>DNuII=E!=0c?FvP!v0?;06`aU%_8}^)iVoZBeU72` zdE8+UAgnQwh&B>YppJxNQxuMd6BF73EhX3UBGGb-3Fs$>d+t8$_kXh&_)Qmp=YRO4 z#P*W3Q&!NDkTVl(cexwjKAVSv^S&YRgr+)}CJ}i;p8M%Gt11Wad z>kM2O(_ooq3=>U06Z&bveGh!%roV@qc@rOhsV3B%6@EL=GBdn@>!E0owfGLm)w30Ghl&;O)b%l^-tzw;>AfXS%EkZXUSSFhQe7l&j10@jp0X@9AU{-3Fh%tK_=48tsG#j+A){sId#U+RW} zlk7|Wc3uMHpoOiG;*w>9RR4I3-px0%*>2r$gCH3>u$?TM^dlp(^z7j zy{xl|9W-lF@bNM~#VV?Vc$|5ewOAq#g%1 z=Sz@L+dWVcEL6a-+o$jleGVFBVW7yf=WJVN=`A1oIYkW986JG-ftxO3H`4(;_Bb&B zpiDXcfJU9V%K8A>1=U5H`30m!2Odx>;8dv;hO-ftv}z7S>^6#LG1o=P!LUY);Be$B1Ot1Tm4ej%^s zTvpayj)C9HtNDGgQ;lxU^7q)w$H*aHvb>t(9XpJ9T0r3_>njU3fm9ZoyZ@Hks^9eC zdFt^iiR&Z!((^guY^f_I*iJ&ykuVBb`fHe~6xUqw`w*#Z_R*ghkU>$6I0f?%@rSaY zp`R9Uh0UH+v=~X_8Fv%vRl;e1g8T1%@TR|qn<)T~K72K?O_tVwuMN1tTOf-t28&J8 z$bO#GXv7-M^{C60cp{1+tERz9_6&>KAUK+kl3kfaSRx;$c_>2~t;wB17(`AjCtG|5 z^S?^LXcH818LqY@^_AF+!oaNrjYkY)7IIcV>uKwjsl_ZXnw=W`O1LwZMDnaL6bz>T zy1J4?WCppOU7K*<=Rb1L_y4hPK9vq)u(G$lyX)L{0K5TP&i8yk+C2NxZD!tOcAOZ{ zQ)^H49A|%4TRz;CNMyZp@XljmdrWf?X5O(C-YW6@ryhYk0wxLDj;=jRj_a;9PEJp7 z?|p|I0lxa>rxL+>VgRCN;CT}PKBI#ZI=zAl9%akuZwJF!x*w1h$^Oj*7R0=>rezsh z9ZH8Qc1oN(nMY>PpH3M!DC%4QsM4g5`@V~!%QB~mswQJ<4?xiVdrp|8<>#7=n#p|N zIkEXUiXTGeVUVn#A$UegncBSfePALpU8C52Q1(oZahk@AXEW|Ru%+0yAAKqv#A2<= z0OBX^I_D$6vsa%{Zw)(BMWjS3yxQR!c^jh3kkF}bL1i_>e@Bmwuq&m49H_}bT=N(=!Jm*j^21w`=o z-iBl_dJF3es?LfrNeHy&q7`_Fv=F6dKq%Fi{4;qsostn{VNovvz*XguXdlL1kEo2S zrT9LQtRf6cp7$G+;C;;d4YGwqu~`UiLcIo6-Qw;{$ujBC$2HEbGZQiUI5HoBmp)gz zLgkJD>r1W7!_F}Yi7v=oiFxT>e)Utoa?lRoZ@zgY9m-@in1p*ieb^4@X1dpmJl*79 zKmF;?65$bAU6aO2NR`h|`` z8k@GmNL%tfZ{9GmXQqm-!RhInVibDUogcsH@8M?Ng2$h@nmD%5?n`9A+^NfsK3j1K z8EVMGG-JOKF%5!js3k$sr$M6B#>vUblQ%V;dpWPmEL+*^D4YyVCHg#zk9cj1&VmgV zKR4~aNH!8O&t8MEU&Zp)CV7e$XR2eXPoj%PnJN^j$HMMQ2pdVvN{QJpfLYXsk+kC^ znFB~*aJ|2+*mCBeKQZ;#Zm%I~jkdXj^+rpWCTCUh2Hfc^w;~Z3=Q5p^tF^@q zG8=#5uESQ~?|<*d$tAM-vipwg@g@44Ak0fclB=Y>CtP=!efnd=k{7?EX z3y>HJ@RoNd7AL|cvS}<;jBWn #?ousdTxYsykUMuw#}%3w!ErvmQ2|FA@$M<01A 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 literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/charles.png b/sources/resources/assets/eagler/mesh/charles.png new file mode 100644 index 0000000000000000000000000000000000000000..a23587f5673e4aa8a93d2c67dade4e0cb5ec21eb GIT binary patch literal 123138 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 TO|qKo7OBaaV7KsKB75aObIRM0 literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/laxativedude.fallback.png b/sources/resources/assets/eagler/mesh/laxativedude.fallback.png new file mode 100644 index 0000000000000000000000000000000000000000..27b1f9ce54dfcc7b81164e817a7c94dae77956fa GIT binary patch literal 30405 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 XZhS}ZJ+yoP`Mj4^c~>TF68e7t&85+D literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/laxativedude.png b/sources/resources/assets/eagler/mesh/laxativedude.png new file mode 100644 index 0000000000000000000000000000000000000000..ece3e4a3e3689c1a12fd98353709944b9f44b7e5 GIT binary patch literal 53774 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

tN@6jg^kC5kk4#9<0G!ES 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 literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/laxativedude1.mdl b/sources/resources/assets/eagler/mesh/laxativedude1.mdl new file mode 100644 index 0000000000000000000000000000000000000000..3f4d94fc760c6ecf839206817d022134eb1778af GIT binary patch literal 4017 zcmZvec~Dfx7RFnGh(ux7MOI~x5?K@#W;iz>7(q4x1!a{PWEl_`1QB1EL?ZCqt<*Cy z?lHc^C6HiJF${B!S&ZhXN8oCjZIx?nZc)|Ot13^Dh~DujhqxZZBlq>c({+gXla;siB>n!r%12&sV!Sn zT4(U7)fsfP^*XJM4P&gHF^iy(_w*FJNhMAF?wma8fA6rF^D61cPwncY>|%0Aagh+e=?-+GV?U-54`e5_1YyzdV0* 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 literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/laxativedude2.mdl b/sources/resources/assets/eagler/mesh/laxativedude2.mdl new file mode 100644 index 0000000000000000000000000000000000000000..1dffcbce842af3234dbd8677203b7861eaec1c88 GIT binary patch literal 4017 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 literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/laxativedude3.mdl b/sources/resources/assets/eagler/mesh/laxativedude3.mdl new file mode 100644 index 0000000000000000000000000000000000000000..56dee1c72243947b0fa3260b6df41910d4548bd6 GIT binary patch literal 705 zcmX|*O-NL66vfYs^U-_bjPv2^xqM<+Vc;}LhQTm3e#9)=1sQ>e^UQ%a5HrqT1VM{j zxF}k*h?t6uQqjVN+XrndFo+N-gO)*VS|pOR^4$MpW^wN2{?7g1|LGpNGlKL66awpGBhi?7tYbMv|Td$-o|s}J7N-@tx- z)${rO(I>R_|Giu0{sQjqK6J1C9aZ;l4+7hrPraG<%-$OG#bq_ie=7rp)-3l|1~yvz za?k8tfaE=CUh(qY1B{P**+Mj*D_>t!`8PitWP38hxi8;esQl~aeyQ1c-%$CR{@%AY zD*yQ559P~y$=}>B`@H;LpB!fYM@H3s$$#g@A2rK8$$$CtPc_SblD|32eaYY4mwS?5 z@@}Wcyu8d0_~562Hp-6xYXCvkAc>C(DL+i=$1&0XG}0h+x*>!~!{h-;C~-oF zkcL?`_6VuQ8e)&29Z|%nc63lN#98A=uqH^NR8sjV(il2P<1k1QI8HZ-6lsb)P8p;I Zc?Ts<5+-Si)nGSC4b~*PiHV_X-w_a3$}<1} literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/longarms.fallback.png b/sources/resources/assets/eagler/mesh/longarms.fallback.png new file mode 100644 index 0000000000000000000000000000000000000000..b5065341a6a5537ea935e8a0cbb2ce1f395e5a0c GIT binary patch literal 20604 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 Pb#a zDV7bQJ`->`WOjH?Pndny78rDcn)y)~bb}aZa~?uIWh1xX6-Gk(-}O;YOE;K1K?<0! za~`I1JvBaLYR2VD$<7b8h7kN&3bzVwCnQzJwmDUkn%p_K_k8CiZ7M*gf*^iM`p=dE z+iy)%`$axX`={abU0t{iJjtd7QklEM`GqzW|HEhTF+uZJM2a5LCnY7WVwDRUnj?;` z)T}A+WVVt~>(fB=j*M}|2F8SRN z6mfl(i0~swz}3?L>{Ml-7zk!bY)MnudZN;-R9Vq|21eY+b^gK;Z|@T?5#I1N{Q2*e zR?PQ@Xddr;1kW#QrXHv3D!GpW?N-FWDn+3+9?<)xT`N#3zHykMh~$6a+XL|L?%JOs$PMZ&J`>9M^2?+*uLFh1B_GP>5l=LxD%D?|CZFOI9NVf zVgwwmeP#Oz%Yr@!vb|vyTEbe>W+J$wn7qe>gI49T=t9}`(qWVa*~Nb1GYAonE&c@d zo5058F5)2c%Lve$xH1=B(e*8FY(%bA_L1$b*SdIB_LX&RY4L37`QBe!b}xLw`JUf0 zRd9Fudq_cO@dNeX)Jal6`vMt+y;e?ri7wdhICtnsF1tXtquZ!^Qp}LkMgsC8Al~MX zz$*c)8Od5#DEP$V<8T{%{uU%}#4+`e5H+C~-Y!~}p zCvbXsV-fi#X@a;Dk`uGQ##dhq*%Ee$6=sHPOh<9`-@dKb@*n~6p~5N=2e(}491^R^ z@2<1iqSD_BluN>S;dJ-LvUGtn4QeyNPO`wG(9LVr-Iu5JD$twUYeN=IKr2Xqf>j|1Wp%i`l<Wa+i#tn82B%sbkr`gg%B_>-5O$zk;A5&yNXto{al7r|Ow$zH z&vj3dQBC){W#z`va3W!SXoc<`kZ65bFO`jGKS`?0_q@lfaEao6sVA%{|DtUMZHdp5 zMP{`fSs1N!^Y6bMDK;aDZ!|Muh;!R6y@eCodHEggcEA|o5McHt6z{ZQ+ZHs_VfkCO^)1+-h zDTz6!Y*P&#CxNp#Uq+}Z44U69H*h2?`+NV*3}@kWm70K`$OCD_&9dL{KXE&(s@avc zC8(m+l4Rv_#7mo86Uc$Ui7qDc=wXRwHvf4LwNf0;6+^VII-rtFrZ51KPCk7#sjQNM zYF|1_$RbRC?((kE@gB>;pnSTd)_|({>PnLSrzeEq+6hyF$}Crtt-BPl%&~H^x*J%3 zv{rk4>auQ`qv?NW@ms3M+ouY|)25-wn(buH+)ul$@WE#YRJxa#!9^!_BbA2vH?S7ioIGrlKt~NqaRJc5-$%HrSpKL;W73R4cb>?0vp$t^Ld_5Xo zJT;R9B9>Ky^H9m3XOP+_PW~HAEL2dUGugYoi3<=0dzs7zg#M;X$Tnf25uO2TzsYm3 zz090fS?=twJH9>Rzc&_<>EkXhBaKPSF7E9{TPSdW7EWH9Hj?a7!QTLlHO+0>eNq6A zfp?M2;Bfcr%B2U4c8KGFA~T{W505&s?J+wtl{HuUkO=%D(_eTk_z(Ftp%3E5PS`pS zro0{J_j$}F|BJ}`a!7C8%@E!9Xj&tBDD{>3pr#s->Z zJ()UW->hSkzynqV@C)>=t4f%BrMK)I%+8og77s_Ws_ADsj4%8X8hhlEIeKH)WA)#*O31^JyZ=kKPS^TC@>RL+Gzo+r3BkY zxhObuy$eI~>QyFzj187di>+7y@-PI(y=AFf#JwFH&dfPu9kT4kKfdL?oUNg0);xh` zo!bK9v^Cy{$Kt*?)?%Jju%}oP4 zPY(sM&vt8hC5r-*&EA+M>aJYZ=xYD=94h-~)4}!`M}hgw*hgDf6SY9_psX zMN~`jW)W0*kCrycgNFPdH1f|u?}&XXw%_!o6mYij@GFQZ&mb85^Kxn3gLukzyxTm- z=z|GD)kwWh^^E@WSU_5*j#70HW`j+rZt@iuT$G^T7a0gf4-FD^ZlE+*4Z=O*hw-oz z;)2xDB_$eLBD+$F+jCdV6XoTeaP*dgyLQ9~_y&qM}X5abp$64FF|`qmIU%5OFs@>eDh0u&fhhIqy&TZlM=2A1{wgeCqmT*1pId~m;!(*9l9 zp>^9!Wwe`%lu5YEpHJb2m^FU1BZL)&0(hWNwO^1JailSgocxu@D>Y)MG z*?>vzIN@@6$6y*G;9gYH5Po~D5`mk^-!#-aG=|QHb`X+3?h(*^n_CR8ynKcSyPXSX zMOdi6^y#IivMSJ9Le3=%QVlMkUc8+l0GfdL6i9x{4a22f+}r7zdJcVBBA*XKA~1?_ z?xJTXyvdvr$N2ac?p_>J5y_Kt@q>*n8_q}6t2-$V$*lV~^OqxGJ97?tdUr3w?u@tG zlTGRB>kLl1q=Q4=oV9)pEqepa!CN1Rd$U!styOj(IO)O+KpZav*rjZRXWTA)8NbA- zQaEsVFv}Fm=x9JePz|bD2`wHomNE2lmUdQH(9W~MpFaq+%I%GH!+*-@Xp%q+`66>4 z>TG2X)k@13WXLo=iK43rVM;&C80>++Lx(ksq%~s^W7tWw$Gx$f-1z5;2!f2~AaD5f zw@NnNV}0pD0w8y6nXd2$j~vxKgX(*fbg$4=PVya+fJ9NgYvz-%lEWds@k#3MeGAvj z`-y%U+gy8L4H!Bre8=H{z$PZ9N|)8?YX>qw_I>& zS<-fRotib#cmSUlng3C`>;<~4R%x&Gv6elUvq6G~KOr8$yi=v`o3w}*x9`-+;{3h@ zk;xtQJV_`|K?fH`zrzE|Pk(Z*o18VvY#^U*wtvb_zoVw^<}ssFJfrAD56!QeFIo6l z{86c&iccj}H-b%p+*!5xKK0*IAicc%wxgL%z1)R! z{ykuy8ubLn?v0h3a7g*LY>Cq@5R}C6JwY?6pGu8>1MIH+=Xu%1^1!ND*yBRiJTc%c zBG!z#GK(?zSl)u?(YXYDW708{W=L%gJPP*jgyo+J5i9ihZ}eNA%~9F8uP`~aR-ZE) z+L1Qj)BN^?_#SYL5Pi7WL@H-{n`j3*n@lZ2^dC0iz$)W8S{rSV27v`Ujaf{qxLTZ_MVSt(4nd^Up-eaFmFamOq#X#33HQ9 zyp<>PR_C^!3}+q3`-n7!{mPUiQ6slH+bn8C)H{)=QEeDdkk2_f>)~b&V68nP{j_X1 z=u5$_($?x*Mf;gvC-)-&)JKaek?Y%bsR~eAb=$J_PDg(qdbejYHoyQh9jUufWM0Q{ zLK5U7E1sXpZg^Di=zuK}iPP2ZIcn@5w|kHMd+cvbuxz#*x#pd}!Yx5dsRir0;`iNy!2EwYZOc8M0D{{Aa{u2 zN{+eOd@%#;s#3hEra8n)zDk?abR6drFDZ&yjTvgJJBq8YG}z=<6G8dEATeIT+logR{%G7)*1bTMc8=v zCSbAI(2~g*qKIN1HVMu+eBQN$)0q35Aywg)!QuI0UgACBpVrK86&ZfujZ5ABX^o&0 zyHzSI9KMnE;xc(T$Iq#)pnxLm;IH`im?a~?HBI9pns^(kS##w$mB-P7++VQEAW(wx z@!Fqt8B}Z-l3i_{xcZiXIZWb<|IuX5D&ajljMQC}7s3H6T(~i;k)U6R7fZ&Zs?s|Q8 z$$B64Wi@rv4Ov2->YD2xGnNYH2R)QoYTG#PO!%-z7EXMcSYGD`!R1rL%x#Nuj< zQkdHRJ{vWQQmGgnBv_;&FW<=Oy3XC`xNC{Mxvf!AU;tp1O^T42P@^Fn6a8&_EiDo| z8cx`;FA<|}4aG;@>7{}25Jw+&kH_J%{+@{aA?rq&c4MWckvL}P#QDT|_oIfbWiSZV zB002J^%1y(J{4bh+Z^xj+QfwuK48x<1Qz03;8WQo&Z#kWS<=o`a1m9)ri%;I-nLbF z{DNlvU2}xZyw2dvj{7{aje_fV1dOT3NtolzR+D^Xwl{KD=2=*Ho+w#!7t-Y3{bKkJ zm($0BQnxrTuoqID32#y~nP*o@W%H|GGuHS7jbh=)=d|f=&J$4c2Xj%6&4t#|@4->6 zSE9hC{MnlYdM}uW6_G_){?-VSEGi9N|L+a}8Oz|52A2=$*+jOrU1b!Va|=nwufem?k76&cyOk3vm!S%R8?yFTh{ zEl4O=0e~(R_kI#=!nt~UHKGN|?Rgmvl-Os;ay~VD-7rBBws^4m3@}gqu`Y-MN3_hw ze4jvwq!9XZ+OE6KD*mTIDXFPhr7<0Vxhq}gXdVA+(=2Bz6}-J@UUMQqWqOvoV^3vt ztHtHvgAy}j*R#W8m_=0CA4dA@>So!nJl}_5iS(eTE-R1=3deW0eu(uPavIJiDgm&Vbn3rO@-7yoS`RBj*nle-EYSJyb-fVBs0IBG?~j&`(GWh zIAVu^QImOXMbK zW42$ki=Aff{-S(g@zYB11s=YhdrAg3^|;>m7p>eOoq{lX7OWgae>9t$+XqZmM!Fgj zrz&fyeEnq-AtI78r;0-DJEqlA629ZvL{?WIU7R^-nqnFhh43%1NF7?EaMLHL zH2vB_9-ox222sU3ZqMBu5ws`c?GV}STB1NU;AVy{B(fX!K_Ky0cXmv3SL_s?*+hNA zt`9QO#1pMf-?#CUI#i*c`ILCOgY+}uu^JEy?`N9(%%5Xq047B*<^5QdAD;~Zr`xZY zSeU3U=0!owJi4st* z|A_zhid%#4BkIz+QlhtaB*d-rjBuS`57y38&Dy`~Xp#2S9fMXd+B`Ik|{|lAnZTst+wtMkxR0S)G z>r#!~NY(5&#KOJj(*5j4m|jAetFotSH|I^B3#9+Kgp=zPz6~LQJJLc`GUb6?+R&%- z`XhS(e@Q+L{>xHxO>B`|89bj{6%b{}07>U4tqZ6(L8cM1ad3S6m*)@1V#oSg_k16+ z#9fn=s!6!Q(-YL`rnz={c+f1>=Xdu+fPiJ+|0F%p{9kYZ0lRM&ge8Sa6x2SfI3Qbc z2~>tR(msTf1xd0FeV+0RnoptcGsc@|LkmWI6gmtEIGC`?N4)dMMy({Jtda!#SwH|o z-Wp^wR*gmA!7s=~SMmSs;`-0~J4cEGYe91@lXMriySSPvhWjf&cEM>v+rAAjP(aR+ zBB&Nqv{fPqsdzZS9?7i*Rw9iCC&w9I?y*Zmj`AAgFfLs7x#r+Je_>C4jt>2X=L>ZU`m}EBc^z_%<<2{rZyz(&&nbW)WAB z^_g=da!`JOCunZ|LX@9rD1WKdwT=cA-9$|Bsx_VPIYp7BT9*wia_PVLXl9BZ=2*(~ zYQQ-gS+~ieH7R8u&P7Xi0Fbb%N{g z*o$Iuzx;FAdmEqkp0Z-g_3_Dpi$_Wi(wh;| zh3SMGhGdC6hHcjMFO!T`CW5=T+Xw%gxCwZ=Gh8r(I=Q{-CiJcB1V}xbO&Pr2XBoLB z&J~~1KUp&*JIOI_f3!op+|{|T6(um?>D0hq3Kmu!${<~i@0~u*vc=HgewU#j1j3T_ z6NaeXEk^7H?1~t~Pq%oisX?e8@#PsQ2*{E3nLk&uIU1#)&$T%{&y%=l4*wWtQ`aX| z?Bs|_*NQT*2ESMulD(2!W=o|IV$vj&O?Z# z9cGJ}Lm1wU2z+#nMvD;aa!4rlz`f=XHST)2*BCKjbp=6IY!JR!`0AiRmvL&21aP1a|a2HXbOE9$KBJ zT;<(EI+73Kmd74Kt?3=hQJFh64K#rBobL}*fVHfZz!02%i6kHfP692B!KQ9M`QVG` z0e;;vRbA21D3$>(N6try^qY~>lc`Wlx%>3;_utLAVaUfM0y806Vmz8 z6;+BLJw`kBc#EB9=i-UqBc8B<$F(8rH_KU+2`*!v)07}~948j6X_}BFrh$**RYF(Z zV4A{7N9u<$FSJlKpW|?zM?@Xn7I|^$6M{kuHSP00r8J`&3ZC^$DJ$hOOoU0n9I zPiZs_Otz9HPSco3)Q@M$**UYi#CKPVavCTOJPcECU`2X-hBtiEzHlPt5Xs&i+#rF8 z25?At9MW)Q9a9C9ak@f}skiBK^mGffqx3E#MP1>Kn}iZ~qwZ*gD@fEe{q*rDk&Z~w zpu7_zrXwcQ@5p(57)lB_;&ZSltLD*#lBpZk8nflbf9vDdGLMsK2*TxbU;gcr{&@>pw4peQ5 zzfAu0VZBjFSHEwiuQJ6OZ{%(7UC93G6yS1A4`W2?MtQu~b2bZP`cXxS=h(wLsz;Ij z>+oQJkCaR=O4l#-WmHGgXLkgt*tT!s9`GqtG2C-I5dMe#l7&6Tc;Fk5Jp-S%p(*g9 z>!SJBHTM`2U|y!u)vYfSP_zLdX_wMDbJ4fMXrPQ?4Zr&F&5yLEC8`(SH<~eUQ_M&f zoD)S(O?^7k@l4mwC?vN6$cK*F#|Rq2VitK?__YRP!=dD4qRJ6Jb%GYG`BIovc9=Yh z&;pOQCB_#y$SSVtM=Y81-&We;XM*QFFxNUifYI0grPB_^0Gof-2X&{^{xoM7PxDtcUg-n{ACPQ7XY?F-9*mQj5Z((Et7X9ygo?wPT7j5>}4IE zDyd4jKMFYuVmqM=i}Su&ixYVy&AR+7zLZrd;Lhma*8($-h0)ETWG1W!;olp$Z{NFV zvEhb^nu!xsLk@pR!jdf+~)<7$N0lbh`f%{!fw zo&T8YD!WH2So;^Vg*wUrOFpCuweV((dtftl3~8Y}<>)mNT;Bv%H3&|^*CNDil>-d; z1rJ{OmWZk#4#w8?y_6Y7T5MnCTqmkGyszu(;^%W3z;|(o`t8#cVM9Vys9<>&F6Iu# z^YsZINQiEYIh3gK?CA{pcWvLJ$`DzWD^boe+4Y2e!6fZ2Kf8C7+iPZZ?!0FMm1U-m z9PQ>CzuwVsdraGE{c_1L;=NyIED^KURWxs4-3L<5<6WuvUPZupnj-l9#ey*5wjlY9 z*C4X%_0`PfLF3ci>ea})YfVudTR2~kNZ6h#%&Jbd`Nh!Q@x?2aAobh1{R=w+VHeiU zjlS4_d0m*%$1OVc0^vr6v7$;T!G4gNvwzgmah0;Vu`4YR&vzKJipH;W8XDNLBR!IM z{EB7c`A#J#_DP6O4o>HMi~U(CrUjWIKt(r#kcNFyHT9__ny^*4>#5t`!>L%CJGpJV zcAWJ$y^wM3oVp&mQ_0oa&~PgtmQ{9-6wku4QRA>ZudvZKyKM81TbB5-|J}&JFru;} zGh*8h%s}T(eI+U!79srxCZ{vn)rCNxccZH{7Pki}hjK}Zyhi9%8E`_kiSzR&Pz?<; z%)huvk`l8{b_)NYc~SzkJ*$KzOw~H1Bb~{^;CIfZx4?QVbNeDIGhO`7uYCvg;~#~C z@Xv`t@Okl1+%w4I*!7I%bmj&PTU<7JS1F7S|HSaNX<#CO7j?HW%V(dvqE#LI?~Xz; za=(jx4VTcgEpWnmTfgzsuB!Og^>ALWOv;iZyIXN_0v%!Yv+%0Tip7LVls;M4B7Mq6 zZBNJS(zp*|jg>7tUSXtTH%t(@LX6wC(Xm%aYqEDLOT?%35e;-R*7{ZlHfWMEb4Idt z@bhX|iv`B=0|!u0Zh9-5_6{cTbS)v&I7jt3WKOMx-{|L9$V(zTV}kx+INiHqu+8N# zD7{_42ozpZwh`n>;O@3Tc~{Y;!em$)pEl)LcAGe+k&EQL21%-q%BqgL-CloR@4Nca z?vTYuF3*0oWu^O+FP;lKTP)>x(`%hDgm^|E>9D8&)sp5TFm@d+7Go4+Wm2)v$Ks~Pqn?G&wD1qv!48WzAc^D6|5H6~^9J6usbs6H?x~nhWW3VTE33DAi_`KTm>6gg zQLj&Wi^CKT#fL?Q)zcbsRxwc)0aZ*JZ;T8$t0;)x0JCBG4mtn#=l>U(|6eJ=mV~U& ziFNgz6WYnTrHy=f)zHzA)nO!%X6saWowrE%oKjC8|WfF?vUJl6`|wG&@U`lkqzj7*G)%3uwI(OWc5S#NH9MHRiEm zg`=AddTZs9c*qXy?emEKM>CJ6Hmz$EUlIWMfUy!)J|T@Gbq z&>DNzMWb&LeuD!{vfcc%97p^|T0g+1{j)n+C_S2H#sL8d(uPt3 zl4{uv+pp7(xVgDQ=a+DLZ6)2t+O(;sq{VQ(F&D=;_YMZLI;e&Q+H_aUpH=+b`+Bue z_AbZ_mKH4E(enEt81US?t&|Ml>S)91OnY&3N2uhyNB`J3zxUk_1COiV;QE&x;9<W#k`7yU&<(9I; zEr@>u2F%rP?$7pQNPF!un_7|HLHR&ti4WKjKraW@rj!}8k+=`-uxBfm6CK=s{6IXT zv_}#;hSK4Og=D{9AqO6PW2W!vL$}-Er`%Q7iy@?E-`;O`$l@y`@WT(%whY{JQ*CeT3oJrctTh=Abae4gSybp*eWe-SK=;~+{c;#G`kKx;hezsiX<{d3*{JG)Fk$b5wD1Ga? zJNY-?78z=5d|=!4>zs^Tsoe<-dpiSW$TM!a3m z%<6)8KGV|`169j-6+l%chVimf{jJz#-U%_D>D{Es({a=fQ-kG@2i~1!`555O7@Z?m zY)H`AxRMD6xo%qHmu+xVxWUa#GuA*nJ3Z_#V2SA*D)~Q8qXdNIb6T{5s||VDO1jZB zxMA{gy!eQX?P^#t0~8O?h2&nZCocp)uNl<3>1LVl9*}v=0`1jR zVS{jAziOVw!b{N{8eDS*imShrS(QPjOx0gLx`6Ni9(QYi6o&!;h&$tMz5fE_am;v> zrUb~l+yCEZ1mDZfl_?p0$4~#o6nc>8JC)qgc6c+}_#(X|?C@i^<^@jMi zyZ4J-#mM5oaQ^7(fu?_S(g4#5W;j5Dzg+ba-8ozkkf$;tfxT+@XWBuBFmna}9Qlkr z`a_m*ukLTiY0I|E>M5>cb!@kG+tJtSPqa?7V%9cw+DI)*u zgR9G+5W$#G5Zs%i0!M|iob&ax$DO@seOfk+jrGo^!cS2%zFfi|YwOnOrH3xv`#%zb z|E~QJZJx{z8H}Fj^M>gXX1DP`bjfV=X~ zi;?59`@FMzN_wk0>F}XP|aWpe%vaxcEXqHulve&zJK${9u4k($5V)7 zqU%#2BR3FG37D_HSt=G*p$v7__gE+MMZJ)w6q~78Tw6Duz+e=uvD1A&J{86k7-TWXw~kj2j!ob5DpPn&bbbhuz!c6EhlIHZWOR7 z&u!JtoG5<2%qoy;q!_CM7%uC9??$+XG6V*qGi;pWuQG0o6>m@5+P2{5`XWevxNr7U zSGu?^@cqrr&q`y&MP?>b(ju;#Bay*~TVzAov&ErqcNLb$-o>(N)_SH(4Ieh**@^~k z+Gs|edDW!*B)MeLmx)KjwK(3kinUFB>XA88a~IJthK?%EZnHCJ(@?8Aj% zKc+apL^gKaP}sk_VYA1pYLEtnlSpa>*U0rQzAUvdPrYObpFA5r{KEBalea#(N6c{w z|J=-5k&!JNSEl3sMW;2vtC(9tYC*ayn1@M0AkwQ(QIH**(8JLLRPosvByN||L_ImV z8(c5GdVR-IgmJp=(bGIr_e66BaHIg8yy8P25PX$~+_OpsZ720)T-7Ropnj+vB0Xew zwExvvYC>e=bZYz%JQszlpOORtfG4iBWt-o%qi84&_BIXASxIId2*# zGWq~xm-O4pQW>@Pm2AFD3!hvYg~}2lRDvk>XX^=fqJrswy=wf5$5W%Ilq77tx{)?3 zupQ69bM;;FH0Psl+hGe)CE2bRb>N@|I^fa$!oo&YFtRr9TP;|%Z?nIHF z`jBIgDQP?@4CVM;$sO0e1!?9?yOAuZZ69l=@N4z19L?4t zp3&L4V5@_ZS1o3>Q4^&B-H(fe6!+UY94+#UEpH~77-&`eGBGrG{>1^mI6OeY-FD2d zrKvHL7>&0tOL`r?AwiToI_j;%!y#f4OJ&QWQEsW^k;kl5jHSbmqBA;*P6Ui1`vza~ z?f>nWQ@4JAA#hmpNV3t|Bd}h)&oc!PC(@Qw-P9lfE}MU>g&V*=;4nv9`AwUf5TyU7 zpfWiBPXMtDPV<0I`VzfO6D&XXqKgYeKOV(*%kTO1fI!KuaK%|gc}f9Atek@qbl9z- zzU$B9%e{41A@<+F%V~V<$3^OQw}tvkfXsDK{$c=!Z3bYJD{RbNfynl13}AX4oU{cF z03J|_l$1%HeAN~JN{UZsP_(hYmtW@sxTx}!TmT0#VhYYiobJa}fRZwMKk@&^7)(^+ z^Xm8b$z|jZ065sv|GX<8|Mjk!vKafP3{?P_RQ;x}oMXM2*lso5pYJA>JqVQFqs4M7 zE4q1V+l^iMN(|s4${Ve^TW~DhG6i%7K$|0gbqbn}_s`px-H#vi)fmL8^&`8>%Kzl} zsM$ZrrwV!7QGVJN!8(7|W}xf+WT9)n3g7_X3h5JupdWr_dXBwlXZz$DpTyD9!XzS9 ze;&#U07WH45pW@#W=GKR14H)phDGl}p+DwoLxVN6(sr8OMqb4T`tR zT?lux>MFqWMtIT|002xfEO7LN-7=>%SMA;lyU%&*KcvG@NEL`KdE5VLG+P9r1qA<{rS-t3N9FMddF55Ce!HTmogEXvm=gz@+Lo zedXE??6eju?^ZO@NS)}TARrbtDO)<-C(~qC7%56zgHB4Mf9a{Wmsj4{#!__NK?q=R z zq%F{PV9yeBC30)&lig4E?Uagr=Pa@(;-H{2c(i&kn*KUjW!(Ff|WgQuUj@axnm`z9;IOnfR?@FoB@Q z+K(Tz?mCLkAr&n%@TIeo<-LsZ#)O>ckHb<*%HfOvB}^_sqBnV;L3D)#et=nADFKk& zr8%#DxB8cnzk+}<1`ypG2LReb+baW@UI!;_fu9I8mf+(4^necA8UE@-jJTsrM9)h> zsc1bfsyt4OON_wFchHFdG!}<&_lQ0c-|%3XTime$E!FP;b1C@?tJ-r7W6Z+cxmb6N z0pwA-_NxF608I86Y>P1fp55n%d!mRQxC1QQGL9*!`>(NntX7FNU^Sz=;&qR)nc??s z45K}%SSJC`X4+2NKb*q@hurJgc3$VI^*aDuM*d;|2>`S_tE|EHUj$Y^Fw}voGJr|# z@AQ>N1~3+YVxlTQ#-qO79dHX6nLvpeV?_ZDCZ&>8j*m|Uf}y+^vDZa%LE>t`m{gs~ zL}m~zvE<>xIoleOzg7We=|GUPS&R{c`0Q>#O$3@=2PbU- zs{muxhsH@^^-tSpeII~Nyg0$4;(H8$WyeIr+MwDPogdqGpzDc2l<4>wD;NTlk!jFg z&KX46QS!L&fZvxLiV|G|@8c@g|2+8v0F>o91Md4rP$6zp8Nj6KH+|(w1y(COWmlgy zK~Pxs@5}N>np>jY(cg4%DJfm7A79p!bO4IT0!j>^6r3ydu>?3$a`o4#{TN&Dh`KX? zi`4Im>tMR7{1@}nE)M_~#hHeuN_!i5UpE6yuY;4epacM}q)aLf&WP0A6$QnWFREoU zr}vRzxX-WmC>|3N<&Ucl5|-Cl0)R0(PG6jvMBx+R=UQhL`Yu^c#Rb|G0*_D7r;F5I z0)Pw2--3XVO_f$iqPtW9U{dv)zH$LTq@qlItOvB8r7|X3v?u_8pDF0n(=8m|GfDk? zf6C_-y6TpVx*Y(z<;T{oi2izsX_P3sx6RoI2|~((6aWw>K&dWMe+iT>BL8MFKf?gL z{m4LVjrkY4?#`V%*E$e>tvjy?00W4Y$bEiSc(+a^cL3_@(Rn5$isF;rLB+p!;7~oB zvg@ou*Z3*D(ek=QcJOh)^LF|=e6*f1+8;s6WfVcr*-mUnbiMezs{8?f2(De7?URfE zD+j>}0CgF#;pxC77ErPnD47TJqJndJ4ge8pCzg^ropzTdveRsjy6b)q%#|p(gF*xt z+!A*QbiF44slEtirPYWC2&J}^>W_ZAe_loYiUE)a6aiUnV#!v^fLJ>p>&gJ8XW^5! zz*hmB1^60&Y+%WvB}Ef8w&&3?A>EITR+&jUmIM=hY}f$h=&(-8r~M^sU2;EM*@&LI zl2VsHeTcd|HnC3q4nCKWe@q2dy8uOG7ul4%Jv9a}srpS{`B)wR`TlXa&i(4>4nWDr z0HYKgcjZxCQZ~0_DobsNEC7qkdHv2R9B_Q{$KaYPp94hfW856%be|Z(W$Slkba!Y~ z`3nG)2o&24km>v4-i>zYweAI&UI!;_!B{3>d}^*+eRl(#{>S6KUEy?{Q)hhn=t=-M z`1YzxK}cr~9&FVzACRM-bD|Z*bt&s=p##-rCM%Or7C{b=#t_T45@Y9xPlYV9JUL z?5x1SDF!gz(q5+i5&&F8{(c}x4~~1yr=R{Z#R6V_`Q?szm4LLy047zx=_`*efKNW& zXJy!H7K^++*4+VJ50|aK1c(=r|NK;W0Qpp4 zwILq9s_$`!2oxemeSi1v-D{l;cda|GiSYF4(@_R6nC$jwut<$di85}nUD3TvfA0WL zQbY$6X8|M~mEs3n7lFt>v+P)MFB}v-lMZFm5~NlrJVsDz=d${jF@RO%uX7cfeYpoZ z&TK!Owir(=qHhtzG)DLC-MiL0aIHJ<08nxRO4g3++;4aKj&)&+?3h*c6j%>3Mx_Nj z;*uWM#VkU<-xbf>;mS@TQ3Ncf_YPo@0mXR1MeC35#wwp_Phwy?Sap9t#b?~Imohb@ zo29nizkmN)>%g_{dH4w#@$SE(^zJ)Hitm9s2OemxD<9=K@RR@` zT6$S=;sz0992A$uDgZ<8JALt2?_UWR$ABh+g3Dk1&igOYIm_Lp-j^J_?MspGPo6~u zfH4zwO}>{4;C}up-F9Wbhj!r5?sco?e!jDjWdPuSqOzn2 z#1H_17$YD*!0U)0vQGUGWG*cKlari+-9E{=J7>LJt#LVeuvUH0=L!I;Nc;+4BLEm% z=O62~TPjaH;d-pNrP}h-Si?X=S>uup$eHR0fD0vA?Tqy|xQm!j- zY%A9|pz!{(^+zB%Z_IqG^#1thxH*^|q}v1p{#*mw|CfN6K&dmT8U#E~;#d545`khj z-P(--gfjuRz69X7rHfz^x_+QFyf zu6Sl3Aa{}a$EMe+@>eQwTIUyV>X`=lkw0nOKchkpbH%N|076X!y5b6cUiV@mkSn_@ z%~*hni5fuy`dOm!QgAZ({J|n>>sSi!SpCi{N|xEJy<6~Txucvs!01dT_A|1TWh|jo zzk_3B1FOiNOhCY}v|QbNmhs@(ajpoe zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{03ZNKL_t(|+RVLMlPpJa9{5FM zW>s}{_c=HK2Ebs*8O=~bn2aOR)+FtXdfX@N3MgxT9RX;IIHE% za5xtL1K`~HQdOB5u@9LZ>EYoXnGH}P8+Pm*bXQkpMn?GM^UptbUwrXJj4>j{2=6`k zm-ikqMgS225JJQ_j%b<&&bjou5CXjS2q6FfoOA3C=I<}xqt|)o(0GqAMmXmXV@yAr zJ{Q@0dhgLR4FII;2qC1`@~`Rr0N;4H`Tv*qjffHXwWNCm5F^6;Z(19=_T{~o&$OB#`m z7yX+y@Hmd@q1Uc4gn)4zi}jbrMjBlCK71YId!R6Ywo%~gPS@qV$1n`)b;|eVMk>FD z0RGY3pwVaXJ)&Ks{Ok|{_WL~^A0M&X?WV)-kc^1;9`i${4mMrOMW#? zgR85nEIOgRINf*5_Dn5e^4=xyPiyApi%zc40p59xVVv&OFGi2vkJd|mj{JP;>kOSml8jIXEseY$t&Jpy~q(pm6B!mpVQ`Z$i6(O`DB_)Knm z`I>Cn#BG~}*je;A|B1$P$k!*N)RCe@@)+buCT9`nw++fZ9*b+Y9Ms86oQ#Bw80dY;Qqp2IO@p>=iv?=iHZweY(`lim<}K0&c7DnY5wp!oVWE6z zG9p?#Q2aXO&-25-g#L68X&r`Pz%UFcf2H@fyciGREic0j48K+xvKQgKFb?H&h-yer zQ2;;uIWFXi$fo8Itq4d)AW@`~k-`om`YN9%9qz~sV?>OO8OKl<#N24n=RiI5GWz{H zHvqN8mY@?I-rB*Sn;V89dmZ;QJlr2cNFWPe6w33pMUP-Y|KyqWckmhYr9-7#rw#}OL}na{<-ncu9vSTf31AZ+#$$Fi+gvz`DbF>bsW&k-hRXnVz#z+d zIp@%IUGn^VgK+eoqsNi30};wnG(d)gHU@n@EjIU_GPl;kFSo>?#fH{iFQcE@=8@o! z#1S~S#zR#tqT(K!Z)ko!ng`V)1@8H+2tnc*8Ys8iLxA^rC5T4^PjPI^=X*Fu*WRc= zaP5ol19{C}q!+ckTt-cc!H5btt5>X&vvdw2h6yNSxC*7Te=iJx7OtioJ;a2n($Ctq zO(2JSFikU62sj9mHr4DJBzULg@%-?Up`gX%Ae=l{!!V? z=Z9DWIb|g(#wo(|%#iTUlF!)!#HZIw@9h{S5Q|jAHw|3$7%>*n;Fc8gzr>e&_3BmB z9*jh@xtArcO!?k0^zgHX9_Rcu3*+a-i}Ux!u}9yJML5K906Nh8;POpO8<--4`}=#u z7;$rRW9IN2;nu)Jx#@X%PyS5eBlNyx{3LKE!$kTyMMN?$r?0N-;G9F>_eE-C9TI-c z{2sJ26altRElu&<_bDj11q{pRO@`cZ-LiI)wlSPs?01rbFaVlCX3YiLCWTXR}% zKWUMV1vD=QtVP={Mwkqw79Be83XDlR6eh1Cq9`Xjt4R37Ql z7k|bwHPxy&G79Gyj>NAhbtZ?yxiD=lzmis2FL{*@lMY}Q!%|uap+KW^(67lpkF%#V zYfYcg_dWW)$MyAfQCj2RWewxd04-@%E!16>&a@3w%VVt^v~63}+RL?*sfG$jDkVpY zRcIYeR}jN$}1)k6~Ow;gmhitQ%RU z=LoVak7*B!ml;o|QzFrDZ%d&$84=B*)&Mge#%UgsTUyN^SP{sUypPt0V<6T+P!HYw zoMI(nkk4@Kz*+mx*1#>YwlQifK{8l` z5=(H9mpSnZPTWZ9!h0{S2Hwl zP@`h2Ah9TS&gO>kWE_TJRB7=1K9+Dj7Tk-qvY^CqG=P|2>o5%1@ApMo%Fm5Vty*gX zsMekv2oXN=yn`+}qt?=9U}61o*r#x%@B7S{$P$*e=~B9(G^#9~ju2b7Io#xVCHKf0 ztyXJjsfEkDmq9kubX|uqh9adPgIfcu94o{-0MUCuDPul0hySKE>$Q+xGmPAe)4KEg zx$k@R_qgHKoLlXAYsMkxN^o!NQ+lhtuiS&=oHWMc*3@XN3`z}U6cO|NYhfyFS>ufg zyNOx0`48uTajzu7E$@8>Leat!`pk0^+VoT&lO9BC&e1l29U@OT+t&JW@;Y+^l%(Lw z!z{hE{0tuH$WWDx9)YI3+)755M_n4JNA_1h$@6Q(n%ah}l^tsyOe<&Bh*XmDONWg26|e!tK5DhC)T zI;V;c5u{ozzqLBq$g}u~>Q%Ja%Ee0Fn|V$*w*bo$60zQ7zABA@Mb^=3#Kb>{fC~C( zdAs&m9Ej7}Wa&M5)q+Pk9J`=HEt`)xs9DSTwX$1Y+VN>4xeej@Q^-2CK8L3m4HIog z-b};OCyItzMT~eTl2f;C)#j#JXZS@C83m8hU$2g46IkZiaT4`mA?6Lq8I!a+3 zh5oWmy;yU=IbY2;d8eWTrod3}aU3(Iq6Yj}%{~0^TIfENAT7{ImLmDu@RW$&OP1^; zA&BR&^x4u##1NO9nW5QQ=&hy&aRnJS(wtftzQ#MzSc(=Ps%Z|;Ke&pK~3&hgz;hgn95Y2gDeW5i#{)SnKGVL)*0&`XNO~bf%_gX~8UbL`Bg- z+fJ>{ZT=x1oGYyv&`1}`JgeNOJU6%4b!1g#xKh5>p=o^Cx6Voj+6HWzX5uA?#giU( ztwT(DB`t5%ge6)u*k4tmRrwSyg&+3~+&kotVAShOV@=v|)?quSE}1R7DEH z@UULK7rkB*opK`^?E|M6DqbR!X~^_h0c|@|fZ6X|E|=^%EuS@!ZM<`d1gGtT{8_sh z+!PU=Q3_rF)=`vp1IBSc)3#Y8m>HqQqaDW)ZPU)58)fk*um2|cCmk%G{vV0!=S-U8 zB+xJsQ=0hzYX^(x!y2iF*A1}&bg|#K;E7o&@?S`%2?W=r4koop?Xp@0r9va5QFYj z7P+PAPlyW>kXu|UEF8yiI+XJRljTO4%|!XS)(&ft zf;2;+brf2qB+JN123ak{<{P_hTkLkb%t(5r6SB}uAihP&(;)AB=6P#%^;#LQ*1cH! zqJ!RbT?)^GAdqQQmNJSdCCRM&uu@9Crm{_5WABxRR5LnDYLZ9YV5(VR6^-yB<5m0n6YkN_mPP=g;%vh-48u*R>~#5-l9g&9di2k-Jw+uCSa zF3qt5UNV#HFX_E3uaVI(4S;aV|EpCagJo$M7OQ;6?^iZqS$dXRfkyu9_@U=vyaXg` zu zCTl1n1FbHug~V3VOdiUH#a~gcHY;~o;T@NSk{gXY3&~1x&!e^TT9#SkBB&nHFNR9u z1Zz!MGP=@OhJ15!1Ei%}McEhg`a3-N@INK*Cxu>K(vzE;o`tp#WLnzHqMw}E$#Ijd z{VsB!O7Cd_c-A$#`M?ohfP_*4CNW$qGSZl(JpJG#IqyCCVL+HGW*Sp8X*jqE1LJ$T z8F49S<2k-_ zK4Zof;WipBf5JcXZ4I`0wfJPwFq|~)ASZJ$_N04aN~wW6zvTeEXX4sDKL`Q9OLaCu)h zF#%;8E!E&@b8yz46wb_V)?rao&bizfiG@WAkw4TB0q+X0uL4*6a~)LhiG@zGvKU?s;cc)@DhhR{S^*2I2g2=RF27r_S0Sx|N;42(7&`84sq^YUOKIr9gs) zno2I04Ka zDbo>|B3W7zT+iXD1few!iB)6F@@5*N z7GqF3AsT?o>CgF~6qwVrBG_!e^pKPeB$dpOEES3pTkVkX8}oC+pt%wfjUkkrfw7BB~8{;blV0`*Yf@#y!Z4hWFF+ zRjNEvKXEHvSmGcx9Hu7uZH4E^|1$Q6uGUPYwgrfEMfPVY5HAF=U@{k{I(|-y;$k0R z*61MK4sT4;_En1bwf7J4;m9?;qhnzLQ zrk0LG>)#ttX^Xhyy~m~RQwSJBm^O~$$>ipyn!4;6uvC&XQVOp>^PE%)w@L%VuZu)0 ztb=O_ztF!aHMIytTT&m>*q~M_Bs;#8sAY<*we~J7z52e@98#hWJBP;4hEtSDla?Uo ztcbNt(SWiCz3g45)?Dktv`IQ^lW{b;q^-=djNe}ovydByL^W$Ut(M!-T!S@sUd^h; zl_+Lwy1o1Pw`HWTKhjCk0SB{dvKwCP&#c zP1=WPy`}SsY%mBP=;0W8F1x8{;3KcIOVryEW2_xMd6>=eVxi+sBq3LLBCRRK!ZIv? ziMRA>xx0L*Yo)@qFDpOi6L{%<_(9X!uVrMz(}=Z0B4;r0oSBy*#a-`g}#;^{ucc(B8(Bc zU7O08A%vuTC`-WnnPw7lLc1d)*a3`C1o+G4lF4zkZJX8pd7}o`W#cS0OatDMGG+dwtPXH_JqU16av2=Q0Cu}wmiP0&x$+EP z59!>JU)92_MD3Lii1+g=H$x>yElSW1LQR@mP9fG9dRsP^mXB()3bq;nd1xl8@)UZ< z2%OKS`JgRnkmM1p83SIvlgdoe7)k<;chAI)}qrAZ&|!L z8HO|gOQ=N`FVmus+GN!M-?{PRB#OOPZrg77hEp~`C<0TEV)`P;+G+DW!ibku| zatlP0A&WfR)4ayYmd-#CCl0?8ZK+YIGPs$eFH0yq54Aik51B|CkV`hNNjPg>+-kk8 z_0q46ShvV9asZ0=z~OM1uCehZ*~M13i3JIX8|U3_r=rt*LbMcMk%#h|j>EQ^(l`id z5zZ{;B@f9}V-a1_<#UQs7X3C!)d7?0HG$MFDkvZpIW~$o%V!b`4MS~EiWYfmdn~KC z6$5If>uuHPKXQ{(ZCliWdD~;z{iHw0>~EKcAQ}A;QRlF0ym6uD#=}u9`$&VooG+ZVK_|G&EoaXCu^du!e)l)S4Q6cvNd+E83{G zk}j=H$|7Sh3;|8!;ESoZE^n`tlUj3yU*7F!Ev{VxT=FKD8hSM3)>7)#>ZWT9v)pjG zj5cc_{8F5P|Itw1t&?)sHl$2Zw6seCY#h)vu@=SXM%G6_@6CJlt=w7z=GJ=fw;BLR zXQe|=*J4$6q^Ez1o&n#3OW73pfY2CIM<*Q=DGSce#~KrK(LnHp^0S=HC3|HHE^E^vKEUGo>O8@#mhYmVa6l zV=GFiF~_U{pqgNZic4@k1Lw>dJ#9vfC?(6X^jct6aF#r7!wtF7=}zlm1_ggb#+~r3{7eWu36A5bO_@-?$~Ft-P++VHx1QR7oC2W zu?nG*U-BR1k%>lF;$2W$c&@fQYZ`=7e@&?%NFk54DL7jFsa86yc`7;aRm!h5O(VK3 zXV4T((J16dzBYZCgT9g>$PcZYVk9w?tqe^5S$xCO_3@EleA?~u8Ju#AM9tN45RJSO zq1$PS1Y%<2kD89-nJ#I>tJ*(q!qN+P0kpOR^Dnz%25UtqD)xc;wEbx`=7E zK`T{Y<%7=25_vsyIcQ|9a?~_G1g;>}WGHlWh|XrHsYJnPfOnkaBB+Zt1CLbs5Sk=^&-bq*g(_co`dYL@68b_FPg1Tjz{B8imNSgPK9$0Bj#>Et>Gj;gi#gLNzFq<<_YUFplSnqPg2ZdhF||e@jee`?1Jo$a#U?abeYaeLb^!Uo=db7Cwp1$SLp8a6-dZI> zD|@bS2`qiY#5fbfPWb_*2u2E?((5e|8jYM(?%~M@B(2A|kaCErSYvnQDM-LD&@7C$ zz$|z*Ozx3!)}?^4hh*AWzIQ!>mHR|}rmP%D`^H;`PEKMCVKmBWdD~+Y2zf2UEs;^I zj_oFa4{IZr6N-U)drm#f)-VEX43&0}x2VXj37u#_q{RlSaR{siuUdtq=3T4_$8zAQ zoPQwSlMX-iu+#5o#4K%7%V*U^h8pM&`bX0N~tuaL- z2~B+uag|HpP}iEzA0#oM>=12>ch>6C+5_Z~h9%75R>V-`=Mk|+Q;J<1EhZ(m*VuR3 z+_^Q3LYvtqr|VjuE$>AuuUfqx5~S2bTnIqxx)#*RtCbHI>2AmHtcY=>{U5~{(JDv` zD|5>rkYNZJi?e0`mI$I0+TnN(2PUc9sHI69Fyzl6RRP=_zH8u~B-dEpnJ&b8w~3Nj zjO}&~4(`dGT84|(cyjHqX(3}RAFt(M+5w-ifQjD_VyKqLWWAqn>>3UtjgZtlkRYWz zJThd|0KGL~R`vP%>3Q<7p1&WZ1Dut~Rh+b8EAn%sl(=P3mwU-sc3RrE7!dNpv1q(n zD_znudFPW+Y1;;HW!IoJk7Lpyq*O&qtxD3Jl=PSE$Ph;L`TH2{5YGb0q!pCnowZ!v zIR`I7nT2X;Q#o@_uh-wTS%RFjLwVm?|F^ZdwWgSw?puf-u7OCkHCUBEGg1hRn?Y~-ubF} zk2QJ4+T?5FuQ_Kz5@_Ux;&VoH@yOhr-}YBdC0BB(q#56I=U_~Oe( z1{o^J_s%y^nB~MterY?!HpHOz!E-68ElB(p8EwqePYDbXTTQMb2fH+2O%jwW`Z5Ri zYJ7VNk$H3=*T4e*WTk;?4Q{C(SdoFmE!LX0I0u6ecscA;%WEYNS{vV{r#G(1$pKdk zf?W&=jUmc;1xTH&ONpGP8f&y)ZjiM0;M()h@R4+%Gd{z6AX+D=jXWQdOt=VL`igkv zV;EKPjC^p~V1@;Cja7wL9{$g&3ubw!R?F5j<+OvJy^dNyk%#OW0b@(!jCEjg^fu@G z*ERvYW*kSAaFPtoOiZcCv}uyxS#y)3*RWQOlsJbRTp__f0^~S}hqt7!=_krIXU-Jd zT49Q!f+Oc2#DW9BqfeKKhidC;Q-Q|}PpDO8)*`O-`pD;L&p`2l7A_49OB*E$Pp*k= zrbY$PUaN_V)F$-QbIK);DM?7SboZJD|Jq@cR-dE#+NQR0#x?Lw=P;n?&a)x}F6C}j z4pJ+va?qtQ;L(Vca%|-k@aRL9DP{U1c?6n*ZY_%A(|dX3R3mKZkpa{aTz>5y`J4b` zngEs*m=+Doh&La?;x=hYS~E5CXS)cT#E3-@MCQ3gmz7YxmD5SI0Ua8^A|;$8IK*|& z^6-<45&?^-qM=(#ecH8GH@VC6VY*&z;HXx@T+5?nO_???m*%o{>_P@Q%1~d9OxMPs zS+fN!0BXyIET&AebX(4h)Hnlt2*w&_BO?p$tkwX`@?PvHQkH`k`7o+J1Z2%uE~l^M zD#K2VkR505#aIl|wH%)`B;{*e*4Wq9Kra3!d=9zg(ZU!oV$4EPevz8z;+$_y^=9k% zD(V$q<1<)2`?Ux}T34QDYM#HAH?K`0w#rUcgrTKde87t)aW037YB~?r>^x1f-JAi* z?Bbe(F37HYZHF*P8mNw5fW1Q8h{iG|3B zRs#v4w5)4@vE9`hSruT3Dq3qAOA;X%14ubo=GjSf5H68keDvx8&_dT7QC)_E)<7Dr zLd4U7Y4F4ayWL(r=$!Du`=x7~gIZZ}iv+orJ9EWe%Ohz~i8&dWMG8{ptkz6o0fGGb zB+zRCQ8hr-!bh~R@K#!2aWQ0+x~xY~bsBk2t{H^xlq4oq^Aj_l3P^6daY z>=A|+fYb=GjAJdu(w&i0xeS?+mDZSh?`c}_V%g|5ldRCZu|k-YO7sRGsV7*Y*yfu* z=T>W_8j2*(=QA#si*bnKCQG^%)Uw8)e0;7(&gc`>h|2@YnVsILFYPy5o#E0HEL;VBU@>8$+}ReROKm0JTH$AR4jy$hWELJ+n8i$D2uU{u6oBe*zCI*!c>?ykZR-3UjaGZiF!(NMt zC_`=SXKT}iWJG0-QD>2atS+n>7ptsP3+30i19FXubYgBK(mLBLjA1Rc;~M{E`0a|Q zFmL;HnL)_kgR|_U5UJ(B)Cxje~j|h~x%C1At_Y{ZouzZMGiw;#$u^?RVFDH!Q4!AJ!;l=GAKal;2xb zqP5wC%kP7cd!)E%RM(#i<)jiT7K!`vVA44VNrSVvHoqNAmcVUhG}zG4ykSRr#Jl!4=RvH^pVvazEn~VYuSx65 zhl18NFMkfyD*a6+^=OjRwR?E#>;rAom~~Im09$}q89jOPnU~cS*;C+BXWpXWFFOV` z^hvB$Yb05PH`-8RbO*_bU_ z$V`rSrO%zFur6V}M$Uk;NKQzK)p-LNH^D;ud2VZsxvq^crxeP{yK5uJ_~GXVq3`=_ zyp$}{TA*vKY+2)5EW|8tmhQAVeNFq|DHx0vzOGd!wrDVD&w=nQQVAwK0gaI=9gYO4 zWfV#p1*vL~RT6mV&KFLN`25RAGP_bBfnKS~oO*q@k`K3Pau~%_XYbMXJ&woY1OzfN zOxrX`ZB-)8YhfXe4wgj>*@D`e)N1sItDDQB@k$2WT4`&`A+zQSXc~iBzAO#Z<#IvS zbtc(K10gxMXH8qu3|oGE)0Et{?TV3GPZ@u{r3Ji(a2Ku28}tjfQM5*!@rp@|`qV4l ztY%fGI02^w6PZRrA)ZpFwnv_`SJq7GF>vqCU)OT$6GAT3z`>XM`+M|#kL&AeRTyDp zLkBrAOImSMB%HCS)-GFaIX8g9WZr`N6lEL^wrD6eUsEo?sSP=iKq`L^ zGQ#qAHDp|?c~gofQxa>_$zFto+2+mgS~IL`(chXO;d%hFJ5rl%A#oUsg}FuY%mRox ztB;>04TnnTy+g(us70un?3YHjU&8?`PL0pYN~F5dq=(%1J?`)C0RYdQJ;QFd%NjO# z|NoZqlJ)RQLW`>)(^{Q27Kh9N^44<2r;Nc`6XlepPD`Cfs_9D3fHX3iXsaw$a*hC9 z15aVryl~fbX;6r)Myz@Jnl|ItnH$ItGB=(a0IropH3LA{m3IyZ(L7L+qAVx&F6HU< z>u2KyGlEbIu^M?fw&$?!3t`0Rbi(cJZKmL2c~&XKY}L4B9xNX; zub0ty-S@u{`&oX zZGs%slIZ*)WTeC(5uFWkX?Dw5y^GSDkzdI zxgkxk_Am#Xw^ml1Q4QgHH>Z@>+sE~CdVZbKVbflk=K@R*I&GFYPdpy4(XNDm8a$YkNAKk^$i!oX}>g%$MHZ<=L$4F0|N?8gYqNJ>-l+*~`{&URiVMMC3L%Z#JI}*li_}>Ae>_Tin_n_^i;akggk4iH4cDhVw_qyCW$dpOMgp_wmfXvxm8kO zd5KE%h*rA7JwQ207b!B3EJ4n2v|6-l(pA!cS!KsGL%|RZm7u0116gRl1_DxqBnOdd z-chftjLADUjRP%LO>{;DCb3X-BSlv&i8*05xeJS<#M#0ch+&>vJt*l8@ht z^E30CssvgJ5DOBT$E?jg8HL6b)$Bt2h7boP9I{r9Uf7M(zuO`Pt<Ze(fzC68Qc8(N~^TlLzs8g^|;ti(v3 z%CI9*SM76T#3d^`>Aegot{Q=AOPFel!$vcwwN#zgfH8|YT)SpjZOQK!O6jkT5lAPC zxg?l3yg}8tv}EJby=nU>RUBe=MtDR3c(m}2J!GzZ&)Idh{7~NBDk+))lRjl+pc)d} z&pD5_rBHg#v4tY=md!*5Tna}njIR3OUMrc%hpGW_vRA!EQd#4nZz0aqMyUIOjvY5g zGMxXwqZzGpQ48JIn1B4bwTgyC6Xt498uD$GbfrFnJj@j7P^xGd8`_^ulN(fL0Ha!A zAUnKRy8Vb)l<5mX=dZ{iH@Sk*;uNXbXwfCiXB%j*!CJ)8U6LgkgA$j*@$sk;M7_x&7X_#V)Jla5l430@00pL93nCb2> z3&0t3CAvHTCBzsbgCTR;Wl@}2Ctp)=m8BmZ-pUrzZ+iH(h8@jwSpU`z{+id9V3kE( z<>g5ev9BC{4M&heJot0g>h~5iQtBAg`UJGHshk|Fy@wX1$o>J@WVI%|qA3yOz;)gU z=sfS^*VeqG6X%LW3={IMU<_JDQ;S$8!IMS+vmtK@0M zZnw)oNdh&rGKtkK2cyzZ%Ufj{V)f?}2v+kDYhPSUbKP5DbBL<3@YdlT8y=_a*5yR*g>ZMjA*N3?)R&9li;tJXbe z$yUn)xMp)YoQP0xCkCF z9>JRG&RP{h9&&A_fu*?1!&g!?lA@+uhhC!a8hNQ!daE67t-syUNsuy8C51X<|JG!^ zYipxzAWO*9^7`8EmEth0_8m(ijTWL?Gb^m2Bid{PdEaXyn_F}b$y3wFZ#NGErRdkv zzRccR$aHC==hvQ-*4VcEJI(-L%c2%vsA;>ezWOqPjoFs@a<*Vu0|Owtp2!HKX~Xl4 z#*h!7+)`@XG7CU!d*wix

NjuqMIHy-6*Pu;=`?IWrY=+gS~MMl+NR7?7>O%z_NDyXr!=8i>ro=>_2;yR=rElM zHY-qLPbMSkbgB>Xx?r!p>S$s^tg9~!aS z?X!WgDJ6~(qoEM3MNTs6Sza?1j+Hx6DOAGyOBVdC5$_WVOr)h!M&2yI5&cEsWI5a= z7o3+qcnO4$Xrj`?mIIga&UqjwJpfBL(BgsHWfE-il(k92R?qvE!=GIz{l2mWa>I6A zr?z%(!AEKyNP?l3=AIn6F8LM|&Pzt2HPKhQM+v}6$@R%#gn1@KOhh3|+p)G!ymMJ` zEC^3Z=U|#PM8>CCrvD-$j7z#XVk`!n@<@r7LFIkQ=O$+sNCl=6{FcTp7Vj(9qAii? zk}$Ab$TDNB*1^U}5Hg&%gbr0I<9wL-+;u4trU72s*zYZshMH&9qJ>&F+SdvBdHkhG zNLf*fypEiC8O%nGqjp7s4R)ph#$O6qG_o8Z2*1T z(`g~Mq!wo~&NKLDfpv}L(gQsJs;d{q>d8~Ej1 z#7vpEet#~LFX#O*OC(cPs@ipEO6m(|HTwS4xQdi@#!g?n%9AVy<0gTxSCzkZFM{NyKi^X3g=j5r>T_~esM z@ZpCa7Il7&WhTd$aj(2qzT~qcCHY5gW(&M^&cV$z*rxHRsfjZ?tuDx#=72R4Z4F4y z!}3r(ubPhGRG}F*%}mU}(U1+zt>Zbd7>1*jrOB}dYQE$1(sFO46ed{rQv_fMB2c#A z*g=+j@GYbnDFHT>D|Nxq({8+2)X2;wDjQQ zL+0bev;zgB`-~&nTZK<+bz~{@A-yDdZ{D6OjX|CwO&j?0&p%I?NZ8^N@7X-f~LYmhCi!TH1z z4T;zCsx^yTGZbrxz69&EnzI&7NFvJ?5XqX6x5evdVV}&wW%$qULq-O2jp*m3?MG!p zO=A4!=EkI~)>??I?myWbNk&pD+gcrvWPCfJ;w%4X>7o|m%hGmD_iqwEMO%4^`6vkcYz>6D_H|QsGB4W={?6*Kh($f?NWh+T)M_ zUnK3F`QE%6R8IPlkq;S@5XPc&k@rS8w<~%i;w0OXrfy}?(5#su>H4x$lg=n_zt;?8 zQU%sLsiy6xl^$|@z?tNcEhze0sjcKRy8^kc8H`%#af|HonrOuqkg)dt`oIZSCH;8s z6BnGmUc7jLPd@nscXxMq`SK<1?(Wh&fM?I1;ge53Nt18EBMl0@B5+PeNajwQ=TcMnknuxX0(iI%PRo7JQ(17fEQDPCCgQ+ zAW@Z#95ok+(Z;3mDN|*KW>|U&xN@F8(C>fr(MQ>2;QRY~G);rs+uKZDOOmr{pcwyL zF3=(GF`?u02UyQT&VsNG`_?q177b{a4u5WPfUQ=EDfibxpdmq73frgqnkn&^kk;NLLsqsE_8uFfZ z$qMw`+lv;`Ekui&x8E`*OWVY?`2?DLw^gdldjVn*mF@R?91aJu0pgRcS$6nIqeOg* z499Sb-lS9<(l)p?U051UD}~|;!u-9<-USrZBqA^^o^nj*fin`d&*lc~a_JdXG<#m= zb>+0BB`uwd04KUh%z)-UNaH7kT=IPa6N5=}0j%7q1P8Z!{pIEsB7;>z<27)n3?b1z zD_OO<6HDHQ*1bmZ$x!C%dFLlyx1#v-b?^YqXjs|+yfmpl#C%M+l`F=&?eN!J~ggDMRgVFTkhPO8tYG-_LL6|F^ByKYHdqUqJh#A$*#>TUVEj4mfe zUnt#GlmkmA!|vzMT1HP9({NS;im7Whs&f(eI?5?WlC-z9DkDjlYf(_kg*mzUZ_Wg> zL;m$c03GdJDc9Ay;v{%v0aawRC2%$>p=&@;skmPU5Uiyx8W6TdQsLKP=^IiD>2&X* z@KBtfvuqNbH727csmjCeWom()(DB+cO@L+V6OFt~IqTR^jY?}(hH^m_B=HWZV6Ami zas$0YBT^J+CcQb2X{5cVqB(sO9#`CkcWD?;#@GYYPDlPsS|KD-{v9)JfK0{PMFML% z^c+Q>8XLN51fV@^DVtog*iw0COBu~d423~D$!&4~OeE${zuPd=6 znIlU@C|+Wv-v6d;fLYsMYX1#NnJ>V(2Hv|&n3J~~lZTcKcv?RQ@8@?8g%jlI$dV34 zb!2@q0K8OSZO%0@P3zFc7!l`|OBn)Lr9TU#v!=>uua)#;3xJd1o%VXU5o%08%lp;F zIj>1nX;Fp7sb6{rn$*2!c}7dv)VjZ#79VxPO}uq#mI-QQsc9Q?&_(UJu2F_9{6rts zRYs;di!`e1yr}s&z`LwWsBt5v^VKjAoh10AJX#r%+1vq++l6YHX$@%2h(H{%lwMg| z$XbY75FnJvLj=lkD9Y}}Dswt*afV??=(eoAa^@QED$`nRCDV>~*~zMb)_cD;Bx9|_ zX+1zo{(9*IoX9IvG*^x+*T!jCrA^6^kOon&gp66##ih(Ol^@Nqe4VnY5pQI;L0;+L z)epTAW2J#j)1>`ORgNIYWNp)=Hf1`X-bd!Sotdj!b0O{M(Jp&$O{ZG|G+kv-n_ag} zaJN$2t)<1?-6^!VyA#|B4eoBGxNC8DcPPcJxCD0(&dqygzQ38t%z4h)zSmxxyk$9D zGg24*wg{io51%9o6s4TCn!7OKEWZ$6J^#uq+{MEhuL`$xR_cCekE(K;h>2#IFOyj| zn!vhkIWv?w+lb_Sd0<^Y;-JVP#ab3= zA^n&ApAo1&9}3rbMQFz!TFtYt9HTE{=c$|H-a~oGc_^}ew6_Zfxxt? z2Z@(P$wuZ@$A;n^4tSH0z2)9{9+#DdGzCmT{TLA{p|vRpt3`FbQM(XB*w@oDUbZRoZkfxPP)7*?7mm)?^!&GPeXFa(Bq^#(t z@;G#uJ@DA<3n#O+Aw!Wyo%$y)7KEE=u63dJ$t@FXH`W>Qf-@wm$ zsFHd;5;2syj7Lsgp?CV`r-mSYL){M7i-_tVq#nGmHQp{y3QcJs+=Q^k%cAd7yF8l7Q{RPfY#Nt*NqKh@?_yvD1C1!UC-mZd}F%5LbVMGN%yF zd<@r1(^jLrer(V-CI)}$oTqP}4;YG46q0DNu=S_fFV$PUESWp-3Lo{G*v$deuP#`k zRp9!2j_oI-N^3@_fBsPAEM$(R!6{THo5$0)M$;-MlTCl4qGkSPU+v#y2=!yWS17t& zgMI&y&4W6}9F0MVI`FEMnBbdiYA;HS7h)z&#ilnUd}20-ngA z-+8~V)QIUQ8#|trtj|qP&8V|10z795=I3;q$wcIF64OtYg%{S(852-s9}Zo2eaa)N zx2;w|x{C$3U#zX4t}1-qZE(+@c)@NQ3@9-cYe-K8STFw*JkGQKMDXAX-k`zv}mmIC4da@i}Azv}mM zJ`C@U?rY2SIHM!}PK_ma1qr=pgzg)5c@x9B9LEU18ube^kunOFxW(m(?`)A|%eLpH zT+x|If4xg7`YC!s~7?`Hp;+Wvlki4lo zak@5x_B_X0-qxFw!L*{l?8~fClhX_Ln2_(dG+okJFg%&!nT$BOVf7cINO`NoFj zgLH?wv{T>|!LRy!_q+Lg`T8ieM7bs*wwQswey#`qKU06Ku2wk)^w3F}vs)U%-L%t- z#UZzQRG@yR^ADqJPcIY(i|!|%&`1T#-I+A^_D=bQ*i73^y zvz@G;s+koISJk|rnGvEDXu{H8g986?IDFEgk8SYT1S9&8w-cI=`&%pDJmmB6S}_Zi|6Mi<+-6Po9?Tl+4G#HZ?MeNf|%(wDFFf78Fo8fF`q58Em!r%z8u|Iq}f_ET2K zd?x0$E;??zbRMO4>Jp)ZNLOAqI7*58f_WkW&s-`17H}FG3LxSL@Da_KkbkruZ|( z46m&ORkmKs?S)ar{ChAR$HW$n6W4``IJpZRXvGB@trLimGyBeb4 z@OT0AG?WNEIoVpcvW1U_i6v8egaGL`R-@k}UXnZka`K;F1zv?2t2^oKYmTz7s6iQ} z$8CXHUG#4YOx1}K9rS`r=vk;umh;O6IHxFAXKMVw5kA$&Fw><%VP)BNFgo)Qqv6>A;S%OIbk`b`{cJXidu zGiFbt=tIJGSaQm*Ac=->v$6QZ^i;WV#S&}lJDg3Lcxq#VG(U2wIm2?LeWlV~7{SW1 zDpr}N0_s0-9IX2sr~>NeuZUGFKP)|fdtYj%<2x}bO2XMttRt36&>NE4uJpk~Ek*tf zHn?*ys^a9s9ww$(a3w+cmDFX)W45O)v*|CQ>|(wpUrHR3A|WxNNr32=BzPhk0O3&n zoMw5uUOuiSQKzO+r4rpXwbn{gi#`i+w(S`tj%F0b>pOQ zZyEaH6OM;zOi9b@nA#W&C(tG3q4_A(!YhKr(0?|1H-#oP+edX#;z|ZbVbzibcuEXV zgk!NtaaBsro}gVQQ{Y!hr3lxwM2D3n1k$DCEg)JJiIZ&6UBhV~K^IO2b@?5lE=sX- zuWGymoj!P-U-jtD=%iDR?nC(9tC=mtl@V-bF5(z%Z^!HaxZ_HB?M8+_gQbPUY=XxO z;B#=KI^c=<<@)eM3zD;?`LC)>1Q1LZ;a$-4_riuGspEc9-_?^T5Dl558l2!vQw<=M zs7WpIpLkF}oW!F$8MWvoiAT8_gn}%!dq}w?q$p`j57=n7J@5JRS9-&cZ?^n#;=);I z5aPlqV!Aohus@S*WhlHO|3#r6`?(r7%6z1ZThwN9+Dyf$Yzr+pd6VQvwE>7_EO|D2 zjKHl%o)7a6MS^{i7IWXGP}rex22I_l%?Yl-BK_pwl4Em~znKJd3HS_>Jg3d^@cwDD zzY@r#H-tz=XyM3HMhosuh=R?%Qrk(cedaagi6@w8@|0!4UiT6v?hw*}O(*dIq79l@ zW)e!AZ7lFc!IE_FB}s`IU==H71D*)4`3KPu@vj)2xOxvKE~G31hgqLnAJNjT0r)AQ z{1v|tOR}xib}_(^XOKVmo{j3BARNe&&91NPG#>TflaHqEY$v`~re~c2;zVkA{eg); z`-48wS^QsN?eDzf;>8>_9h>{BsivfupKh0RKubnp*WP!p*&slwUG}zFV{vCq1uZ|j z^5%4j(XbbciH_p7Gz2x~yL?(?*zw%UaDkC-k40UbqLO%KHfzk!iW@m0Ss6HvAC^Jl zE*I3`ktLJJ;yWW>KtPrK#olW)5#>~)5zQm8s%Yrv5Rfzr&%l@`(4}(|F7*G^kW2R1+4XN5_?9^o z%d8f+(}S<-oE+t`AGxa*Y`66mNxW8k~6xm6p6{vj6}HPjsnLOxlpo@!(T zHiVC-Sg%pA3*|#o7*{ETAMfdh@}!%ecua4s^_q{EE3^H^KYpR;F+u6+BHvs?jp+`H zGRm_*-`pldaUzn;bdDq?d&bni7RKldA`NgBqK+2iI#p(l(#fk&UYA4Vw#O33{Iy@2 z!th(A?a*DpA!foZ?=HEwG1Ui;cdNrMCbWZq7{+M9K$B>OcPDj1loxH9!Sx)u0dX;6 z$2SrAYSdx%D+))AQ)39GpAa`qq)%*047- zfDU$SH^Qc?7I>=Z2n(7T^soM`DNzE!lAH`el*!R@UN;a01p2Yx3;uH@)(LW=VU0zlnMH{b`h= zV&D|h+eaE8D&e5=^D&gDB^BaYfTfjt)A1D$g4bu6PJ1+Gzeb@6*^Cc`?y(J_h zcWQZfzux+QvbF_0yJ7B;9XKX8?Cg--Ff!@h=xr6hCF6!c;D$fr;{ruI{IUO?i-bYH zTR*1|g=%>|-RpJu-qI_Va6Wd4&mwsGAw#zf+?2wKUjX5h`Of51J6x0L&kxC0M9t4J z9H;Y<6y_Any#tLLrC7_CwP%m#APoZ0qw~1j#nUcTDZ@>j3}ALflz+En!Ht1dW};LZ zsd}jO_Iq3L|I_Z(`M%g(U3!PYHBt@-16y?Fc*akaa&kz`42yYe_CvBIupX7yLd>R* z#wP8{_bvHrdrXaYGba1<26vr%>ItiBK$Ap$j6D65tB$@tVYB_Lmz1v%!if;h{PxYe zJCemktLK8RKgg>6LS8Oq`Len~s=NkH#}T2}z_6Ed>LKctn`JjLdr5Q7Irh&jG&Dox zu}?-lPdRWXoG&&MUc{%r zgn7gF0T^jqB1JJOr(250WIk4HdIdg^D<_JX=VRRL%k>_xLfpvsvP_xn)ttX z`8|`aW>H+!cRw=vJ}!0-y}fq7B4C#wQTjCWKT$T_AN1>CNCr{9_J>1P-q6F={DQVz z1`ctyhLJNV{6f~Y*77%el{_UOvqnSc-Z$3i6!uSurrteH4;V&14~%DLNZz;epS>SR zMc>Xh#Gf`!H#2yNV&8DH{7^TZ0klX1_pu~>BDadO48J3U zZQqlkI!J$kv_y0wA&#bmi#j$gFxGptedF}Mf{q@jlq!5Sa6t4UbfT{T4Gn@`?2V(QTqEC?XgOYPXLTbzi^{x%7a((@fD_;fzcf{F8WU*e0*tB! zgFU+?XFDY@1cU!=d$;x<^TK*L76V2vc0ESVgXFJqZ`YjOkB6w#9f7VrhxnJ5=lWZZ zC@p+FqU|B*Ir%oRME&SoXNMfdS0W8A*@MhAsdjr?lEN5^mVXu1yEG5A;bFBeCM!fd z2NU`HYM;>wDTxkl%qV6BVUBc~b5f%7Y*~l(r-4tqsl;{Mtb-bdxjD)u1IqU4NW+j? zB9}zUqpOSZLn71S-qI2c9MMfeKi9ZPQNO6`2T3kpsdhhPzZ+SH#j@UrR;$`*Yj^BBOjoyEVV!QH ziOgX1s_KpYoR=lX3&*!pSD|)_i|0Ws$OXaE8M)NrxVr(ga4)YCxhs^q5W0n2-?u*% zS|=fXaOh>bjL?`g&?mBhVDy_(O0C5pDivm?RK~bN7%G{Uj|}J3;&;;$==4i9lc4io zR3^4lAG;>ivu!Y8kQqz6h6!E%^hr2tuZQe>q6x>`I+}688-09n3eQ(rbPcapJltuh z>^%=nFlXo`^Mns%f{@bhA)}cuOK9B(>eJ!r4CDWVQ3do*`ufHhJwIdmUPit1y?ev- zyqzb-=(oZ>i>?wjTRdgE`!42I{LMNBZwynbyyi;31{jaOOg-nm0q`_*MYDWv@ukEOz}2P`HB@gOd$Ha zCEL=~)$6-aL^g67>+g8s8QIbJh%{2|F7yeq22x=?DHE_SNs2cnAgzf^qY1-)4XZoDk!% zaKT)sUKAf&l~XFoiM;-~-n6Q|#g0vlHsV?|68m!RZK)MMRNV4A)oN8C6*(_9ZWkpX zv92tPsWx@+mcmo3c)arKa*N&3?WiEQ<1{gr?eWRN5~8-YzAdL7hi1-w1v}y(2kE%k zCuYz}6Q*9hOI2XX*1O3ETh3=sHyksml|~d4C(qb$WPKKxZ5VVvLw`Pbdr|9ndUbt% zwyNIJkGl5C^jgRCy=cenzBY+-^aIBYhY3b+`Tsiyh|M|cW2KLJs{2-*c@sj8});v#Q5L)r9)8aCV$zCpe_ zcl;nc?|u_@%L;O(HMQQt+05u|SmvGx7TR(50lx&u4%mLmBPLFhsI2|GID`Lrpc;E< zgqDlnONaDKMa@H*xt(SIX_j&~YeUMX6bxsiZeO=81`iR#o;+$(1JSqG+D#98lKx z$I$F_>Sd3xSGSPpFQkuTYEM>oB-^Wdl+ox&kR*jJtoK^!0yx%sIV$ zUV8t!36uU8Xq@MHCv?pOO3rH>b~)42O6cESxR=3A73qkEW$q=)Z5{lNCK%VCqxbdG zruQReAnC=#HRyR0x<1_foWpW|a*bPU^o9e4;`%)gZw!C$avg{wq!`Zl&W43Kwcg`p zi~)~><+@@ezgnu~UONY7uKTuqZRXQfTcP!#{Ohbm2=6aI&QQ7bv0{xv=vPz=Ng~8! z%r9DByR}4mESwF2)O;H4PR9t_btg!!Q-^gE4-M3)Y;35(QKF0m~F+ z(%9^!_~SDEVUr~1Mg^P654bpx@Fp84G+N~pE3tcOQ?luX$<-)m$5X%PkM|<47wFK% z?zWcVCqT84@Mg~IPvK0*i_7!XO}+E=p(dZjm@Ud}ZyUDg?zk6`Vg{7f`??nmTlgdc z>z^SML&EyU(=9O4P3+AV?um9*HVk;*iy+$dw*`y3?ddJZhEFJTW5uNVdw6ew4cxM2 zkA){POB2epsQk6VxT|gvkIc9#|9v{2oF-3jKi~1J&Cg%0TQhRP3xGHhOg&e!+r*FB z+-0LOb4nC^_(5{67JJeQATr5?N-HItMAh^3t-X8-#K+N|!%p}9pF-jR(B6*bos&AipM*OTn`!guyTCikV_w|>s59D~+l z+SMmY%-Z7#mS}R3$NTW(jL-KDar={RBUzK@TQ~Qw2ovte0O4E|EvkHDGn;3JsxVRa zAHr0jghXGli85GgH+;gw7p>coPS5xqayn%&tnMv)F8^)4ZeiJzPJ0Nt2_o-jQx8~$ zx1?jM=>>y93*gG=V)tsBTe}#C&x-jI{9K{AQn(SusvWhKe;g5cbB-S9v8XIM@wAyd z->D{d+AM#G_@1_#@^0kM5VHs)pPx+0EF-zhGDy9I^_DS%e`8@^QCr^|vw%9gXF=s! zw*_0H(zbOtVnIk5HX0+FHi@>Aq#%zm+CS}21m=TcU;KOfaMB*`{EVUmjI7xzwauUDMW5aGK;-j=Qh1f^?sWycNa9xzcKBE@;GJzLmo(R*z6Lb~wp{Wj=- z1A1`+@*Jm!;nT0bPoHgUIsrm~7iZDO8NxVcPOYnXHY8+sm_zsBYiIsdVC4RbcA`fp zy8s|B1bS*YYCqPl2Ptflv#fOA^x9_|if=r&oij4LgRJi#kJyX4%N^yXHSf%k1Xf?- zUDa)I+(q%i**s!+eK%mN5P#>zNM76;{`Asiji)Q;D#Q^Lx$SaxIVRJ{zA~waDC^Oy z`$;KT87W6(hwLXpR6aDPV4z`Sp&^yNBixDT(({cudQFiGE6xdmxx9zu+bsKT()xKR z=JKf)G~qy`+;br!vufM}?8jl(UoLGTVg1r;MebhZSd-=}5N(|v&Sz+X0o-CYJ;~m3 zx+RHuBgpKg8u~ijgq4yfdo0}M5k^$ahP5F}<}e+m2LNJKqLJ7b`YQHEJItGuooL5= zlO`eDuFwwBpf^8q+$cj(FNZq5%ye+byMZQk_U2m)wYb7EZ9Cyx6AUtq7u^rquwanN zvIUwP#u};25d;D9eE#*-Pd~5v%WsXWPZy;TfVu1f1OYnn$%;M4*o2?P8}7v99zSje zLN1X~e8XlTRu>}M(FFF*k}FaOQVmtkxK{Ujfr`=L`{7f~D4vw|Po~ZrkN?90z)f)b zqn9@H4e~ba{UQl(Tv57G_C-N~xtegI3BM4vj==A{*3dYVEigd&pluTH#x7xv3jyw5 zb4qzO9N_9BhpkzPjlz9h#HvPgS(uA9L%EQ;*_81qpc+o!ER!aGEjIEZIxA!9zXFr> z|GB-YIQZg1m8_bd4F?J```Mf=u3LGj(2i^vT8X;<2gY$)!g}{>TF+Ga>vAvm}i>?1F)u@WDgM%S5+2*vVPb>6$AVr zkw$WHmQ+$DvX&H9ZRWFS$Uhi1L|5fq$Q)p|B0>T5(3U*pP2O*JNm}8tC(UPWBf5Wc z`)NcWH0aqCqbzK_Z_vN5BRaM1DN{0U#;(Xg=bC^MtwTwdG`S#PqC=H72euUwZbc@d#nC+9}$Ob!!&$eJZ zm(DxnaHPbcTQeD$6!VJ96#3u%ZLbh!iUUx3t7xv~*bq-LWN-0#e#qd}5#+!ib~v&AM!7w6NsMJ1J20E zVbnkP&bMBGS@3ODX`R+_5xyG)^@pDDF((F*p<9p1&U3OR->-C3MLjO+u@5$jL2$~ zw(Ig0W8cdetACEV7EUdOhYJ59`}5Ji4>1Nb@c?gglE8*m3n;s~8#x5DDY>Z~i_iBp z*|*x7OT9~n7d7SQXm4FOj`DJTcEYn|>ZGkyTxt4&pBpYEm{z23i?CT)mEM-12EMi_WMH{#BvmVVRqf?(I zE;xJP=Lah$DvC^5HKGi@l9Xeih?4dCro}58*&BiCg{=~|c18gbi#YV6&BP>nT0mO9 zYmxP5_ju0t%X4r-Q3z9(`Q4+Ou9t|!GE*4t6Wz(wn)bmS_OxO!vE9Jyhs;W?@@PkoO{#GL$6lJA3pd3hZYKgdP1`rUe!m~pLRVA0 z3d+_ATfdn~><3-`;N1!t!>gFc(9mvINQY_Olo7)*S5MH^2*?yINmQv(VFnGvb6v$J z6UZ&GR&xBJ>un%VIa4W=V6;a_K&D-Y6HN@}m%f%UcA6x{MiP*{`*- zSIhg&*8p0l7cCL(qTxB<+ctR>71Ut_3{n*&7o}UujXsRx%ezlzk*clY^lN}FKYGpH zb8!LnLq3I*fzsfHWY#&p*n>8f&ncJdKPZSZC->dpxoFZq{#=E>_!wZcs%!mG$8qnk zL_pu-(a6<{a)}yl+qs7z4>n6T7AhRxg>0x8nivzknB`3*M)j+-F(ve77{cyDprTPJ zUZCf?tc%h?A30_Ir&)?nFFVaLbqC1!2|!v?Sjm_hVqu*g`|ujAvz$N9lMCLGU`+p; zrP*0Jt}yipZ-%JBUXUHQdk=DGJ?N8rv?dDOIfT*wKT!Z`HqI|EF8m>v+HwXUb6k0+ zn!fjj-PqK*#{%>57d6_Dc~^*Z%Mb)Y3p*{zkh8mc2yCxQR3H~(s^p^B`8-sZf`Y(gaKxSz;_t1+leBQgECQ$XUY;hU&KPfVKPW=C{U>GLsk7@g^_UPx$Cy?xJqNa&>K*gD7B~CIOt>fb}Ps~>=85ue}&VtSf zc7{>cgs0-Yvn9%#YOUkA66N}4h2=-As;;nFHP>RVM(c$rNrN`{m zlN(<0Cf4p}JjeA8`Bwf$6TE+(ettPv!e07UCk+6{jV`5CBty-DRTz^ayIM&RjxQ0? z>e||to50rA7Ih~Sw!@(;bgI)3_R4X?=0ps*LrvDw^V$)~Ry5;HDm$C#jD>|83-|Bz zB(xM|rvwlZ4So~T#r&iB72cq)^@AxQc;8Jw=b)KHyXiI;B&p1Fr5vLtHf@7~8_uay zZl74FZHSplma?NLhar{`Ua>~|eX1b;xaXX;6i2Z60B9{qaL>ok#SU9Yg0$%=#NbFG z(R1jg;4%Z@+jipH^cI0Q@tN}r`>aDCW_u>eCGQM7e}ts48Zo#%c?y|!Z$S3;7>KiA z*3g6q4^25Vyi1n84OYOyz%!sFCb-gXUt{s|h@^s5t;z=RM&zp@zfWOr3%fW5z^MD3 zExockC*u|)amun~QyY3S&x0MRGyQR0DCfv{I}+T2ST_l(;x;CTEQrLgrb%o(6 zdv^!!SBVVuQD*`jJM*VHZU0p-TNs58iiw>7+b4?_fdf}QGCXS!clTdHpU8>I=)Ng; zZJgI`oc}B;bXn~0hc}J>PxN5>jbPlLVXy}c=05pGa~`;MYn~H3{T>d&D9j_?O?q=b$*!DGr(S}HwW5=4cHPcxNYtRfED1A5M&$o zM;1>@A1b*Ub++Fx2>5Np5>va8nT6S#`EGX|597j2X%!^ZY)cbfmSe z@j#eey{ z>9ff0uF{%b_C0j1Tn=XJ2Mq6e70d8ebIJ;2BC zRT()-!b4XI?Qql>cCp*AL&F9y*e*Sc&%+=k8qt7P`UAcXP8fA?JO&~# z+8odUWsJ!k>}YTA-*sV3weJwGCM-eM=c=w)4oxtsK! zeqD;8Ac;iTR9b^1zAf3MlH6l_KiDDvtLoH^4-9KeAOC)qSrlW0*Z6cG;Pt9} zh-%aV8~(7Urj@+9+8sl1Ti@6yX}$2SJ=7f;5pIM`{8^EkYGB~3@``0<>Sl(kS=d@k zAHJX4APLRAogX_e2Q^BRJL^qPFXyf>ANS0%jXTNRQRes$NQ;)*DL)yJU?0vmaz$RS z@%PN@vL31@ezcB3cVtG|XS>eK@aID-=imJP@TS+EPCpz|paWpf+;XziJVps)aS8q! zTeJR#`HavdAVTS#$O@8g?|-00^+u*44Uy2)2r7^GCYMebh|pGE&QV_{B7*h}36b2N z_Z#TmM{fH4jbk`c+Yf4o@j!bi5V((G9D zDtk1kT)jMQ{#DR1coB;5&RfQs+M|8Vwraz$f8|;C%ihw+(!06xr}{5k3fJ{`)MH5h zxa~y0c#togM*3044X52?HlF>kX|FuLbxN#oo_N%BBaXq(`toQQkUUH12?l@8aIIg$ zUwbL}nqxUf>;{C*-az`&-GJ5&(*Y*+OC#6U*QWpSt6~5bhfHSeYkw|1nKFPqR6T<* zRqms(ZbR=YghIc2!Mp|LH=xKAml6;Q#PibFNBUJbZ40RDcPShxO7Q!}a*^vDJhQu) z84@F|oIvHM$JWt1W?#+invMC}_NvJ=a*C&`>`ts$zSErSY<;nm^yAbfBWyv_bI@-l)ose5R0)5ffRUC z9=5Enwh_bkJXe_cCSFQskegq-xyIbsMSoq%f2I2WIExGp3@0SwuRQoC7yDHd3f=uC6!~)4m~X_I7l2{b_dGP)K(A z{{4faqa%Ie%nOi}l@+EAgkGMW@g*fCE|}IG+#)r5195+)Ic4_1O8lT1N1yzaiTVJP z6e6YHG3JY(NOW|4l!(pXS>exZiw2^=`$^mt6;pg@r02VszZ&s8qu`}{DEp&h?OK>U znM3+)`Gv)RREQ#UGY;RpmgSKTg=d%n_L}&>Q^0^|b#=81Oln|7olRV0+M7{i5998Q z6eVvyGBo&U_bl(1NB82{1+hJc=ASU1JyzZQs%t((NlD51;%EOszvWOS0+bVNX@wqH zx?<~0o-FahGfNU~fw?kRYr^)!93N9GAo256HSZ~It?_j9#q0%ioYf<&-x{^L^2)uvJNhyYr2m4?R0dF z%%=g3Ku(c|16^bqPV*MN@Sqxu<8V?$8Ic&TmduLxaC8Ja`E{Te_&VS2^Yinor}OTy z)6>f5i^JKL2a7!9k2xjyn*AsrgF@|g?wylX+S}7&^Yt<~WZaouQ5O<08#&VbjeA4z zNfd;>fohH=Ua$%c>XGidkPs7qR5-az)5Y}vwc>5yXs38Jzz8(((`H?6RDp3+aFUp9 z1{CQ!g$W)Rqhhx-Lr62}!3Rmz)624?9ZjPVDnA}?EG4aJS4Y=nR|?;!`L^|t?IH0b zT5{T@t9aztB6lBE!>-|BU-XU9sLMOyzXyNV&)F@>@y+iSv3gtMp~p))-Y&qr-YPPP zq3}K}4ImBNBg;%q-|HWmh9h^wpz)-dU!ZuBYs~`$o5jm)Hy+`*t@(Ddk^n!VZ*c?O zQ$LcxB0q(A3C%pKGV0@=@wHQrtHarne8CI-2tvkPHo5cPJKD*{U;Q4_Z6!Cq+hb-T z0;@l)iEK2gW&V>NnG4a?*KieEdg||)LZN5v7yelh^#Ejhmw@pr?qs;Z<@)XQ{B0-2 z$d^&z*W2^H=oKVRbRsEPXQ7lc==9XX?L&IiyaBz(ZxjR^M4Lq_Z?>2^Gs(VGNnUjO z=9O*#^3Io=!@NrbHcT8MYOt6hdk+&J7G_c!K7tGh(gROD^f*xTer^lf8gy!SR4(EF z%~)TqualliAzW7@#Z!jRu4&~c@SVwpFAKy3ak4GDRZw4ZMuN?%BF72`=K1OO+HlIAS<*c-iaEd2XOTFKX&aT~w;V9)@iy_>*OUzn z4HbI&`T#OG@(zS)KwzGBlvTrn&Z8Y~WHwdOA?`wE!(ytFGADgT$XkE`{F01`uIJ~W zG7StYAJ%b8TKm}%{#Mb1UU|B|e*zJ@pev5uqup;Wjt^J6QU5vB6xQzK#LfSHan8Mh zYsai1(`tLR*E%MoOjGy)k5M5w@$%An0)5(sBIm{MAP#O=3m{d}fbKcl5@T zTdP%3iL_;n{B5ASG4=pXufFt9qIAP7vF|QP0B7z1-l#fibCW3);Oqdmf~t0F=W%nC z+#Slyjl#Uv^8PX5h4&JufyMzC{VXmGKw1MyfTx#Nn#Bi|PeRdZiBEY((aL6Wg4aP& z*}!Z6#cNdB_arNPc0D#jeqcX8Vv}{&zd|~$2`{T-(CMj#fAcMxX-wPoEMLfV;Q1EN zGR)_wykDPnUSYBjYnYnS2>TDK-`ms1?xf%AbwyreKuHj1JoF0OsT;DL0$7Z;H}y{v zVXp<;GRAdz|Gv5jr^B=chAdVI-h(}{{fWhJU^c97<9rtak#ulyP*5LatlS+Tv75^j zNeWqB`Syf*FkUVj%&rzMvBYh^bWhPeZreh#BMj#GD?%bpa=sQAt-0^Oj-5=vi2)>C zckOE|*wppwHtbJO}5+?yw!N-N-gw3PV9kos>K%I@NGWk4rZVSxm z9Uhj-IXR=zf_f|wi9BJE(A~w=m1=reJY$U#vc3eEY}*mniHcwbs~?BX%bgm;FMUy0 zB2?dR`JsD1d@Pvp&gXD4-0xeLR2x#$J#Do>C^Z|H!!mr^g7=zx#0sP0R-nO@`h4z= zLEDO|S_6;eE;B#${OoMU(eEkad6(6X(T?!XQnX2ATJ)i>dn!7P1+Z}wOEJbxAvC5E z{Mu+o_<@&z{uRqzC=g!RoDDtq#-IKm!wt5I@g&hgkS0}C9*%4v65$MIwb>KVd7uM^%kZ9B0o<^)rqt$!IAdr6yF z`VG&DW|-hy>d_>_nJW9U%0j{N_Qy2!7wFsJ;o(f@a#M)#bbtmj6Ei}T8<~%&QHH@d z&M@duy!`zlymTXVn8QS^ntLxD75Ds=AyMciH;@kIiN|1S2n#72GuMCLPEWb|`E?U* z#l%WhejC_0m_g_jb97_E@s{}(|D%?J)PV;@vSc^AUNPCDni-qJQ1p5>r)b<>PgPgx z;b;-cG^n$OljV?-p8TC`;S+i1%%AM3kF+Lade;Jf-A4*+PocL-jAOw%loFcI`T*AD z3QHn{p8?CF`p7+eHkr>qBCDDZ>isj6GiW!24g4IN^&XxdT-h&zmr(vI_Y#`no+m9B zr-di6NZ+IN3HAj3`Uu~HWc}n?og*yK!nsn?I9a$5T$qffk5CjfCUt0IOgj46Y@ztX zLwPg(OqQS_Rn|nk&nrehAuiC}v+lGrhHFOgE2m?%&$6ly59h^dz*t^M0ay8=En%9h z_|kaHtbPgraCf3)`iE1H6_XdCvb$uqlC+2-J9-5p)ekkkc$up4%kNE|eA;m?5dm+&%^C}s3yDtV+_6tIgumDUeIIQ9#Wh$MQD#X7gX>e{Rmm2)(7m=hnGQDp4W1 z%%NFt>C~gBTFlYqV;R?51@LFOv&J2GgvnStKPw3Md6=)!GkV=y!* zxW~b)Vx&WUsESaWaaNZfDtkDMRUs-T1*+gisddCx;^&L0CGPTh(u6~Bdvtmmtty!Y zKMS93G$xheiM?x3nUba6;uujIF6%B&ZE-a>reqHDntMvPE8n{4= z(ekjkxEP2j#y=0sKp$^PTQH^lt!{`_;CiU#q%4IIr^u-858lmiU_K_*vhXf-P7axS zZD(-zOLc5ceR`J!IpkCG(5)1^SxrSu=G91@?@oSdLTd+g*-h1#bWq%F0W+3P`t0^L z)X$+m2MJTLf*SAF{AT&CmVADStNc|!vm0bww0m71f4slfHZOTh3gub^jhP!6<7^&9 zy_5U?x(2gkutXn-yx7r|;%f?_h?Dj5@=6eWIs6(DYPX`v^G7w)$HJ_O7-yJoeYqkg zE0gEAesf*o!?)yZPvhuMa^yYvJ%47*1!=_`X(~gEZA6Xb@hks_1;{>MPB?7jOSXcW zDWAmTEok(w_E)%V$v+4@o>b` z`R~~yv{zN-(^V^rWRZqs{usQRhq=M2ueu1fJ}a%Ay_&g#xg?`*U*_0Om_1AN zvBmlJe*sG)wA{;#YeX^;2d!yH1e{9;*91Z`&R6>v*p4{Mya1z#Qd)0wWWy!x-&aD_hp!R9?$3Q}bb@-kj-OW>ryE;I(Nt!Y6h|x_>)v z&BI;nbLu>*rZzQQdji;UK$~l>p=s;`!N!KrM$32+)XakP}JH_<9$OJMTcV2TZZ7puW$nx)z%4D_qHRYi$J1u^YWudhrzr7NP1qdzT zVIBYxxR?Qz5za#8z(XU$a1KjQD=B71DBeL9+JgTPX?|@@tpz~3;m5XzX0O$@ZLt#v zxCpQgfFC5fnqgRz>FCXhc3|yKpt)iXltO2rrX#(8#y+RcUNWIfHoStJ-WK?p&8k~5 zr6?0BMcxJ)*kcmbYlF6z=4UB8TZdMm=Xo4zY=i}8d(TT2H1zaYdDEIM_&_6r3?Wlw z6}o-jPvgOB0gT$&Zqd)N@o{Zz3Sb0lun0}7Jv=bx3;y>hWJN5UmAjSo#G898_?i0rd>QNH2lUXnhaY%$keoqaoBvuud{qQ4Fe~ zW*p2j3joo2U^Ojke2Gpb?+Hd*(@*JCXLhDy{Y4+z{+KpZZ!)#9H zEE6DFk#>~#MtID!%us_t*!*$tX8uv-0faL!?(iH}qK9UIH9ZL!+5$TI6N zB;I-1sXGL7;+kf1D%KklK~rzCs7%rKP`^$Df_bTR^xFFO*bo{>dZThGYVFm}vyp}Z zv|5i)-iHj;;Cb6NX(N+;ZuU70BSwRUBHIkaUbh5*+6~VZ($!SpFrT@HFHmVUY2RX4 zq8g8d`GYu>kpa{OsmS0Ia$r4=u1zMnYV1J^iS&P4WtmrMX^{@2k=UY+0HN7uHhKeX zccyU*PqM7DNvrCNx(>aDAcmyd&(jlUVLcbJW-OQ&^sRzUR7YOZwla*E5T;CdBlB#K z8M$8L13`JtD(rSy}MC_=vvIjuJuD*_(@B%-8%^Dv@v z4M5HH@VHoEat!f z*bI;H^!`>HrPm_dn<6a6o8A)z(#5(_2Y?QeZU9lwzJPg7xfiXSEQm&|3G-d-*n-gA zPBmRrUV0I6kov|kLlU-lyEaJ)qrl@Qt$SEp*Y-};{G^q$d% z*{KkTfELe=p!ZQ5t(KogA{w1Jc&;|yd-Dc`TDmmr<*?-g+te(Ov7qA#m@)wnv-9$T zHd{07P+-?(cujODcTBr&A689zoc)Y_I8bVb!=Zp`Uac2xUb|2LFhW_lR;lJi+AILp z8dBio(3?Y#71J9Arv@a)S}kcEhV}19pE(*O#Y!s+Oj?UK``+ya)%05AZO8_*cwY=J zV&9KXN|B)=3-mHO*3868Hh_JbO%wQg-v#m{NItpDo*vQH46FputUV{_{AV zo4poaZ_@-Ho#o8e%XqK)IE!V^eg^Qmyzw}^B0C8!rL(9j19kz!IkemFHQ=H~W5LnG zuB&akDn(f2g~v`!F96h7r`zEi)`On~L{B3hrJ*JL)x^H|(`5ATY56oeeOXGY9f0+O zU-o%e$!E0#-$O-vUj1H2<)YK@c)ScVH9hy9zo6B6Xt1zN^ajfe6s6*lVlCyM&RvEW zD7T+k-}lZ({`2%Z67FQF4k)z8$H#>zDDu0HT1=5uh)5aI0hGQ^+*4}0>)7dZO`x)a zIqZVf>9xJzUQHJ()TUh5rv0Jno%`641CsuBG3_^KM=+~Dai#p zYP|-dVfC#IG#Nu>fn<$quoF4`OrQuwq#t_Mz$II6%tI2-P-n{Cy=DilE+g=nx?0rU z4l%flFv3LB-jyACr=+z%_EOG>*3j=0y#Pq7=iL9Kajju7+>=2rHci?E#=|0x$K%X> zDB_&Y=YEm4X&#+o7}8A2J+nx0s$1ouuH7;6{Py}V-E|+f&mL;X@I?=72IPI zYDHd*-O!ANodJ=Rp&6(iP40Yt8pvuJ@6D9I?R(j% zZa{tQn#LrXCSyU*Pq(4G=QT`#-Eik|uG%2Iiw?t&fTg+CtWj@LcB+TIg)((?HO}dV z>%qWM+jgOK`t9v)HWAtL)yt;)L^NH*!!zwi%{tQMl&6@?7%o<-0yolNEo;GMfvyf~ zsGqON{5dRDZ|TA{0eY4JWF`yK#hOK$n$1ItIQxDWWFr>~q?0o%&J$@cO?M>v`5qS| zX)bQ6eLx;-k&_KjcGjOAlg*lgqEiFyp9lt)F4B&~_LRiJzq`9DgHzt#-WKm$PjRj- zl~`8A9Clb%=P@cZf|-a3u>A-OhtM2*)R<;7Eg3Fr_halm@G`^88fax0a(X%2OU!D{ zdo67=pP83<;F|aRZHu#Zkg`ED zn#P0{;JzP1-+qka%1YVrem0G49NmPMeIT3Bhqex4T}1D(hv+S;3{{PA1rJ$`P8~Z| zi`8fBeKEYDso-gQBF~K$HA{QF;GrK+9>x zJK>tFi2-Ld66G4;IBVneHfv_R773*AJgwMD2NDJ%W&=SYX253OlX@vGS($;#AR=cq zvmxyU^t!NWFYGOds5D^S^3k;z4aPEyEXvk07PaH0wB@z#di4HQ|18o%M1ir)mUGG{ z3BGS@*xTD%d3kx6HB@=eA`70iAlRBR(mPzT)@SzqGBXy-G+fgDfs}Y{sM%m_6cfH_ zAX)oIc>MsZ#P#-ywQ#3W;OU>XTGVqjuy#dS&lWP})<+>nO>LDe;E0FzzPfHBBE#b0 zX)pY2!PPhgVR)phEORc?i!OME#!?{Py}!Sg!{Jc6D~$8dz*0WIT=Mxn?m&^Ano&5} z!q=^+R`G>CYf&@NgitG9Cs}mUnKQ4KF`Q0kT53ch5L=((Ax}dnJPkt=`T|()cSa>N zlb+mu&d0~cGP?oxXZHHh6r(7`W#hK8Q{KCm44G${X9OU!3{}5Aa1lK~#h%6=A0LH@ zs`Z~_Ls4`ufi02s@Kev!gmo&~pW$^{>o6k@@Ur&gXSH9%?_1G}S4Uyf+kbRw)%X1c zuv01VvR$(-kkyQt*1Wk++gQ43n{3!gZ}EUNlYPCw8hQc9K+QXwrkUXa*8r;M4Pb&6 zZ-GXeKkH=luoo6=YcUR8mgyn3_Vk5VO3xOoDKDAZkIf)zCQ0f2;nA=Q5OpRtXwwpP$|46+3Uy1}LwupQ+uvetIS*3Vr&5 z=jhRtEZf8+C~tzbex4W*tA$fpiD?f2>=ph0QG=8P>Fszoo4w8qLG*^R55l6F?9H=U z#a@`Dyq+r#&g{rV)^n-xHcicVEYBuNr-qid*Y}MrWUrOht5dE0woUyO9&f@}6`^7m z4<#SuGB2K;mUD$gQ-)l+1`T;xT^J>Sev2J1}I1CAGuNm2B~G{J6u z>t3r3P4x!R5BKBa!yR_YhDWf|^71pq_ckpB*?@mE&7}#&Q&KWf(99!lq$IU;7|u<* z-A>-#-pU+A{T}sVjhv!tg14uSxc194^01qul$2vx)b|6O<;WC-Ubef2`LNGQV^yrH z(ym9=Fc#w*B3)*y3e1=Wut1;-K4oquU6EHE8F~8y_ena?6k5Ak-bO#AlUoB#y_1-GfFMm{7eWky{|r0 z&h?5GtPRqv_nd)}dUP8mFu}^r114uC7Q{nQ-`llkJfb)si58KLmj!hN&Z$lKf7Of~3n;hDA8 zH6^7-M`nDycQV4krzeV6n@%%|myK^*D?YP0n%$ckN3r&6T63}pDrEDEnDOA=>0I-@ z%t?oRs9K>it0loYe5*0fPn zpW96V^VOG^mtyS}rJE6-pJjI}7_vr~$hnyvEVgMXQ)}9k+m=n*;6>l3XkwJNx2zun z4pJQeY^I=}cSgHYKY&_ckC(<||IrUf&>3cGhctc!L`6#=v z5?-4M>dkF8hAm-OTJ9myx)$ATw{kw8KG-#?94c0bbh03?Doir?%FQGKOe;wTG}qJ>xb#^#aVSomCpuUdo%IY%R@X&1@8z z#$r54viF?Wi9BnL88HDI61Jy)O_!s^RJ{9`Wsx=B_}&KTlZibLJ!uo#=pe~P(?@pr zv(tPWN2cdq+7sStNtnrqJ}f#RjJn=jR%W|a1CU8sHO--~n|Y{t)Y~pyzIBm$&qL)kh7k?9j81*B z0!mrML~Pl0W;Sl8lWe-qH3+q;)@)=~bZ^Q*q)vQIN!wlm4}7%;N$3g4PLefXmj|dt z6Lvh+p{ALC#UaRBCEW)yZB6=R>8Wx7NnO{C%v(Vk!X~iD>=UINUHOSiLF#$O$F)e7T z18T7Zn=ZgXwru3}THx&(|FRjyrMOt#UYk*vSxMq8IELPPC$go?5YTj)QnDM>w@_nQ zt%FI{7&3b<#`?R)fR%kF0Espu(q(`J5WRH!dl{XzJ^o(byiJ{>AY|7e#*Z_T5Gxq+ zKV=R$9`_VNA1O?Z_a~&ow?3NRIlx#%N`yBcC7Wb1-lrfQ^Oy#n;ls= z>r>jEBDRgw_B+6IQzOA=(#y?GdCz!tO*z7XT{aic{ti=Tde6(Ytk%$dHK}|CZe;*l z&F|G@12(<(GzaXk(|?n7LwW!x`upwoQ5G=Zn*F}=1K`tuyk-Zl$9j#6&6-->YnRkK zcFk+Gqpw<)fq3PERReze_N@#xu?qp;!=}drupSG#WU(BsT_o2~k8Gha%Qtq)MJK3- zQDk^bW(yWQi<;r9HG$qk-gS#|%hzUE^I6M>2yK> zs54@STu8lcx@-9Hp~8GK@-K8L$x87~&4R^Pv$k!^8~}_rL;Veu*lW`8P;$KpGo#R` z?$gm17%A-`c)As`c3( zvgR=Cnc0nRe@7eW*fOrm(#AD4evQRawE5VFsL3EQL6Y~tYd(VwEIRu^mz-|=(Y3P9 zmb`{4{cx=^&EhYa`KlJ^*qYdifimjJv*!-4A6T8TC%>+7`6E||!&J)8Xy1;MB`)eglql%1DtM5lf2 zTn8IC?cZCb$?8%V;HFDAFOYlq$ea~GGgqGmbi3}@x;UTDr8V1@ByGEqo11QdpUnsS zw38|5_ip$M%){65c$Alymzl1fH8IqFMX6@QFRw}eYv?`w0FZ8L2O0aiw*Je|Z)=xk zQ&ZM7qOYYzI#z!XQEL&{78!*$jZc4NZooB)J#Vd9Ufh-d`o3t5zHWJL+jh~qoxOLj zd}!NNq=12aI_xCk^le~3`FS`TAZ52F&wn z-%NZ{gBLJ8g+7HnWuZ0jh>&@&eDY>#434sp-3!Kad3`8N)5vbOljrAWd3kw}hlhtT zaJ4h0fR&PTE|2@6iS|C!BU1W>jtD8`hdN-Ukzwi>Kq3j52*YxfY<9jU%9GP@P zHE=X@p3QfJ5QGVAyup(-zI(NqRt-g)jR*4>2`hh%GAovWWEWR zKU;0E)g};YHWE{fc>)!Cs(YtI)S+lqZ`o81EO6M#60A@96Y8LHfuqBJ==J+raa<#p%3 zwHU9?+#byjF2w2r%6eJ|AvuZMptVw2#=tNsOF(FPgYKhgJSzW79 zW^m5l2F~hmZ?Spp)D}Qun-2EX*&?ht$um{x8h=S|<4&a!KR9&h6lI5CY3!^Di`Uqo zka<01dXlIl@q_AxLGWb2Hb64=rMz!bj z?Dci6?b+VzlixB2L(ssLU6h3mXbWxKI>o04V=uOD2VLMoD9MM*~`;WQIAPdma%&2S53VbYLA8r09 zYhvxxEIzG9GSuGx&yFpKO&WA9x*BOQbp7-!ezFbwkg`dSQ5J*LAQ)h&`XSY_H2 z59zn}PiK!z?#%*|*8KPVP_}S80+CJAE**h<8f(f3YSZ}0t4uG{8kd*IJFa#RW475@ zea(zFEwJMaUSK$d&QNSQ64!yb0EY!lb{esJ<>3(`GV>Iu9S!c)yj~sc0mV_{QHCLS zn?vI=Z*Om9$Vqu0$Zc1;WY;hm_IY^t)~4%<`;WD}V@^-{`Dw*tj|Qi!3k$%4hSk#v02#WcSwGCm0vQ8cmjQW{8j@)u&m2)*zK+-GY7toGT$^ot+g+8_XCBq! z0cw`P@Z`H*S{R+=`qa11OEt7v%_+YoFl+xss%CSjzKABX_sk2Dtl=t3v7-Qqg&zTq zTJ{SkV=Er=09po?d(>-|Ei8pvBAd3A&CP~>hUpp?t-qZjtxJVdQ2{nG^q7WyVeW>0 zD2zfkz1e($&2IJ>T9)+N6a=CMA@*RR6qcR14Dn=58__AOK^6VCo_#ax1HWdVibr4i z552C1mUS&MHzSLD*JNx_CX%7yk&$do+8m|QQS(}4spZO%1M6<~ciBmADPvFI)ijN? zo7T;kF3)lK8k)&iOfVh+zoxmQ{_Qw6PR7}QZ4HGXgd1qud3rQ$x>$Zo7n;$sXFmO& zX=sg*f&pcAP~`jj`wZD}>{DzM4L zif+X8x@;74)|pjs0enAb-hl2IB92l6_S_EKp6+_XW{xuvTAgw2){fjdt5}O|`|xTU zVA+tANQRq9sBLOlo0{qkk!|FfYuAW{*!zH&f&~g|G6JtIj{<4N>_jd?*oeC0vBs&` zmVWkL=-OSEWf%EwH);XeBL5x6O%2QN`TK08KlkP22Ou~FhYA{SO)WVPUYtuXC74Aw zl@HNC2o~X4ZHOBgA?$WjdyXnz7Qjw9^!L}e_-eJJH{+nz{_1=_%h#`8<@WY=hHPg* z*jfV?R*y%3T`g6JR@PeQV|E>Ho`Q!Pcy{d(7^(rgwd_D-k=``TtaEU_M^GkD<$5b3 zJ-|u52TO)CdNhd0>3o)ktl`c(QMF!tO(~OeiYG0OP6FE*#cFa7k!Oo0 z+Gx=PANzi^(8OvS*uvEJ*rOF|L`tu(uVHG*HryZmRWoXxy%*erwWcLe2IA>4SlQ=+ z%-*%K;HK06$XwQXJPaeEZx1H85D$9enEPC`3|OP%J^lFj7$ZTmpm)2-xUgn6dnRD9 zz#YpQ=FKKq2GWGSa@jN=jRe;;2YD#Hhm7m;p{Bc$jn2y2NE!X~_Vy;n<8d)_pr(Fa zLpj!@^fh=!X76<^?`{n+S$j0|_KPN4XXUW>o*0{9*M#=zkM>gAPS159jGK30^nEYe z?RFFbsn*Gh3|QI=LfE8+klu^e4p_+M0LFo$#5MZ+-nc7IZfmWXYtqfgzRbR7E&5@y zPtT^wd)=(h;r;zx4u^w?i0pQ|a10CK~%eT1Y-Dy20tSlB~nDLZTVgU zRN8y#tuH3Y)@4=(B-+!vwp~10_+L4Pqjg3s)btWLQ^}y#G|OPYg@oB+q7Pvy><$Y?l)7= z3Bg+QJjbkL^JqVtjz*1C5&lv``>tUbvQ5YI95v!C&yCm1D0P_}l};I|?`6gdJVFKq zjyHtD9XC9l&4}#7#j320v3+_NE=D1j^(3W~XlFEm#AB z_E~lsu1EVs{sPu=%Ijgk?_rZ>2!Ax{O8+;8Rd!uB^R~BBem%z;?o!jF6lGKzM2End z=kLuY%mh=G24#nh{+^z+W9#&2ok!2k;tZBGV*ix)*0gGkw)1SaZ7(PK;=U~JcZ=6G z)^-2{XU9bwh)`-oDxT@aVi8F*vq7p!uQIB~Gv15>5;i~B0tV<=1|aIU)&QQh@nWZr z?d;O^JLU>x*4+pIPft%YL$lJ+%=W8>zN=~E39Z`xfG_4L=}~)`otOO_+D^;*`m;wx> zNk8QF)mc{HDG)thHv4|iTV0baMDIaw{2FizedwptN$&3M7WMh`TJ>o$EXE_lP!CXy z0B>G~rC8cR*DZOY>5$ba^+zlc_ zqn?or(l*e}sQ#8h><=X?m=9>V2fwWCCg|KeRbMtagm7?8NxPX1iPD?n}z!6-sgxWFh%Ro3X~%KiPx_%_f+hq?}tT6CWFWz{dhzUr8+O=gET=Y zD8(dYf%!D8NHbir0U4CXLjw>{y@*V$kQr^mPC#!ncrCNFbNVtq-?Q(IvKp_M$73;= z1r=-ijjYD>^>(|RTQ^!Hn|aOI|86&%g63d>c}*=fwAMTb3}X=REzD|7Orw&+Q{dI$ zP*EvhHzzb2QRiefyD(BrdcklyXqy?Wjlz6tyDu$win(hRo`u6$y3YgBJjnIZOEZ42 zQEy@xM4JEo`s>gv=(gOPGir*^e&ku&w+1n`2z3-dJdnno1lL%VWwYq@X7)~nf_&VUYX#`_xs*rnI$E6O2WvDVSvzngM*si-07*qoM6N<$g1S)P AjsO4v literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/longarms0.mdl b/sources/resources/assets/eagler/mesh/longarms0.mdl new file mode 100644 index 0000000000000000000000000000000000000000..29895c1ce3ae88bfc9139373612efa8f9a3030d4 GIT binary patch literal 23817 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 literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/longarms1.mdl b/sources/resources/assets/eagler/mesh/longarms1.mdl new file mode 100644 index 0000000000000000000000000000000000000000..a72acfa5b61cd400270d9cd6704275a43020f6ea GIT binary patch literal 4425 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 U9L?4|op;uR&+0%38-fG=59{(=Z2$lO literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/weirdclimber1.mdl b/sources/resources/assets/eagler/mesh/weirdclimber1.mdl new file mode 100644 index 0000000000000000000000000000000000000000..933d3c81a872dc0575afac7334e1a3136668c14f GIT binary patch literal 7785 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 literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/weirdclimber2.mdl b/sources/resources/assets/eagler/mesh/weirdclimber2.mdl new file mode 100644 index 0000000000000000000000000000000000000000..728db6a27c5be259822e82168dec491053d184b9 GIT binary patch literal 705 zcmW-bZAep57{?#?>R#PT>sAEa!J^E-wY0=_Zzs+C6f)6Dtju$^>F5@vPYC|Nn4)|L4Qc-*lika3-oWLcP_R z?oFh`ctVMZ+gYU;+*2K_s}2Q2AyMhh?uuTB#&(L`iXtWxJ-z9an2e=j$xJM2wF1Bf zOm_0v2e}+5d9VVOr#(`?WZJiH!cmYEc5%fYm{`pi%6x$Td>%*Do>wcWYRDuo%2^gY5t>p?FS`O zXQw0~ABQ<*Nw#lcnTf6ccjM9Gc90QUzd104oHkI{hv+WH#lOFLD>ght!9>0;4S+5RiJYefSDUeb^p+1?Z}m GtNsJ&gT&+j literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/winston.fallback.png b/sources/resources/assets/eagler/mesh/winston.fallback.png new file mode 100644 index 0000000000000000000000000000000000000000..b0da89c65dc316addaa706dded5a4a0583d62e4b GIT binary patch literal 37932 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 IM6N<$f=~GgtpET3 literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/winston.png b/sources/resources/assets/eagler/mesh/winston.png new file mode 100644 index 0000000000000000000000000000000000000000..fceadbb2eb2ab263182c8f654d2bc07af1791d67 GIT binary patch literal 73074 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

@yknmeLTy;%dxgQ5Tem}fmdpw`C^-k@3qt|Os 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 literal 0 HcmV?d00001 diff --git a/sources/resources/assets/eagler/mesh/winston0.mdl b/sources/resources/assets/eagler/mesh/winston0.mdl new file mode 100644 index 0000000000000000000000000000000000000000..f66da49ebd6497e7585b493444a91602feb3562c GIT binary patch literal 19989 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


D6a!@*sZ4l=DTL;7Jt`;p*ai7 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⋘+ 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 HPyW9ELQ##b literal 255923 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 { var newMod = window.prompt("URL of Mod: ", "http://example.com/example.js"); + if (!newMod) { + return; //User pressed cancel + } Mods.push( newMod ); 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 b0087b1..07d0c9c 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 @@ -46,8 +46,8 @@ public class PlatformAudio { static final Logger logger = LogManager.getLogger("BrowserAudio"); - private static AudioContext audioctx = null; - private static MediaStreamAudioDestinationNode recDest = null; + static AudioContext audioctx = null; + static MediaStreamAudioDestinationNode recDest = null; private static final Map soundCache = new HashMap(); private static long cacheFreeTimer = 0l; diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformBufferFunctions.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformBufferFunctions.java index 17f28cc..c3b6593 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformBufferFunctions.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformBufferFunctions.java @@ -21,10 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.IntBuffer; public class PlatformBufferFunctions { public static void put(ByteBuffer newBuffer, ByteBuffer flip) { - int len = flip.remaining(); - for(int i = 0; i < len; ++i) { - newBuffer.put(flip.get()); - } + newBuffer.put(flip); } public static void put(IntBuffer intBuffer, int index, int[] data) { diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java index 813c779..5d948ae 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java @@ -18,7 +18,7 @@ import org.teavm.jso.indexeddb.IDBRequest; import org.teavm.jso.indexeddb.IDBTransaction; import org.teavm.jso.indexeddb.IDBVersionChangeEvent; import org.teavm.jso.typedarrays.ArrayBuffer; -import org.teavm.jso.typedarrays.DataView; +import org.teavm.jso.typedarrays.Int8Array; import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; import net.lax1dude.eaglercraft.v1_8.internal.buffer.EaglerArrayBufferAllocator; @@ -85,11 +85,11 @@ public class PlatformFilesystem { if(ar == null) { return null; } - return EaglerArrayBufferAllocator.wrapByteBufferTeaVM(DataView.create(ar)); + return EaglerArrayBufferAllocator.wrapByteBufferTeaVM(Int8Array.create(ar)); } public static void eaglerWrite(String pathName, ByteBuffer data) { - if(!AsyncHandlers.writeWholeFile(database, pathName, EaglerArrayBufferAllocator.getDataViewStupid(data).getBuffer()).bool) { + if(!AsyncHandlers.writeWholeFile(database, pathName, EaglerArrayBufferAllocator.getDataView8Unsigned(data).getBuffer()).bool) { throw new RuntimeException("Failed to write " + data.remaining() + " byte file to indexeddb table: " + pathName); } } diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java index 55774fd..0f41540 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java @@ -4,6 +4,9 @@ import java.util.LinkedList; import java.util.List; import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; + +import org.teavm.interop.Async; +import org.teavm.interop.AsyncCallback; import org.teavm.jso.JSBody; import org.teavm.jso.JSObject; import org.teavm.jso.browser.TimerHandler; @@ -100,6 +103,8 @@ public class PlatformInput { public static boolean keyboardLockSupported = false; public static boolean lockKeys = false; + private static boolean vsync = true; + @JSBody(params = { }, script = "window.onbeforeunload = () => {return false;};") private static native void onBeforeCloseRegister(); @@ -291,6 +296,10 @@ public class PlatformInput { return false; } + public static void setVSync(boolean enable) { + vsync = enable; + } + public static void update() { double r = win.getDevicePixelRatio(); int w = PlatformRuntime.parent.getClientWidth(); @@ -304,9 +313,41 @@ public class PlatformInput { canvas.setHeight(h2); } flipBuffer(); - EagUtils.sleep(1l); + if (PlatformRuntime.recording) { + long t = System.currentTimeMillis(); + if(t - PlatformRuntime.lastFrame > (1000 / 30)) { + PlatformRuntime.recFrame(); + PlatformRuntime.lastFrame = t; + } + } + if(vsync) { + asyncRequestAnimationFrame(); + }else { + EagUtils.sleep(0l); + } } - + + @Async + private static native void asyncRequestAnimationFrame(); + + private static void asyncRequestAnimationFrame(AsyncCallback cb) { + final boolean[] hasCompleted = new boolean[1]; + final int[] timeout = new int[] { -1 }; + Window.requestAnimationFrame((d) -> { + if(!hasCompleted[0]) { + hasCompleted[0] = true; + Window.clearTimeout(timeout[0]); + cb.complete(null); + } + }); + timeout[0] = Window.setTimeout(() -> { + if(!hasCompleted[0]) { + hasCompleted[0] = true; + cb.complete(null); + } + }, 50); + } + static void initFramebuffer(WebGL2RenderingContext ctx, WebGLFramebuffer fbo, int sw, int sh) { context = ctx; mainFramebuffer = fbo; @@ -593,7 +634,7 @@ public class PlatformInput { @JSBody(params = { }, script = "window.navigator.keyboard.unlock();") private static native void unlockKeys(); - @JSBody(params = { }, script = "return 'keyboard' in window.navigator && 'lock' in window.navigator.keyboard;") + @JSBody(params = { }, script = "return !!(window.navigator.keyboard && window.navigator.keyboard.lock);") private static native boolean checkKeyboardLockSupported(); @JSBody(params = { }, script = "document.exitFullscreen();") diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java index 21ea7ad..3cead4b 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java @@ -36,12 +36,14 @@ public class PlatformOpenGL { static boolean hasDebugRenderInfoExt = false; static boolean hasFramebufferHDR16FSupport = false; static boolean hasFramebufferHDR32FSupport = false; + static boolean hasLinearHDR32FSupport = false; static void setCurrentContext(WebGL2RenderingContext context) { ctx = context; hasDebugRenderInfoExt = ctx.getExtension("WEBGL_debug_renderer_info") != null; hasFramebufferHDR16FSupport = ctx.getExtension("EXT_color_buffer_half_float") != null; hasFramebufferHDR32FSupport = ctx.getExtension("EXT_color_buffer_float") != null; + hasLinearHDR32FSupport = ctx.getExtension("OES_texture_float_linear") != null; _wglClearColor(1.0f, 1.0f, 1.0f, 1.0f); } @@ -191,15 +193,15 @@ public class PlatformOpenGL { } public static final void _wglBufferData(int target, ByteBuffer data, int usage) { - ctx.bufferData(target, data == null ? null : EaglerArrayBufferAllocator.getDataView(data), usage); + ctx.bufferData(target, data == null ? null : EaglerArrayBufferAllocator.getDataView8(data), usage); } public static final void _wglBufferData(int target, IntBuffer data, int usage) { - ctx.bufferData(target, data == null ? null : EaglerArrayBufferAllocator.getDataView(data), usage); + ctx.bufferData(target, data == null ? null : EaglerArrayBufferAllocator.getDataView32(data), usage); } public static final void _wglBufferData(int target, FloatBuffer data, int usage) { - ctx.bufferData(target, data == null ? null : EaglerArrayBufferAllocator.getDataView(data), usage); + ctx.bufferData(target, data == null ? null : EaglerArrayBufferAllocator.getDataView32F(data), usage); } public static final void _wglBufferData(int target, int size, int usage) { @@ -207,15 +209,15 @@ public class PlatformOpenGL { } public static final void _wglBufferSubData(int target, int offset, ByteBuffer data) { - ctx.bufferSubData(target, offset, data == null ? null : EaglerArrayBufferAllocator.getDataView(data)); + ctx.bufferSubData(target, offset, data == null ? null : EaglerArrayBufferAllocator.getDataView8(data)); } public static final void _wglBufferSubData(int target, int offset, IntBuffer data) { - ctx.bufferSubData(target, offset, data == null ? null : EaglerArrayBufferAllocator.getDataView(data)); + ctx.bufferSubData(target, offset, data == null ? null : EaglerArrayBufferAllocator.getDataView32(data)); } public static final void _wglBufferSubData(int target, int offset, FloatBuffer data) { - ctx.bufferSubData(target, offset, data == null ? null : EaglerArrayBufferAllocator.getDataView(data)); + ctx.bufferSubData(target, offset, data == null ? null : EaglerArrayBufferAllocator.getDataView32F(data)); } public static final void _wglBindVertexArray(IBufferArrayGL obj) { @@ -258,55 +260,61 @@ public class PlatformOpenGL { public static final void _wglTexImage3D(int target, int level, int internalFormat, int width, int height, int depth, int border, int format, int type, ByteBuffer data) { ctx.texImage3D(target, level, internalFormat, width, height, depth, border, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataViewStupid(data)); + data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); } public static final void _wglTexImage2D(int target, int level, int internalFormat, int width, int height, int border, int format, int type, ByteBuffer data) { ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataViewStupid(data)); + data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); } public static final void _wglTexImage2Du16(int target, int level, int internalFormat, int width, int height, int border, int format, int type, ByteBuffer data) { ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataViewStupid16(data)); + data == null ? null : EaglerArrayBufferAllocator.getDataView16Unsigned(data)); + } + + public static final void _wglTexImage2Df32(int target, int level, int internalFormat, int width, + int height, int border, int format, int type, ByteBuffer data) { + ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, + data == null ? null : EaglerArrayBufferAllocator.getDataView32F(data)); } public static final void _wglTexImage2D(int target, int level, int internalFormat, int width, int height, int border, int format, int type, IntBuffer data) { ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataViewStupid(data)); + data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); } public static final void _wglTexImage2D(int target, int level, int internalFormat, int width, int height, int border, int format, int type, FloatBuffer data) { ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataViewStupid(data)); + data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); } public static final void _wglTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, ByteBuffer data) { ctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataViewStupid(data)); + data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); } public static final void _wglTexSubImage2Du16(int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, ByteBuffer data) { ctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataViewStupid16(data)); + data == null ? null : EaglerArrayBufferAllocator.getDataView16Unsigned(data)); } public static final void _wglTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, IntBuffer data) { ctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataViewStupid(data)); + data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); } public static final void _wglTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, FloatBuffer data) { ctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataViewStupid(data)); + data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); } public static final void _wglCopyTexSubImage2D(int target, int level, int xoffset, int yoffset, @@ -455,32 +463,32 @@ public class PlatformOpenGL { public static final void _wglUniformMatrix2fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { if(obj != null) ctx.uniformMatrix2fv(((OpenGLObjects.UniformGL)obj).ptr, transpose, - mat == null ? null : EaglerArrayBufferAllocator.getFloatArrayStupid(mat)); + mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); } public static final void _wglUniformMatrix3fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { if(obj != null) ctx.uniformMatrix3fv(((OpenGLObjects.UniformGL)obj).ptr, transpose, - mat == null ? null : EaglerArrayBufferAllocator.getFloatArrayStupid(mat)); + mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); } public static final void _wglUniformMatrix3x2fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { if(obj != null) ctx.uniformMatrix3x2fv(((OpenGLObjects.UniformGL)obj).ptr, transpose, - mat == null ? null : EaglerArrayBufferAllocator.getFloatArrayStupid(mat)); + mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); } public static final void _wglUniformMatrix4fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { if(obj != null) ctx.uniformMatrix4fv(((OpenGLObjects.UniformGL)obj).ptr, transpose, - mat == null ? null : EaglerArrayBufferAllocator.getFloatArrayStupid(mat)); + mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); } public static final void _wglUniformMatrix4x2fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { if(obj != null) ctx.uniformMatrix4x2fv(((OpenGLObjects.UniformGL)obj).ptr, transpose, - mat == null ? null : EaglerArrayBufferAllocator.getFloatArrayStupid(mat)); + mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); } public static final void _wglUniformMatrix4x3fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { if(obj != null) ctx.uniformMatrix4x3fv(((OpenGLObjects.UniformGL)obj).ptr, transpose, - mat == null ? null : EaglerArrayBufferAllocator.getFloatArrayStupid(mat)); + mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); } public static final void _wglBindFramebuffer(int target, IFramebufferGL framebuffer) { @@ -570,7 +578,11 @@ public class PlatformOpenGL { return false; } } - + + public static final boolean checkLinearHDR32FSupport() { + return hasLinearHDR32FSupport; + } + private static final void checkErr(String name) { int i = ctx.getError(); if(i != 0) { 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 f317319..d544104 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 @@ -28,7 +28,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.DataView; import org.teavm.jso.typedarrays.Uint8Array; import org.teavm.jso.webaudio.MediaStream; import org.teavm.jso.webgl.WebGLFramebuffer; @@ -275,27 +274,27 @@ public class PlatformRuntime { } public static ByteBuffer castPrimitiveByteArray(byte[] array) { - return EaglerArrayBufferAllocator.wrapByteBufferTeaVM(DataView.create(TeaVMUtils.unwrapArrayBuffer(array))); + return EaglerArrayBufferAllocator.wrapByteBufferTeaVM(TeaVMUtils.unwrapByteArray(array)); } public static IntBuffer castPrimitiveIntArray(int[] array) { - return EaglerArrayBufferAllocator.wrapIntBufferTeaVM(DataView.create(TeaVMUtils.unwrapArrayBuffer(array))); + return EaglerArrayBufferAllocator.wrapIntBufferTeaVM(TeaVMUtils.unwrapIntArray(array)); } public static FloatBuffer castPrimitiveFloatArray(float[] array) { - return EaglerArrayBufferAllocator.wrapFloatBufferTeaVM(DataView.create(TeaVMUtils.unwrapArrayBuffer(array))); + return EaglerArrayBufferAllocator.wrapFloatBufferTeaVM(TeaVMUtils.unwrapFloatArray(array)); } public static byte[] castNativeByteBuffer(ByteBuffer buffer) { - return TeaVMUtils.wrapUnsignedByteArray(EaglerArrayBufferAllocator.getDataViewStupid(buffer)); + return TeaVMUtils.wrapUnsignedByteArray(EaglerArrayBufferAllocator.getDataView8Unsigned(buffer)); } public static int[] castNativeIntBuffer(IntBuffer buffer) { - return TeaVMUtils.wrapIntArray(EaglerArrayBufferAllocator.getDataViewStupid32(buffer)); + return TeaVMUtils.wrapIntArray(EaglerArrayBufferAllocator.getDataView32(buffer)); } public static float[] castNativeFloatBuffer(FloatBuffer buffer) { - return TeaVMUtils.wrapFloatArray(EaglerArrayBufferAllocator.getFloatArrayStupid(buffer)); + return TeaVMUtils.wrapFloatArray(EaglerArrayBufferAllocator.getDataView32F(buffer)); } public static void freeByteBuffer(ByteBuffer byteBuffer) { @@ -500,12 +499,13 @@ public class PlatformRuntime { return TeaVMClientConfigAdapter.instance; } - private static boolean canRec = false; - private static boolean recording = false; - private static JSObject mediaRec = null; - private static HTMLCanvasElement recCanvas = null; - private static CanvasRenderingContext2D recCtx = null; - private static MediaStream recStream = null; + static boolean canRec = false; + static boolean recording = false; + static long lastFrame = 0l; + static JSObject mediaRec = null; + static HTMLCanvasElement recCanvas = null; + static CanvasRenderingContext2D recCtx = null; + static MediaStream recStream = null; public static boolean isRec() { return recording && canRec; @@ -534,7 +534,7 @@ public class PlatformRuntime { return recording ? "recording.stop" : "recording.start"; } - private static void recFrame() { + static void recFrame() { if (mediaRec != null) { int w = PlatformRuntime.canvas.getWidth(); int h = PlatformRuntime.canvas.getHeight(); @@ -546,21 +546,6 @@ public class PlatformRuntime { } } - private static void onRecFrame() { - if (recording) { - recFrame(); - long t = System.currentTimeMillis(); - Window.requestAnimationFrame(timestamp -> { - long d = (1000 / 30) - (System.currentTimeMillis() - t); - if (d <= 0) { - onRecFrame(); - } else { - Window.setTimeout(PlatformRuntime::onRecFrame, d); - } - }); - } - } - @JSFunctor private static interface MediaHandler extends JSObject { void onMedia(MediaStream stream); @@ -630,7 +615,6 @@ public class PlatformRuntime { }, logger::info); } }); - onRecFrame(); } else { stopRec(mediaRec); mediaRec = null; diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java new file mode 100644 index 0000000..2e100cc --- /dev/null +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java @@ -0,0 +1,439 @@ +package net.lax1dude.eaglercraft.v1_8.internal; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; +import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.lax1dude.eaglercraft.v1_8.voice.EnumVoiceChannelPeerState; +import net.lax1dude.eaglercraft.v1_8.voice.EnumVoiceChannelReadyState; +import net.lax1dude.eaglercraft.v1_8.voice.EnumVoiceChannelType; +import net.lax1dude.eaglercraft.v1_8.voice.VoiceClientController; +import org.json.JSONObject; +import org.json.JSONWriter; +import org.teavm.jso.JSBody; +import org.teavm.jso.JSObject; +import org.teavm.jso.dom.events.Event; +import org.teavm.jso.dom.events.EventListener; +import org.teavm.jso.dom.html.HTMLAudioElement; +import org.teavm.jso.dom.html.HTMLDocument; +import org.teavm.jso.json.JSON; +import org.teavm.jso.typedarrays.Uint8Array; +import org.teavm.jso.webaudio.*; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * Copyright (c) 2022-2024 ayunami2000. 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 PlatformVoiceClient { + + private static final Logger logger = LogManager.getLogger("PlatformVoiceClient"); + + private static final HashMap voiceAnalysers = new HashMap<>(); + private static final HashMap voiceGains = new HashMap<>(); + private static final HashMap voicePanners = new HashMap<>(); + + @JSBody(params = {}, script = "return typeof window.RTCPeerConnection !== \"undefined\" && typeof navigator.mediaDevices !== \"undefined\" && typeof navigator.mediaDevices.getUserMedia !== \"undefined\";") + public static native boolean isSupported(); + + @JSBody(params = { "item" }, script = "return item.streams[0];") + static native MediaStream getFirstStream(JSObject item); + + @JSBody(params = { "aud", "stream" }, script = "return aud.srcObject = stream;") + static native void setSrcObject(HTMLAudioElement aud, MediaStream stream); + + @JSBody(params = { "aud" }, script = "return aud.remove();") + static native void removeAud(HTMLAudioElement aud); + + @JSBody(params = { "pc", "stream" }, script = "return stream.getTracks().forEach((track) => { pc.addTrack(track, stream); });") + static native void addStream(JSObject pc, MediaStream stream); + + @JSBody(params = { "rawStream", "muted" }, script = "return rawStream.getAudioTracks()[0].enabled = !muted;") + static native void mute(MediaStream rawStream, boolean muted); + + @JSBody(params = { "peerConnection", "str" }, script = "return peerConnection.addIceCandidate(new RTCIceCandidate(JSON.parse(str)));") + static native void addIceCandidate(JSObject peerConnection, String str); + + public static void disconnect(JSObject peerConnection) { + PlatformWebRTC.closeIt(peerConnection); + } + + public static void setVoiceProximity(int prox) { + for (PannerNode panner : voicePanners.values()) { + panner.setMaxDistance(VoiceClientController.getVoiceListenVolume() * 2 * prox + 0.1f); + } + } + + public static void updateVoicePosition(EaglercraftUUID uuid, double x, double y, double z) { + if (voicePanners.containsKey(uuid)) voicePanners.get(uuid).setPosition((float) x, (float) y, (float) z); + } + + public static class VoicePeer { + public final EaglercraftUUID peerId; + public final JSObject peerConnection; + public MediaStream rawStream; + public VoicePeer(EaglercraftUUID peerId, JSObject peerConnection, boolean offer) { + this.peerId = peerId; + this.peerConnection = peerConnection; + + TeaVMUtils.addEventListener(peerConnection, "icecandidate", (EventListener) evt -> { + if (PlatformWebRTC.hasCandidate(evt)) { + Map m = new HashMap<>(); + m.put("sdpMLineIndex", "" + PlatformWebRTC.getSdpMLineIndex(evt)); + m.put("candidate", PlatformWebRTC.getCandidate(evt)); + handleIceCandidate(peerId, JSONWriter.valueToString(m)); + } + }); + TeaVMUtils.addEventListener(peerConnection, "track", (EventListener) evt -> { + rawStream = getFirstStream(evt); + HTMLAudioElement aud = (HTMLAudioElement) HTMLDocument.current().createElement("audio"); + aud.setAutoplay(true); + aud.setMuted(true); + TeaVMUtils.addEventListener(aud, "ended", (EventListener) evt2 -> { + removeAud(aud); + }); + setSrcObject(aud, rawStream); + handlePeerTrack(peerId, rawStream); + }); + + addStream(peerConnection, localMediaStream.getStream()); + if (offer) { + PlatformWebRTC.createOffer(peerConnection, desc -> { + PlatformWebRTC.setLocalDescription(peerConnection, desc, () -> { + handleDescription(peerId, JSON.stringify(desc)); + }, err -> { + logger.error("Failed to set local description for \"{}\"! {}", peerId, err); + if (peerStateInitial == EnumVoiceChannelPeerState.LOADING) { + peerStateInitial = EnumVoiceChannelPeerState.FAILED; + } + signalDisconnect(peerId, false); + }); + }, err -> { + logger.error("Failed to set create offer for \"{}\"! {}", peerId, err); + if (peerStateInitial == EnumVoiceChannelPeerState.LOADING) { + peerStateInitial = EnumVoiceChannelPeerState.FAILED; + } + signalDisconnect(peerId, false); + }); + } + + TeaVMUtils.addEventListener(peerConnection, "connectionstatechange", (EventListener) evt -> { + String cs = PlatformWebRTC.getConnectionState(peerConnection); + if ("disconnected".equals(cs)) { + signalDisconnect(peerId, false); + } else if ("connected".equals(cs)) { + if (peerState != EnumVoiceChannelPeerState.SUCCESS) { + peerState = EnumVoiceChannelPeerState.SUCCESS; + } + } else if ("failed".equals(cs)) { + if (peerState == EnumVoiceChannelPeerState.LOADING) { + peerState = EnumVoiceChannelPeerState.FAILED; + } + signalDisconnect(peerId, false); + } + }); + } + + public void disconnect() { + PlatformVoiceClient.disconnect(peerConnection); + } + + public void mute(boolean muted) { + PlatformVoiceClient.mute(rawStream, muted); + } + + public void setRemoteDescription(String descJSON) { + try { + JSONObject remoteDesc = new JSONObject(descJSON); + PlatformWebRTC.setRemoteDescription2(peerConnection, descJSON, () -> { + if (remoteDesc.has("type") && "offer".equals(remoteDesc.getString("type"))) { + PlatformWebRTC.createAnswer(peerConnection, desc -> { + PlatformWebRTC.setLocalDescription(peerConnection, desc, () -> { + handleDescription(peerId, JSON.stringify(desc)); + if (peerStateDesc != EnumVoiceChannelPeerState.SUCCESS) peerStateDesc = EnumVoiceChannelPeerState.SUCCESS; + }, err -> { + logger.error("Failed to set local description for \"{}\"! {}", peerId, err.getMessage()); + if (peerStateDesc == EnumVoiceChannelPeerState.LOADING) peerStateDesc = EnumVoiceChannelPeerState.FAILED; + signalDisconnect(peerId, false); + }); + }, err -> { + logger.error("Failed to create answer for \"{}\"! {}", peerId, err.getMessage()); + if (peerStateDesc == EnumVoiceChannelPeerState.LOADING) peerStateDesc = EnumVoiceChannelPeerState.FAILED; + signalDisconnect(peerId, false); + }); + } + }, err -> { + logger.error("Failed to set remote description for \"{}\"! {}", peerId, err.getMessage()); + if (peerStateDesc == EnumVoiceChannelPeerState.LOADING) peerStateDesc = EnumVoiceChannelPeerState.FAILED; + signalDisconnect(peerId, false); + }); + } catch (Throwable err) { + logger.error("Failed to parse remote description for \"{}\"! {}", peerId, err.getMessage()); + if (peerStateDesc == EnumVoiceChannelPeerState.LOADING) peerStateDesc = EnumVoiceChannelPeerState.FAILED; + signalDisconnect(peerId, false); + } + } + + public void addICECandidate(String candidate) { + try { + addIceCandidate(peerConnection, candidate); + if (peerStateIce != EnumVoiceChannelPeerState.SUCCESS) peerStateIce = EnumVoiceChannelPeerState.SUCCESS; + } catch (Throwable err) { + logger.error("Failed to parse ice candidate for \"{}\"! {}", peerId, err.getMessage()); + if (peerStateIce == EnumVoiceChannelPeerState.LOADING) peerStateIce = EnumVoiceChannelPeerState.FAILED; + signalDisconnect(peerId, false); + } + } + } + + public static Set> iceServers = new HashSet<>(); + public static boolean hasInit = false; + public static Map peerList = new HashMap<>(); + public static MediaStreamAudioDestinationNode localMediaStream; + public static GainNode localMediaStreamGain; + public static MediaStream localRawMediaStream; + public static EnumVoiceChannelReadyState readyState = EnumVoiceChannelReadyState.NONE; + public static EnumVoiceChannelPeerState peerState = EnumVoiceChannelPeerState.LOADING; + public static EnumVoiceChannelPeerState peerStateConnect = EnumVoiceChannelPeerState.LOADING; + public static EnumVoiceChannelPeerState peerStateInitial = EnumVoiceChannelPeerState.LOADING; + public static EnumVoiceChannelPeerState peerStateDesc = EnumVoiceChannelPeerState.LOADING; + public static EnumVoiceChannelPeerState peerStateIce = EnumVoiceChannelPeerState.LOADING; + public static AudioContext microphoneVolumeAudioContext = null; + + public static void setICEServers(String[] urls) { + iceServers.clear(); + if (urls == null) return; + for (String url : urls) { + String[] etr = url.split(";"); + if (etr.length == 1) { + Map m = new HashMap<>(); + m.put("urls", etr[0]); + iceServers.add(m); + } else if (etr.length == 3) { + Map m = new HashMap<>(); + m.put("urls", etr[0]); + m.put("username", etr[1]); + m.put("credential", etr[2]); + iceServers.add(m); + } + } + } + + public static void activateVoice(boolean talk) { + if (hasInit) { + PlatformVoiceClient.mute(localRawMediaStream, !talk); + } + } + + public static void initializeDevices() { + if (!hasInit) { + localRawMediaStream = PlatformRuntime.getMic(); + if (localRawMediaStream == null) { + readyState = EnumVoiceChannelReadyState.ABORTED; + return; + } + microphoneVolumeAudioContext = AudioContext.create(); + mute(localRawMediaStream, true); + localMediaStream = microphoneVolumeAudioContext.createMediaStreamDestination(); + localMediaStreamGain = microphoneVolumeAudioContext.createGain(); + microphoneVolumeAudioContext.createMediaStreamSource(localRawMediaStream).connect(localMediaStreamGain); + localMediaStreamGain.connect(localMediaStream); + localMediaStreamGain.getGain().setValue(1.0F); + readyState = EnumVoiceChannelReadyState.DEVICE_INITIALIZED; + hasInit = true; + } else { + readyState = EnumVoiceChannelReadyState.DEVICE_INITIALIZED; + } + } + + public static void tickVoiceClient() { + for (EaglercraftUUID uuid : voiceAnalysers.keySet()) { + AnalyserNode analyser = voiceAnalysers.get(uuid); + Uint8Array array = Uint8Array.create(analyser.getFrequencyBinCount()); + analyser.getByteFrequencyData(array); + int len = array.getLength(); + for (int i = 0; i < len; i++) { + if (array.get(i) >= 0.1f) { + VoiceClientController.getVoiceSpeaking().add(uuid); + break; + } + } + } + } + + public static void setMicVolume(float val) { + if (hasInit) { + if(val > 0.5F) val = 0.5F + (val - 0.5F) * 2.0F; + if(val > 1.5F) val = 1.5F; + if(val < 0.0F) val = 0.0F; + localMediaStreamGain.getGain().setValue(val * 2.0F); + } + } + + public static void resetPeerStates() { + peerState = peerStateConnect = peerStateInitial = peerStateDesc = peerStateIce = EnumVoiceChannelPeerState.LOADING; + } + + public static EnumVoiceChannelPeerState getPeerState() { + return peerState; + } + + public static EnumVoiceChannelPeerState getPeerStateConnect() { + return peerStateConnect; + } + + public static EnumVoiceChannelPeerState getPeerStateInitial() { + return peerStateInitial; + } + + public static EnumVoiceChannelPeerState getPeerStateDesc() { + return peerStateDesc; + } + + public static EnumVoiceChannelPeerState getPeerStateIce() { + return peerStateIce; + } + + public static EnumVoiceChannelReadyState getReadyState() { + return readyState; + } + + public static void signalConnect(EaglercraftUUID peerId, boolean offer) { + if (!hasInit) initializeDevices(); + try { + JSObject peerConnection = PlatformWebRTC.createRTCPeerConnection(JSONWriter.valueToString(iceServers)); + VoicePeer peerInstance = new VoicePeer(peerId, peerConnection, offer); + peerList.put(peerId, peerInstance); + if (peerStateConnect != EnumVoiceChannelPeerState.SUCCESS) peerStateConnect = EnumVoiceChannelPeerState.SUCCESS; + } catch (Throwable e) { + if (peerStateConnect == EnumVoiceChannelPeerState.LOADING) peerStateConnect = EnumVoiceChannelPeerState.FAILED; + } + } + + public static void signalDescription(EaglercraftUUID peerId, String descJSON) { + VoicePeer peer = peerList.get(peerId); + if (peer != null) { + peer.setRemoteDescription(descJSON); + } + } + + public static void signalDisconnect(EaglercraftUUID peerId, boolean quiet) { + VoicePeer peer = peerList.get(peerId); + if (peer != null) { + peerList.remove(peerId, peer); + try { + peer.disconnect(); + } catch (Throwable ignored) {} + handlePeerDisconnect(peerId, quiet); + } + } + + public static void mutePeer(EaglercraftUUID peerId, boolean muted) { + VoicePeer peer = peerList.get(peerId); + if (peer != null) { + peer.mute(muted); + } + } + + public static void signalICECandidate(EaglercraftUUID peerId, String candidate) { + VoicePeer peer = peerList.get(peerId); + if (peer != null) { + peer.addICECandidate(candidate); + } + } + + public static void handleIceCandidate(EaglercraftUUID peerId, String candidate) { + VoiceClientController.sendPacketICE(peerId, candidate); + } + + public static void handleDescription(EaglercraftUUID peerId, String desc) { + VoiceClientController.sendPacketDesc(peerId, desc); + } + + public static void handlePeerTrack(EaglercraftUUID peerId, MediaStream audioStream) { + if (VoiceClientController.getVoiceChannel() == EnumVoiceChannelType.NONE) return; + MediaStreamAudioSourceNode audioNode = PlatformAudio.audioctx.createMediaStreamSource(audioStream); + AnalyserNode analyser = PlatformAudio.audioctx.createAnalyser(); + analyser.setSmoothingTimeConstant(0f); + analyser.setFftSize(32); + audioNode.connect(analyser); + voiceAnalysers.put(peerId, analyser); + if (VoiceClientController.getVoiceChannel() == EnumVoiceChannelType.GLOBAL) { + GainNode gain = PlatformAudio.audioctx.createGain(); + gain.getGain().setValue(VoiceClientController.getVoiceListenVolume()); + analyser.connect(gain); + gain.connect(PlatformAudio.audioctx.getDestination()); + gain.connect(PlatformAudio.recDest); + voiceGains.put(peerId, gain); + VoiceClientController.getVoiceListening().add(peerId); + } else if (VoiceClientController.getVoiceChannel() == EnumVoiceChannelType.PROXIMITY) { + PannerNode panner = PlatformAudio.audioctx.createPanner(); + panner.setRolloffFactor(1f); + panner.setDistanceModel("linear"); + panner.setPanningModel("HRTF"); + panner.setConeInnerAngle(360f); + panner.setConeOuterAngle(0f); + panner.setConeOuterGain(0f); + panner.setOrientation(0f, 1f, 0f); + panner.setPosition(0, 0, 0); + float vol = VoiceClientController.getVoiceListenVolume(); + panner.setMaxDistance(vol * 2 * VoiceClientController.getVoiceProximity() + 0.1f); + GainNode gain = PlatformAudio.audioctx.createGain(); + gain.getGain().setValue(vol); + analyser.connect(gain); + gain.connect(panner); + panner.connect(PlatformAudio.audioctx.getDestination()); + panner.connect(PlatformAudio.recDest); + voiceGains.put(peerId, gain); + VoiceClientController.getVoiceListening().add(peerId); + voicePanners.put(peerId, panner); + } + if (VoiceClientController.getVoiceMuted().contains(peerId)) mutePeer(peerId, true); + } + + public static void handlePeerDisconnect(EaglercraftUUID peerId, boolean quiet) { + if (voiceAnalysers.containsKey(peerId)) { + voiceAnalysers.get(peerId).disconnect(); + voiceAnalysers.remove(peerId); + } + if (voiceGains.containsKey(peerId)) { + voiceGains.get(peerId).disconnect(); + voiceGains.remove(peerId); + VoiceClientController.getVoiceListening().remove(peerId); + } + if (voicePanners.containsKey(peerId)) { + voicePanners.get(peerId).disconnect(); + voicePanners.remove(peerId); + } + if (!quiet) { + VoiceClientController.sendPacketDisconnect(peerId); + } + } + + public static void setVoiceListenVolume(float f) { + for (EaglercraftUUID uuid : voiceGains.keySet()) { + GainNode gain = voiceGains.get(uuid); + float val = f; + if(val > 0.5f) val = 0.5f + (val - 0.5f) * 3.0f; + if(val > 2.0f) val = 2.0f; + if(val < 0.0f) val = 0.0f; + gain.getGain().setValue(val * 2.0f); + if (voicePanners.containsKey(uuid)) voicePanners.get(uuid).setMaxDistance(f * 2 * VoiceClientController.getVoiceProximity() + 0.1f); + } + } +} diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayBufferAllocator.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayBufferAllocator.java index fd2e3b6..755046a 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayBufferAllocator.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayBufferAllocator.java @@ -1,9 +1,9 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; -import org.teavm.jso.typedarrays.ArrayBuffer; import org.teavm.jso.typedarrays.DataView; import org.teavm.jso.typedarrays.Float32Array; import org.teavm.jso.typedarrays.Int32Array; +import org.teavm.jso.typedarrays.Int8Array; import org.teavm.jso.typedarrays.Uint16Array; import org.teavm.jso.typedarrays.Uint8Array; @@ -31,27 +31,31 @@ public class EaglerArrayBufferAllocator { } public static ByteBuffer allocateByteBuffer(int size) { - return new EaglerArrayByteBuffer(DataView.create(ArrayBuffer.create(size))); + return new EaglerArrayByteBuffer(Int8Array.create(size)); } public static ByteBuffer wrapByteBufferTeaVM(DataView dv) { return new EaglerArrayByteBuffer(dv); } - public static IntBuffer allocateIntBuffer(int size) { - return new EaglerArrayIntBuffer(DataView.create(ArrayBuffer.create(size << 2))); + public static ByteBuffer wrapByteBufferTeaVM(Int8Array typedArray) { + return new EaglerArrayByteBuffer(typedArray); } - public static IntBuffer wrapIntBufferTeaVM(DataView dv) { - return new EaglerArrayIntBuffer(dv); + public static IntBuffer allocateIntBuffer(int size) { + return new EaglerArrayIntBuffer(Int32Array.create(size)); + } + + public static IntBuffer wrapIntBufferTeaVM(Int32Array typedArray) { + return new EaglerArrayIntBuffer(typedArray); } public static FloatBuffer allocateFloatBuffer(int size) { - return new EaglerArrayFloatBuffer(DataView.create(ArrayBuffer.create(size << 2))); + return new EaglerArrayFloatBuffer(Float32Array.create(size)); } - public static FloatBuffer wrapFloatBufferTeaVM(DataView dv) { - return new EaglerArrayFloatBuffer(dv); + public static FloatBuffer wrapFloatBufferTeaVM(Float32Array typedArray) { + return new EaglerArrayFloatBuffer(typedArray); } public static DataView getDataView(ByteBuffer buffer) { @@ -63,121 +67,115 @@ public class EaglerArrayBufferAllocator { if(p == 0 && l == b.capacity) { return d; }else { - int i = d.getByteOffset(); - return DataView.create(d.getBuffer(), i + p, l - p); + return DataView.create(d.getBuffer(), d.getByteOffset() + p, l - p); } }else { throw notEagler(buffer); } } - public static Uint8Array getDataViewStupid(ByteBuffer buffer) { + public static Int8Array getDataView8(ByteBuffer buffer) { if(buffer instanceof EaglerArrayByteBuffer) { EaglerArrayByteBuffer b = (EaglerArrayByteBuffer)buffer; - DataView d = b.dataView; - int p = b.position; - int l = b.limit; - int i = d.getByteOffset(); - return Uint8Array.create(d.getBuffer(), i + p, l - p); - }else { - throw notEagler(buffer); - } - } - - public static Uint16Array getDataViewStupid16(ByteBuffer buffer) { - if(buffer instanceof EaglerArrayByteBuffer) { - EaglerArrayByteBuffer b = (EaglerArrayByteBuffer)buffer; - DataView d = b.dataView; - int p = b.position; - int l = b.limit; - int i = d.getByteOffset(); - return Uint16Array.create(d.getBuffer(), i + p, (l - p) >> 1); - }else { - throw notEagler(buffer); - } - } - - public static DataView getDataView(IntBuffer buffer) { - if(buffer instanceof EaglerArrayIntBuffer) { - EaglerArrayIntBuffer b = (EaglerArrayIntBuffer)buffer; - DataView d = b.dataView; + Int8Array d = b.typedArray; int p = b.position; int l = b.limit; if(p == 0 && l == b.capacity) { return d; }else { int i = d.getByteOffset(); - return DataView.create(d.getBuffer(), i + (p << 2), (l - p) << 2); + return Int8Array.create(d.getBuffer(), d.getByteOffset() + p, l - p); } }else { throw notEagler(buffer); } } - public static Uint8Array getDataViewStupid(IntBuffer buffer) { - if(buffer instanceof EaglerArrayIntBuffer) { - EaglerArrayIntBuffer b = (EaglerArrayIntBuffer)buffer; - DataView d = b.dataView; + public static Uint8Array getDataView8Unsigned(ByteBuffer buffer) { + if(buffer instanceof EaglerArrayByteBuffer) { + EaglerArrayByteBuffer b = (EaglerArrayByteBuffer)buffer; + Int8Array d = b.typedArray; int p = b.position; - int l = b.limit; int i = d.getByteOffset(); - return Uint8Array.create(d.getBuffer(), i + (p << 2), (l - p) << 2); + return Uint8Array.create(d.getBuffer(), i + p, b.limit - p); }else { throw notEagler(buffer); } } - public static Int32Array getDataViewStupid32(IntBuffer buffer) { - if(buffer instanceof EaglerArrayIntBuffer) { - EaglerArrayIntBuffer b = (EaglerArrayIntBuffer)buffer; - DataView d = b.dataView; + public static Uint16Array getDataView16Unsigned(ByteBuffer buffer) { + if(buffer instanceof EaglerArrayByteBuffer) { + EaglerArrayByteBuffer b = (EaglerArrayByteBuffer)buffer; + Int8Array d = b.typedArray; int p = b.position; - int l = b.limit; - int i = d.getByteOffset(); - return Int32Array.create(d.getBuffer(), i + (p << 2), (l - p) << 2); + return Uint16Array.create(d.getBuffer(), d.getByteOffset() + p, (b.limit - p) >> 1); }else { throw notEagler(buffer); } } - public static DataView getDataView(FloatBuffer buffer) { - if(buffer instanceof EaglerArrayFloatBuffer) { - EaglerArrayFloatBuffer b = (EaglerArrayFloatBuffer)buffer; - DataView d = b.dataView; + public static Float32Array getDataView32F(ByteBuffer buffer) { + if(buffer instanceof EaglerArrayByteBuffer) { + EaglerArrayByteBuffer b = (EaglerArrayByteBuffer)buffer; + Int8Array d = b.typedArray; + int p = b.position; + return Float32Array.create(d.getBuffer(), d.getByteOffset() + p, (b.limit - p) >> 2); + }else { + throw notEagler(buffer); + } + } + + public static Int32Array getDataView32(IntBuffer buffer) { + if(buffer instanceof EaglerArrayIntBuffer) { + EaglerArrayIntBuffer b = (EaglerArrayIntBuffer)buffer; + Int32Array d = b.typedArray; int p = b.position; int l = b.limit; if(p == 0 && l == b.capacity) { return d; }else { - int i = d.getByteOffset(); - return DataView.create(d.getBuffer(), i + (p << 2), (l - p) << 2); + return Int32Array.create(d.getBuffer(), d.getByteOffset() + (p << 2), l - p); } }else { throw notEagler(buffer); } } - public static Uint8Array getDataViewStupid(FloatBuffer buffer) { - if(buffer instanceof EaglerArrayFloatBuffer) { - EaglerArrayFloatBuffer b = (EaglerArrayFloatBuffer)buffer; - DataView d = b.dataView; + public static Uint8Array getDataView8Unsigned(IntBuffer buffer) { + if(buffer instanceof EaglerArrayIntBuffer) { + EaglerArrayIntBuffer b = (EaglerArrayIntBuffer)buffer; + Int32Array d = b.typedArray; int p = b.position; int l = b.limit; - int i = d.getByteOffset(); - return Uint8Array.create(d.getBuffer(), i + (p << 2), (l - p) << 2); + return Uint8Array.create(d.getBuffer(), d.getByteOffset() + (p << 2), (l - p) << 2); }else { throw notEagler(buffer); } } - public static Float32Array getFloatArrayStupid(FloatBuffer buffer) { + public static Float32Array getDataView32F(FloatBuffer buffer) { if(buffer instanceof EaglerArrayFloatBuffer) { EaglerArrayFloatBuffer b = (EaglerArrayFloatBuffer)buffer; - DataView d = b.dataView; + Float32Array d = b.typedArray; int p = b.position; int l = b.limit; - int i = d.getByteOffset(); - return Float32Array.create(d.getBuffer(), i + p, l - p); + if(p == 0 && l == b.capacity) { + return d; + }else { + return Float32Array.create(d.getBuffer(), d.getByteOffset() + (p << 2), l - p); + } + }else { + throw notEagler(buffer); + } + } + + public static Uint8Array getDataView8Unsigned(FloatBuffer buffer) { + if(buffer instanceof EaglerArrayFloatBuffer) { + EaglerArrayFloatBuffer b = (EaglerArrayFloatBuffer)buffer; + Float32Array d = b.typedArray; + int p = b.position; + int l = b.limit; + return Uint8Array.create(d.getBuffer(), d.getByteOffset() + (p << 2), (l - p) << 2); }else { throw notEagler(buffer); } diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayByteBuffer.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayByteBuffer.java index 5f2760c..adda4b2 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayByteBuffer.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayByteBuffer.java @@ -1,8 +1,12 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; -import org.teavm.jso.typedarrays.ArrayBuffer; import org.teavm.jso.typedarrays.DataView; -import org.teavm.jso.typedarrays.Uint8Array; +import org.teavm.jso.typedarrays.Float32Array; +import org.teavm.jso.typedarrays.Int16Array; +import org.teavm.jso.typedarrays.Int32Array; +import org.teavm.jso.typedarrays.Int8Array; + +import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. @@ -22,16 +26,18 @@ import org.teavm.jso.typedarrays.Uint8Array; public class EaglerArrayByteBuffer implements ByteBuffer { final DataView dataView; + final Int8Array typedArray; final int capacity; int position; int limit; int mark; - static final DataView ZERO_LENGTH_BUFFER = DataView.create(ArrayBuffer.create(0)); + static final Int8Array ZERO_LENGTH_BUFFER = Int8Array.create(0); EaglerArrayByteBuffer(DataView dataView) { this.dataView = dataView; + this.typedArray = Int8Array.create(dataView.getBuffer(), dataView.getByteOffset(), dataView.getByteLength()); this.capacity = dataView.getByteLength(); this.position = 0; this.limit = this.capacity; @@ -40,11 +46,30 @@ public class EaglerArrayByteBuffer implements ByteBuffer { EaglerArrayByteBuffer(DataView dataView, int position, int limit, int mark) { this.dataView = dataView; + this.typedArray = Int8Array.create(dataView.getBuffer(), dataView.getByteOffset(), dataView.getByteLength()); this.capacity = dataView.getByteLength(); this.position = position; this.limit = limit; this.mark = mark; } + + EaglerArrayByteBuffer(Int8Array typedArray) { + this.typedArray = typedArray; + this.dataView = DataView.create(typedArray.getBuffer(), typedArray.getByteOffset(), typedArray.getByteLength()); + this.capacity = typedArray.getByteLength(); + this.position = 0; + this.limit = this.capacity; + this.mark = -1; + } + + EaglerArrayByteBuffer(Int8Array typedArray, int position, int limit, int mark) { + this.typedArray = typedArray; + this.dataView = DataView.create(typedArray.getBuffer(), typedArray.getByteOffset(), typedArray.getByteLength()); + this.capacity = typedArray.getByteLength(); + this.position = position; + this.limit = limit; + this.mark = mark; + } @Override public int capacity() { @@ -93,8 +118,12 @@ public class EaglerArrayByteBuffer implements ByteBuffer { @Override public ByteBuffer slice() { - int o = dataView.getByteOffset(); - return new EaglerArrayByteBuffer(DataView.create(dataView.getBuffer(), o + position, limit - position)); + if(position == limit) { + return new EaglerArrayByteBuffer(ZERO_LENGTH_BUFFER); + }else { + if(position > limit) throw new ArrayIndexOutOfBoundsException(position); + return new EaglerArrayByteBuffer(Int8Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + position, limit - position)); + } } @Override @@ -110,35 +139,33 @@ public class EaglerArrayByteBuffer implements ByteBuffer { @Override public byte get() { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - return dataView.getInt8(position++); + return typedArray.get(position++); } @Override public ByteBuffer put(byte b) { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - dataView.setInt8(position++, b); + typedArray.set(position++, b); return this; } @Override public byte get(int index) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - return dataView.getInt8(index); + return typedArray.get(index); } @Override public ByteBuffer put(int index, byte b) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - dataView.setInt8(index, b); + typedArray.set(index, b); return this; } @Override public ByteBuffer get(byte[] dst, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - dst[offset + i] = dataView.getInt8(position + i); - } + TeaVMUtils.unwrapArrayBufferView(dst).set(Int8Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + position, length), offset); position += length; return this; } @@ -146,9 +173,7 @@ public class EaglerArrayByteBuffer implements ByteBuffer { @Override public ByteBuffer get(byte[] dst) { if(position + dst.length > limit) throw new ArrayIndexOutOfBoundsException(position + dst.length - 1); - for(int i = 0; i < dst.length; ++i) { - dst[position + i] = dataView.getInt8(position + i); - } + TeaVMUtils.unwrapArrayBufferView(dst).set(Int8Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + position, dst.length)); position += dst.length; return this; } @@ -159,10 +184,7 @@ public class EaglerArrayByteBuffer implements ByteBuffer { EaglerArrayByteBuffer c = (EaglerArrayByteBuffer)src; int l = c.limit - c.position; if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); - int o = c.dataView.getByteOffset(); - Uint8Array.create(dataView.getBuffer()).set( - Uint8Array.create(c.dataView.getBuffer(), o + c.position, c.limit - c.position), - dataView.getByteOffset() + position); + typedArray.set(Int8Array.create(c.typedArray.getBuffer(), c.typedArray.getByteOffset() + c.position, l), position); position += l; c.position += l; }else { @@ -179,8 +201,10 @@ public class EaglerArrayByteBuffer implements ByteBuffer { @Override public ByteBuffer put(byte[] src, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - dataView.setInt8(position + i, src[offset + i]); + if(offset == 0 && length == src.length) { + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); + }else { + typedArray.set(Int8Array.create(TeaVMUtils.unwrapArrayBuffer(src), offset, length), position); } position += length; return this; @@ -189,10 +213,7 @@ public class EaglerArrayByteBuffer implements ByteBuffer { @Override public ByteBuffer put(byte[] src) { if(position + src.length > limit) throw new ArrayIndexOutOfBoundsException(position + src.length - 1); - //dataView.set(src, position); // doesn't work - for(int i = 0; i < src.length; ++i) { - dataView.setInt8(position + i, src[i]); - } + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); position += src.length; return this; } @@ -211,12 +232,10 @@ public class EaglerArrayByteBuffer implements ByteBuffer { return new EaglerArrayByteBuffer(ZERO_LENGTH_BUFFER); } - int o = dataView.getByteOffset(); + Int8Array dst = Int8Array.create(limit - position); + dst.set(Int8Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + position, limit - position)); - Uint8Array dst = Uint8Array.create(ArrayBuffer.create(limit - position)); - dst.set(Uint8Array.create(dataView.getBuffer(), o + position, limit - position)); - - return new EaglerArrayByteBuffer(DataView.create(dst.getBuffer())); + return new EaglerArrayByteBuffer(dst); } @Override @@ -279,7 +298,7 @@ public class EaglerArrayByteBuffer implements ByteBuffer { @Override public ShortBuffer asShortBuffer() { - return new EaglerArrayShortBuffer(dataView); + return new EaglerArrayShortBuffer(Int16Array.create(typedArray.getBuffer(), typedArray.getByteOffset(), typedArray.getLength() >> 1)); } @Override @@ -313,7 +332,7 @@ public class EaglerArrayByteBuffer implements ByteBuffer { @Override public IntBuffer asIntBuffer() { - return new EaglerArrayIntBuffer(dataView); + return new EaglerArrayIntBuffer(Int32Array.create(typedArray.getBuffer(), typedArray.getByteOffset(), typedArray.getLength() >> 2)); } @Override @@ -388,7 +407,7 @@ public class EaglerArrayByteBuffer implements ByteBuffer { @Override public FloatBuffer asFloatBuffer() { - return new EaglerArrayFloatBuffer(dataView); + return new EaglerArrayFloatBuffer(Float32Array.create(typedArray.getBuffer(), typedArray.getByteOffset(), typedArray.getLength() >> 2)); } @Override diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayFloatBuffer.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayFloatBuffer.java index d69d580..4e9ffe9 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayFloatBuffer.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayFloatBuffer.java @@ -1,8 +1,8 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; -import org.teavm.jso.typedarrays.ArrayBuffer; -import org.teavm.jso.typedarrays.DataView; -import org.teavm.jso.typedarrays.Uint8Array; +import org.teavm.jso.typedarrays.Float32Array; + +import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. @@ -21,7 +21,7 @@ import org.teavm.jso.typedarrays.Uint8Array; */ public class EaglerArrayFloatBuffer implements FloatBuffer { - final DataView dataView; + final Float32Array typedArray; final int capacity; int position; @@ -30,17 +30,19 @@ public class EaglerArrayFloatBuffer implements FloatBuffer { private static final int SHIFT = 2; - EaglerArrayFloatBuffer(DataView dataView) { - this.dataView = dataView; - this.capacity = dataView.getByteLength() >> SHIFT; + static final Float32Array ZERO_LENGTH_BUFFER = Float32Array.create(0); + + EaglerArrayFloatBuffer(Float32Array typedArray) { + this.typedArray = typedArray; + this.capacity = typedArray.getLength(); this.position = 0; this.limit = this.capacity; this.mark = -1; } - EaglerArrayFloatBuffer(DataView dataView, int position, int limit, int mark) { - this.dataView = dataView; - this.capacity = dataView.getByteLength() >> SHIFT; + EaglerArrayFloatBuffer(Float32Array typedArray, int position, int limit, int mark) { + this.typedArray = typedArray; + this.capacity = typedArray.getLength(); this.position = position; this.limit = limit; this.mark = mark; @@ -93,64 +95,66 @@ public class EaglerArrayFloatBuffer implements FloatBuffer { @Override public FloatBuffer slice() { - int o = dataView.getByteOffset(); - return new EaglerArrayFloatBuffer(DataView.create(dataView.getBuffer(), o + (position << SHIFT), (limit - position) << SHIFT)); + if(position == limit) { + return new EaglerArrayFloatBuffer(ZERO_LENGTH_BUFFER); + }else { + if(position > limit) throw new ArrayIndexOutOfBoundsException(position); + return new EaglerArrayFloatBuffer(Float32Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), limit - position)); + } } @Override public FloatBuffer duplicate() { - return new EaglerArrayFloatBuffer(dataView, position, limit, mark); + return new EaglerArrayFloatBuffer(typedArray, position, limit, mark); } @Override public FloatBuffer asReadOnlyBuffer() { - return new EaglerArrayFloatBuffer(dataView, position, limit, mark); + return new EaglerArrayFloatBuffer(typedArray, position, limit, mark); } @Override public float get() { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - return dataView.getFloat32((position++) << SHIFT, true); + return typedArray.get(position++); } @Override public FloatBuffer put(float b) { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - dataView.setFloat32((position++) << SHIFT, b, true); + typedArray.set(position++, b); return this; } @Override public float get(int index) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - return dataView.getFloat32(index << SHIFT, true); + return typedArray.get(index); } @Override public FloatBuffer put(int index, float b) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - dataView.setFloat32(index << SHIFT, b, true); + typedArray.set(index, b); return this; } @Override public float getElement(int index) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - return dataView.getFloat32(index << SHIFT, true); + return typedArray.get(index); } @Override public void putElement(int index, float value) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - dataView.setFloat32(index << SHIFT, value, true); + typedArray.set(index, value); } @Override public FloatBuffer get(float[] dst, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - dst[offset + i] = dataView.getFloat32((position + i) << SHIFT, true); - } + TeaVMUtils.unwrapArrayBufferView(dst).set(Float32Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), length), offset); position += length; return this; } @@ -158,9 +162,7 @@ public class EaglerArrayFloatBuffer implements FloatBuffer { @Override public FloatBuffer get(float[] dst) { if(position + dst.length > limit) throw new ArrayIndexOutOfBoundsException(position + dst.length - 1); - for(int i = 0; i < dst.length; ++i) { - dst[i] = dataView.getFloat32((position + i) << SHIFT, true); - } + TeaVMUtils.unwrapArrayBufferView(dst).set(Float32Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), dst.length)); position += dst.length; return this; } @@ -171,17 +173,14 @@ public class EaglerArrayFloatBuffer implements FloatBuffer { EaglerArrayFloatBuffer c = (EaglerArrayFloatBuffer)src; int l = c.limit - c.position; if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); - int o = c.dataView.getByteOffset(); - Uint8Array.create(dataView.getBuffer()).set( - Uint8Array.create(c.dataView.getBuffer(), o + (c.position << SHIFT), (c.limit - c.position) << SHIFT), - dataView.getByteOffset() + (position << SHIFT)); + typedArray.set(Float32Array.create(c.typedArray.getBuffer(), c.typedArray.getByteOffset() + (c.position << SHIFT), l), position); position += l; c.position += l; }else { int l = src.remaining(); if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); for(int i = 0; i < l; ++i) { - dataView.setFloat32((position + l) << SHIFT, src.get(), true); + typedArray.set(position + l, src.get()); } position += l; } @@ -191,8 +190,10 @@ public class EaglerArrayFloatBuffer implements FloatBuffer { @Override public FloatBuffer put(float[] src, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - dataView.setFloat32((position + i) << SHIFT, src[offset + i], true); + if(offset == 0 && length == src.length) { + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); + }else { + typedArray.set(Float32Array.create(TeaVMUtils.unwrapArrayBuffer(src), offset << SHIFT, length), position); } position += length; return this; @@ -201,9 +202,7 @@ public class EaglerArrayFloatBuffer implements FloatBuffer { @Override public FloatBuffer put(float[] src) { if(position + src.length > limit) throw new ArrayIndexOutOfBoundsException(position + src.length - 1); - for(int i = 0; i < src.length; ++i) { - dataView.setFloat32((position + i) << SHIFT, src[i], true); - } + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); position += src.length; return this; } @@ -219,15 +218,13 @@ public class EaglerArrayFloatBuffer implements FloatBuffer { if(position > limit) throw new ArrayIndexOutOfBoundsException(position); if(position == limit) { - return new EaglerArrayFloatBuffer(EaglerArrayByteBuffer.ZERO_LENGTH_BUFFER); + return new EaglerArrayFloatBuffer(ZERO_LENGTH_BUFFER); } - int o = dataView.getByteOffset(); + Float32Array dst = Float32Array.create(limit - position); + dst.set(Float32Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), limit - position)); - Uint8Array dst = Uint8Array.create(ArrayBuffer.create((limit - position) << SHIFT)); - dst.set(Uint8Array.create(dataView.getBuffer(), o + (position << SHIFT), (limit - position) << SHIFT)); - - return new EaglerArrayFloatBuffer(DataView.create(dst.getBuffer())); + return new EaglerArrayFloatBuffer(dst); } @Override diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayIntBuffer.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayIntBuffer.java index e2eaba8..7aee34a 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayIntBuffer.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayIntBuffer.java @@ -1,8 +1,8 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; -import org.teavm.jso.typedarrays.ArrayBuffer; -import org.teavm.jso.typedarrays.DataView; -import org.teavm.jso.typedarrays.Uint8Array; +import org.teavm.jso.typedarrays.Int32Array; + +import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. @@ -21,7 +21,7 @@ import org.teavm.jso.typedarrays.Uint8Array; */ public class EaglerArrayIntBuffer implements IntBuffer { - final DataView dataView; + final Int32Array typedArray; final int capacity; int position; @@ -30,17 +30,19 @@ public class EaglerArrayIntBuffer implements IntBuffer { private static final int SHIFT = 2; - EaglerArrayIntBuffer(DataView dataView) { - this.dataView = dataView; - this.capacity = dataView.getByteLength() >> SHIFT; + static final Int32Array ZERO_LENGTH_BUFFER = Int32Array.create(0); + + EaglerArrayIntBuffer(Int32Array typedArray) { + this.typedArray = typedArray; + this.capacity = typedArray.getLength(); this.position = 0; this.limit = this.capacity; this.mark = -1; } - EaglerArrayIntBuffer(DataView dataView, int position, int limit, int mark) { - this.dataView = dataView; - this.capacity = dataView.getByteLength() >> SHIFT; + EaglerArrayIntBuffer(Int32Array typedArray, int position, int limit, int mark) { + this.typedArray = typedArray; + this.capacity = typedArray.getLength(); this.position = position; this.limit = limit; this.mark = mark; @@ -93,64 +95,66 @@ public class EaglerArrayIntBuffer implements IntBuffer { @Override public IntBuffer slice() { - int o = dataView.getByteOffset(); - return new EaglerArrayIntBuffer(DataView.create(dataView.getBuffer(), o + (position << SHIFT), (limit - position) << SHIFT)); + if(position == limit) { + return new EaglerArrayIntBuffer(ZERO_LENGTH_BUFFER); + }else { + if(position > limit) throw new ArrayIndexOutOfBoundsException(position); + return new EaglerArrayIntBuffer(Int32Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), limit - position)); + } } @Override public IntBuffer duplicate() { - return new EaglerArrayIntBuffer(dataView, position, limit, mark); + return new EaglerArrayIntBuffer(typedArray, position, limit, mark); } @Override public IntBuffer asReadOnlyBuffer() { - return new EaglerArrayIntBuffer(dataView, position, limit, mark); + return new EaglerArrayIntBuffer(typedArray, position, limit, mark); } @Override public int get() { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - return dataView.getInt32((position++) << SHIFT, true); + return typedArray.get(position++); } @Override public IntBuffer put(int b) { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - dataView.setInt32((position++) << SHIFT, b, true); + typedArray.set(position++, b); return this; } @Override public int get(int index) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - return dataView.getInt32(index << SHIFT, true); + return typedArray.get(index); } @Override public IntBuffer put(int index, int b) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - dataView.setInt32(index << SHIFT, b, true); + typedArray.set(index, b); return this; } @Override public int getElement(int index) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - return dataView.getInt32(index << SHIFT, true); + return typedArray.get(index); } @Override public void putElement(int index, int value) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - dataView.setInt32(index << SHIFT, value, true); + typedArray.set(index, value); } @Override public IntBuffer get(int[] dst, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - dst[offset + i] = dataView.getInt32((position + i) << SHIFT, true); - } + TeaVMUtils.unwrapArrayBufferView(dst).set(Int32Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), length), offset); position += length; return this; } @@ -158,9 +162,7 @@ public class EaglerArrayIntBuffer implements IntBuffer { @Override public IntBuffer get(int[] dst) { if(position + dst.length > limit) throw new ArrayIndexOutOfBoundsException(position + dst.length - 1); - for(int i = 0; i < dst.length; ++i) { - dst[i] = dataView.getInt32((position + i) << SHIFT, true); - } + TeaVMUtils.unwrapArrayBufferView(dst).set(Int32Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), dst.length)); position += dst.length; return this; } @@ -171,17 +173,14 @@ public class EaglerArrayIntBuffer implements IntBuffer { EaglerArrayIntBuffer c = (EaglerArrayIntBuffer)src; int l = c.limit - c.position; if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); - int o = c.dataView.getByteOffset(); - Uint8Array.create(dataView.getBuffer()).set( - Uint8Array.create(c.dataView.getBuffer(), o + (c.position << SHIFT), (c.limit - c.position) << SHIFT), - dataView.getByteOffset() + (position << SHIFT)); + typedArray.set(Int32Array.create(c.typedArray.getBuffer(), c.typedArray.getByteOffset() + (c.position << SHIFT), l), position); position += l; c.position += l; }else { int l = src.remaining(); if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); for(int i = 0; i < l; ++i) { - dataView.setInt32((position + l) << SHIFT, src.get(), true); + typedArray.set(position + l, src.get()); } position += l; } @@ -191,8 +190,10 @@ public class EaglerArrayIntBuffer implements IntBuffer { @Override public IntBuffer put(int[] src, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - dataView.setInt32((position + i) << SHIFT, src[offset + i], true); + if(offset == 0 && length == src.length) { + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); + }else { + typedArray.set(Int32Array.create(TeaVMUtils.unwrapArrayBuffer(src), offset << SHIFT, length), position); } position += length; return this; @@ -201,9 +202,7 @@ public class EaglerArrayIntBuffer implements IntBuffer { @Override public IntBuffer put(int[] src) { if(position + src.length > limit) throw new ArrayIndexOutOfBoundsException(position + src.length - 1); - for(int i = 0; i < src.length; ++i) { - dataView.setInt32((position + i) << SHIFT, src[i], true); - } + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); position += src.length; return this; } @@ -219,15 +218,13 @@ public class EaglerArrayIntBuffer implements IntBuffer { if(position > limit) throw new ArrayIndexOutOfBoundsException(position); if(position == limit) { - return new EaglerArrayIntBuffer(EaglerArrayByteBuffer.ZERO_LENGTH_BUFFER); + return new EaglerArrayIntBuffer(ZERO_LENGTH_BUFFER); } - int o = dataView.getByteOffset(); + Int32Array dst = Int32Array.create(limit - position); + dst.set(Int32Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), limit - position)); - Uint8Array dst = Uint8Array.create(ArrayBuffer.create((limit - position) << SHIFT)); - dst.set(Uint8Array.create(dataView.getBuffer(), o + (position << SHIFT), (limit - position) << SHIFT)); - - return new EaglerArrayIntBuffer(DataView.create(dst.getBuffer())); + return new EaglerArrayIntBuffer(dst); } @Override diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayShortBuffer.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayShortBuffer.java index a21e63e..16eabb5 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayShortBuffer.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayShortBuffer.java @@ -1,8 +1,8 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; -import org.teavm.jso.typedarrays.ArrayBuffer; -import org.teavm.jso.typedarrays.DataView; -import org.teavm.jso.typedarrays.Uint8Array; +import org.teavm.jso.typedarrays.Int16Array; + +import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. @@ -21,7 +21,7 @@ import org.teavm.jso.typedarrays.Uint8Array; */ public class EaglerArrayShortBuffer implements ShortBuffer { - final DataView dataView; + final Int16Array typedArray; final int capacity; int position; @@ -30,17 +30,19 @@ public class EaglerArrayShortBuffer implements ShortBuffer { private static final int SHIFT = 1; - EaglerArrayShortBuffer(DataView dataView) { - this.dataView = dataView; - this.capacity = dataView.getByteLength() >> SHIFT; + static final Int16Array ZERO_LENGTH_BUFFER = Int16Array.create(0); + + EaglerArrayShortBuffer(Int16Array typedArray) { + this.typedArray = typedArray; + this.capacity = typedArray.getLength(); this.position = 0; this.limit = this.capacity; this.mark = -1; } - EaglerArrayShortBuffer(DataView dataView, int position, int limit, int mark) { - this.dataView = dataView; - this.capacity = dataView.getByteLength() >> SHIFT; + EaglerArrayShortBuffer(Int16Array typedArray, int position, int limit, int mark) { + this.typedArray = typedArray; + this.capacity = typedArray.getLength(); this.position = position; this.limit = limit; this.mark = mark; @@ -93,64 +95,66 @@ public class EaglerArrayShortBuffer implements ShortBuffer { @Override public ShortBuffer slice() { - int o = dataView.getByteOffset(); - return new EaglerArrayShortBuffer(DataView.create(dataView.getBuffer(), o + (position << SHIFT), (limit - position) << SHIFT)); + if(position == limit) { + return new EaglerArrayShortBuffer(ZERO_LENGTH_BUFFER); + }else { + if(position > limit) throw new ArrayIndexOutOfBoundsException(position); + return new EaglerArrayShortBuffer(Int16Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), limit - position)); + } } @Override public ShortBuffer duplicate() { - return new EaglerArrayShortBuffer(dataView, position, limit, mark); + return new EaglerArrayShortBuffer(typedArray, position, limit, mark); } @Override public ShortBuffer asReadOnlyBuffer() { - return new EaglerArrayShortBuffer(dataView, position, limit, mark); + return new EaglerArrayShortBuffer(typedArray, position, limit, mark); } @Override public short get() { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - return dataView.getInt16((position++) << SHIFT, true); + return typedArray.get(position++); } @Override public ShortBuffer put(short b) { if(position >= limit) throw new ArrayIndexOutOfBoundsException(position); - dataView.setInt16((position++) << SHIFT, b, true); + typedArray.set(position++, b); return this; } @Override public short get(int index) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - return dataView.getInt16(index << SHIFT, true); + return typedArray.get(index); } @Override public ShortBuffer put(int index, short b) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - dataView.setInt16(index << SHIFT, b, true); + typedArray.set(index, b); return this; } @Override public short getElement(int index) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - return dataView.getInt16(index << SHIFT, true); + return typedArray.get(index); } @Override public void putElement(int index, short value) { if(index >= limit) throw new ArrayIndexOutOfBoundsException(index); - dataView.setInt16(index << SHIFT, value, true); + typedArray.set(index, value); } @Override public ShortBuffer get(short[] dst, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - dst[offset + i] = dataView.getInt16((position + i) << SHIFT, true); - } + TeaVMUtils.unwrapArrayBufferView(dst).set(Int16Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), length), offset); position += length; return this; } @@ -158,9 +162,7 @@ public class EaglerArrayShortBuffer implements ShortBuffer { @Override public ShortBuffer get(short[] dst) { if(position + dst.length > limit) throw new ArrayIndexOutOfBoundsException(position + dst.length - 1); - for(int i = 0; i < dst.length; ++i) { - dst[i] = dataView.getInt16((position + i) << SHIFT, true); - } + TeaVMUtils.unwrapArrayBufferView(dst).set(Int16Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), dst.length)); position += dst.length; return this; } @@ -171,17 +173,14 @@ public class EaglerArrayShortBuffer implements ShortBuffer { EaglerArrayShortBuffer c = (EaglerArrayShortBuffer)src; int l = c.limit - c.position; if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); - int o = c.dataView.getByteOffset(); - Uint8Array.create(dataView.getBuffer()).set( - Uint8Array.create(c.dataView.getBuffer(), o + (c.position << SHIFT), (c.limit - c.position) << SHIFT), - dataView.getByteOffset() + (position << SHIFT)); + typedArray.set(Int16Array.create(c.typedArray.getBuffer(), c.typedArray.getByteOffset() + (c.position << SHIFT), l), position); position += l; c.position += l; }else { int l = src.remaining(); if(position + l > limit) throw new ArrayIndexOutOfBoundsException(position + l - 1); for(int i = 0; i < l; ++i) { - dataView.setInt16((position + l) << SHIFT, src.get(), true); + typedArray.set(position + l, src.get()); } position += l; } @@ -191,8 +190,10 @@ public class EaglerArrayShortBuffer implements ShortBuffer { @Override public ShortBuffer put(short[] src, int offset, int length) { if(position + length > limit) throw new ArrayIndexOutOfBoundsException(position + length - 1); - for(int i = 0; i < length; ++i) { - dataView.setInt16((position + i) << SHIFT, src[offset + i], true); + if(offset == 0 && length == src.length) { + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); + }else { + typedArray.set(Int16Array.create(TeaVMUtils.unwrapArrayBuffer(src), offset << SHIFT, length), position); } position += length; return this; @@ -201,9 +202,7 @@ public class EaglerArrayShortBuffer implements ShortBuffer { @Override public ShortBuffer put(short[] src) { if(position + src.length > limit) throw new ArrayIndexOutOfBoundsException(position + src.length - 1); - for(int i = 0; i < src.length; ++i) { - dataView.setInt16((position + i) << SHIFT, src[i], true); - } + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); position += src.length; return this; } @@ -219,15 +218,13 @@ public class EaglerArrayShortBuffer implements ShortBuffer { if(position > limit) throw new ArrayIndexOutOfBoundsException(position); if(position == limit) { - return new EaglerArrayShortBuffer(EaglerArrayByteBuffer.ZERO_LENGTH_BUFFER); + return new EaglerArrayShortBuffer(ZERO_LENGTH_BUFFER); } - int o = dataView.getByteOffset(); + Int16Array dst = Int16Array.create(limit - position); + dst.set(Int16Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), limit - position)); - Uint8Array dst = Uint8Array.create(ArrayBuffer.create((limit - position) << SHIFT)); - dst.set(Uint8Array.create(dataView.getBuffer(), o + (position << SHIFT), (limit - position) << SHIFT)); - - return new EaglerArrayShortBuffer(DataView.create(dst.getBuffer())); + return new EaglerArrayShortBuffer(dst); } @Override diff --git a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClientMain.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClientMain.java index ef9fe63..c92acb7 100644 --- a/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClientMain.java +++ b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClientMain.java @@ -46,7 +46,7 @@ import net.minecraft.client.main.Main; */ public class ClientMain { - private static final String crashImage = "data:image/png;base64,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c+Jxky5I/Mh1xeM3zkWXBZ4pmpnUPLFILBU7WOlgVjI14mniiKrplC9kPVY5b3HWKjXWuid/YSivr6S5TmsEcSwhgSQkKKihjApsRGnXSbGQovOYj3/Y9SfJpZCrDEaOBVShQXb94H/we7ZWYWrSSwrFgO4Xx/kYBXp2gWbdcb6PHad5AgSfgSu97a82gNlP0uttLXIEDGwDF9dtTdkDLneA8JMhm7IrBWkJhQLwfkbflAMGb4G+NW9urXOcPgAZmtXyDXBwCIwVKXvd5929nXP7t6c1vx8743KRRjbQVgAADfdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6NDJlMTU3MGEtNmMyZS00Y2E1LWI3ZTMtOGI4ODI1MmMwZDMwIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU1NGY3N2UwLTc4NmEtNGFlZS1iYjhmLWNhYTBiZGNiYzE3MSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNmMWYyMjUxLWIwY2QtNDE1NS1hMjAyLTExNGI0ZGM2MmFhNSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IldpbmRvd3MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNjQzMDYxODUwNDk0OTc0IgogICBHSU1QOlZlcnNpb249IjIuMTAuMjQiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ODUyMGQ4YTMtMWRhZC00ZjIwLWFjOTktODg4OTJkZDExNDQ0IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDIxLTEyLTE3VDE3OjIyOjQ4Ii8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJkY2U5N2M4LTBkZjItNGQzNi1iMzE1LWE0YjdmMmUyMjJiNSIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChXaW5kb3dzKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMi0wMS0yNFQxNDowNDoxMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz61xwk6AAAABmJLR0QAnQCdAJ2roJyEAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5gEYFgQKOBb3JwAAIABJREFUeNrtvXl0lFWePv7UvlelKvu+koSQRQiyBJGISEB0hFYZwW1sp4/2csaZ1jlz5sz80cc5c7rnaI8zju2o09qiIrKowEGURXYI+5IASQjZl0plT2rff3/073O/byVVlUQSRPs+5+QkkMpbb9333ud+lufzuaJgMBgEBwcHxw8UYj4EHBwcnMQ4ODg4OIlxcHBwcBLj4ODgJMbBwcHBSYyDg4ODkxgHBwcHJzEODg5OYhwcHBycxDg4ODg4iXFw/GWAqgHHfv+ufyv8+q7XvVMh4rWTHBwc3BLj4ODg4CTGwcHBwUmMg4ODkxgHBwcHJzEODg4OTmIcHBwcnMQ4ODg4iXFwcHBwEuPg4ODgJMbBwcHBSYyDg+NHBCkfAo6/ZAiLov1+P3w+H/x+P/x+P4LBIDQaDWQyGR+oSYyjSCSK+G9OYhwctwiHw4Guri44HA54vV74fD72FQgE4Pf74Xa74XA44Ha74Xa7EQgEsGrVKqSnp9+2BTlT5EJETT+PJZxgMAixWMx+FwgEIBb/2VGjn4W/o78P9/qxPSXo2pFez0mMg2MSC7mrqwt/+MMfYDabYbfb4XQ64XQ64XA42HeHw4HBwUFIJBJIJBLExMRg4cKFSEtL+0GSmJAwxsLn80EqlSIQCIRYomKxGD6fD2KxGH6/n31un88HiUQCv98fcm26Pr2H0LIlkhLeg/B3RIbCa30XS46TGMePHn6/HxaLBVu2bIFcLg9ZXLRQpFIpDAYDDAYDW0RyufwHRV7ChU9kQeQhtHyInLxeL7OwyFoS/o7caCI1+k7XlEgkjIiEJOXz+SASiSCVStl9SKX/j2pE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"; + private static final String crashImage = "data:image/png;base64,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"; // avoid inlining of constant private static String crashImageWrapper() { @@ -378,7 +378,7 @@ public class ClientMain { div.setAttribute("style", "z-index:100;position:absolute;top:135px;left:10%;right:10%;bottom:50px;background-color:white;border:1px solid #cccccc;overflow-x:hidden;overflow-y:scroll;font:18px sans-serif;padding:40px;"); el.appendChild(img); el.appendChild(div); - div.setInnerHTML("

+ This device is incompatible with EaglerForge :(

" + div.setInnerHTML("

+ This device is incompatible with Eaglercraft :(

" + "
" + "

Issue:

" + "

" @@ -393,7 +393,6 @@ public class ClientMain { + "
  • If your browser is out of date, please update it to the latest version
  • " + "
  • If you are using an old OS such as Windows 7, please try Windows 10 or 11
  • " + "
  • If you have a GPU launched before 2009, WebGL 2.0 support may be impossible
  • " - + "
  • Try loading without mods
  • " + "" + "
    "); 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 e9ad8a2..61d1791 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 @@ -55,6 +55,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { private boolean logInvalidCerts = false; private boolean checkRelaysForUpdates = false; private boolean enableSignatureBadge = false; + private boolean allowVoiceClient = true; public void loadNative(JSObject jsObject) { integratedServerOpts = new JSONObject(); @@ -73,12 +74,14 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { useSpecialCursors = eaglercraftXOpts.getHtml5CursorSupport(false); logInvalidCerts = EaglercraftVersion.enableUpdateService && !demoMode && eaglercraftXOpts.getLogInvalidCerts(false); enableSignatureBadge = eaglercraftXOpts.getEnableSignatureBadge(false); + allowVoiceClient = eaglercraftXOpts.getAllowVoiceClient(true); integratedServerOpts.put("worldsDB", worldsDB); integratedServerOpts.put("demoMode", demoMode); integratedServerOpts.put("lang", defaultLocale); integratedServerOpts.put("allowUpdateSvc", isAllowUpdateSvc); integratedServerOpts.put("allowUpdateDL", isAllowUpdateDL); + integratedServerOpts.put("allowVoiceClient", allowVoiceClient); JSEaglercraftXOptsServersArray serversArray = eaglercraftXOpts.getServers(); if(serversArray != null) { @@ -158,6 +161,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { useSpecialCursors = eaglercraftOpts.optBoolean("html5CursorSupport", false); logInvalidCerts = EaglercraftVersion.enableUpdateService && !demoMode && eaglercraftOpts.optBoolean("logInvalidCerts", false); enableSignatureBadge = eaglercraftOpts.optBoolean("enableSignatureBadge", false); + allowVoiceClient = eaglercraftOpts.optBoolean("allowVoiceClient", true); JSONArray serversArray = eaglercraftOpts.optJSONArray("servers"); if(serversArray != null) { for(int i = 0, l = serversArray.length(); i < l; ++i) { @@ -300,6 +304,11 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { return enableSignatureBadge; } + @Override + public boolean isAllowVoiceClient() { + return allowVoiceClient; + } + @Override public String toString() { JSONObject jsonObject = new JSONObject(); @@ -317,6 +326,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { jsonObject.put("logInvalidCerts", logInvalidCerts); jsonObject.put("checkRelaysForUpdates", checkRelaysForUpdates); jsonObject.put("enableSignatureBadge", enableSignatureBadge); + jsonObject.put("allowVoiceClient", allowVoiceClient); 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/TeaVMUtils.java b/sources/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUtils.java index 98a6963..0a8edf7 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 @@ -9,6 +9,7 @@ import org.teavm.jso.browser.Window; import org.teavm.jso.typedarrays.ArrayBuffer; import org.teavm.jso.typedarrays.ArrayBufferView; import org.teavm.jso.typedarrays.Float32Array; +import org.teavm.jso.typedarrays.Int16Array; import org.teavm.jso.typedarrays.Int32Array; import org.teavm.jso.typedarrays.Int8Array; import org.teavm.jso.typedarrays.Uint8Array; @@ -57,6 +58,10 @@ public class TeaVMUtils { return ((TeaVMArrayObject)(Object)buf).getData().getBuffer(); } + public static ArrayBufferView unwrapArrayBufferView(byte[] buf) { + return ((TeaVMArrayObject)(Object)buf).getData(); + } + @JSBody(params = { "buf" }, script = "return $rt_createByteArray(buf.buffer)") private static native JSObject wrapByteArray0(JSObject buf); @@ -80,6 +85,10 @@ public class TeaVMUtils { return ((TeaVMArrayObject)(Object)buf).getData().getBuffer(); } + public static ArrayBufferView unwrapArrayBufferView(int[] buf) { + return ((TeaVMArrayObject)(Object)buf).getData(); + } + @JSBody(params = { "buf" }, script = "return $rt_createIntArray(buf.buffer)") private static native JSObject wrapIntArray0(JSObject buf); @@ -95,6 +104,10 @@ public class TeaVMUtils { return ((TeaVMArrayObject)(Object)buf).getData().getBuffer(); } + public static ArrayBufferView unwrapArrayBufferView(float[] buf) { + return ((TeaVMArrayObject)(Object)buf).getData(); + } + @JSBody(params = { "buf" }, script = "return $rt_createFloatArray(buf.buffer)") private static native JSObject wrapFloatArray0(JSObject buf); @@ -102,6 +115,25 @@ public class TeaVMUtils { return (float[])(Object)wrapFloatArray0(buf); } + public static Int16Array unwrapShortArray(short[] buf) { + return Int16Array.create(((TeaVMArrayObject)(Object)buf).getData().getBuffer()); + } + + public static ArrayBuffer unwrapArrayBuffer(short[] buf) { + return ((TeaVMArrayObject)(Object)buf).getData().getBuffer(); + } + + public static ArrayBufferView unwrapArrayBufferView(short[] buf) { + return ((TeaVMArrayObject)(Object)buf).getData(); + } + + @JSBody(params = { "buf" }, script = "return $rt_createShortArray(buf.buffer)") + private static native JSObject wrapShortArray0(JSObject buf); + + public static short[] wrapShortArray(Int16Array buf) { + return (short[])(Object)wrapShortArray0(buf); + } + @Async public static native void sleepSetTimeout(int millis); 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 7449bd8..c5c9483 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 @@ -80,4 +80,7 @@ public abstract class JSEaglercraftXOptsRoot implements JSObject { @JSBody(params = { "def" }, script = "return (typeof this.checkRelaysForUpdates === \"boolean\") ? this.checkRelaysForUpdates : def;") public native boolean getCheckRelaysForUpdates(boolean defaultValue); + @JSBody(params = { "def" }, script = "return (typeof this.allowVoiceClient === \"boolean\") ? this.allowVoiceClient : def;") + public native boolean getAllowVoiceClient(boolean defaultValue); + }

    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 z