Update #28 - Added capes, voice chat, FNAW skins, and fixes

This commit is contained in:
lax1dude
2024-04-20 16:20:06 -07:00
parent 42c57894f9
commit ba88b52022
171 changed files with 7476 additions and 868 deletions

View File

@ -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]));

View File

@ -20,7 +20,7 @@
> DELETE 1 @ 1 : 4
> CHANGE 1 : 52 @ 1 : 4
> CHANGE 1 : 55 @ 1 : 4
~
~ import net.lax1dude.eaglercraft.v1_8.internal.PlatformInput;
@ -46,6 +46,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;
@ -73,6 +74,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
@ -165,10 +168,16 @@
+ public int bungeeOutdatedMsgTimer = 0;
+ private boolean isLANOpen = false;
> INSERT 1 : 3 @ 1
> INSERT 1 : 9 @ 1
+ 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
@ -248,7 +257,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);
@ -256,6 +265,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
@ -273,9 +283,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();
@ -490,7 +503,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
@ -518,11 +535,19 @@
~ Display.toggleFullscreen();
> DELETE 11 @ 11 : 12
> INSERT 5 : 6 @ 5
> DELETE 2 @ 2 : 10
+ ScaledResolution scaledresolution = new ScaledResolution(this);
> INSERT 9 : 28 @ 9
> DELETE 1 @ 1 : 2
> DELETE 4 @ 4 : 6
> CHANGE 1 : 2 @ 1 : 7
~ this.voiceOverlay.setResolution(scaledresolution.getScaledWidth(), scaledresolution.getScaledHeight());
> INSERT 11 : 30 @ 11
+ RateLimitTracker.tick();
+
@ -544,7 +569,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
@ -573,7 +604,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;
@ -613,7 +650,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();
@ -664,8 +710,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);
@ -799,7 +846,7 @@
> DELETE 26 @ 26 : 34
> INSERT 7 : 27 @ 7
> INSERT 7 : 35 @ 7
+
+ public static int getGLMaximumTextureSize() {
@ -821,5 +868,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

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -26,4 +26,11 @@
~ protected void mouseClicked(int parInt1, int parInt2, int parInt3) {
> INSERT 46 : 50 @ 46
+
+ public boolean blockPTTKey() {
+ return commandTextField.isFocused();
+ }
> EOF

View File

@ -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

View File

@ -54,7 +54,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;

View File

@ -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 : 7 @ 4 : 5
@ -25,16 +28,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);
+ }
+ }
+
@ -90,8 +97,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);
~ }
@ -100,45 +111,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);
@ -152,11 +194,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));
@ -167,7 +218,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));
@ -179,5 +231,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

View File

@ -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);

View File

@ -28,4 +28,11 @@
~ protected void mouseClicked(int parInt1, int parInt2, int parInt3) {
> INSERT 46 : 50 @ 46
+
+ public boolean blockPTTKey() {
+ return nameField.isFocused();
+ }
> EOF

View File

@ -178,11 +178,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

View File

@ -42,4 +42,11 @@
~ protected void mouseClicked(int parInt1, int parInt2, int parInt3) {
> INSERT 102 : 106 @ 102
+
+ public boolean blockPTTKey() {
+ return this.bookIsUnsigned;
+ }
> EOF

View File

@ -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

View File

@ -84,4 +84,11 @@
~ protected void actionPerformed(GuiButton parGuiButton) {
> INSERT 139 : 143 @ 139
+
+ public boolean blockPTTKey() {
+ return searchField.isFocused();
+ }
> EOF

View File

@ -22,4 +22,11 @@
~ protected void keyTyped(char parChar1, int parInt1) {
> INSERT 68 : 72 @ 68
+
+ public boolean blockPTTKey() {
+ return true;
+ }
> EOF

View File

@ -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()) {

View File

@ -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

View File

@ -9,7 +9,7 @@
> DELETE 4 @ 4 : 6
> INSERT 1 : 19 @ 1
> INSERT 1 : 22 @ 1
+
+ import net.lax1dude.eaglercraft.v1_8.EagRuntime;
@ -19,12 +19,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;
@ -64,36 +67,51 @@
~ private final Map<EaglercraftUUID, NetworkPlayerInfo> 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 : 6 @ 2
> INSERT 2 : 10 @ 2
+ public ServerSkinCache getSkinCache() {
+ return this.skinCache;
+ }
+
+ 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
@ -129,8 +147,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);
~ }
@ -241,11 +262,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
@ -335,7 +357,7 @@
> DELETE 11 @ 11 : 13
> INSERT 9 : 28 @ 9
> INSERT 9 : 43 @ 9
+ } else if ("EAG|Skins-1.8".equals(packetIn.getChannelName())) {
+ try {
@ -344,6 +366,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 {
@ -356,8 +385,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

View File

@ -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

View File

@ -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();

View File

@ -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) {

View File

@ -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

View File

@ -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<? extends Entity>) parClass1.getSuperclass());

View File

@ -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();

View File

@ -41,7 +41,12 @@
~ return this.layerRenderers.add((LayerRenderer<T>) 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

View File

@ -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));
~ }

View File

@ -14,10 +14,12 @@
> DELETE 1 @ 1 : 3
> INSERT 3 : 24 @ 3
> INSERT 3 : 27 @ 3
+
+ 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;
@ -33,6 +35,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;
@ -53,9 +56,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
@ -88,7 +91,7 @@
~ public int guiScale = 3;
> INSERT 3 : 16 @ 3
> INSERT 3 : 17 @ 3
+ public boolean hudFps = true;
+ public boolean hudCoords = true;
@ -103,9 +106,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
@ -148,7 +157,7 @@
> DELETE 20 @ 20 : 37
> INSERT 13 : 53 @ 13
> INSERT 13 : 62 @ 13
+ if (parOptions == GameSettings.Options.HUD_FPS) {
+ this.hudFps = !this.hudFps;
@ -190,6 +199,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
@ -199,7 +217,7 @@
> DELETE 2 @ 2 : 4
> INSERT 8 : 26 @ 8
> INSERT 8 : 30 @ 8
+ case HUD_COORDS:
+ return this.hudCoords;
@ -219,6 +237,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
@ -318,9 +340,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
@ -395,7 +419,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");
@ -405,7 +429,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) {
@ -413,14 +451,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) {
@ -448,13 +503,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);
@ -467,6 +522,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
@ -487,9 +547,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
@ -521,13 +583,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

View File

@ -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();

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -5,9 +5,14 @@
# Version: 1.0
# Author: lax1dude
> INSERT 8 : 10 @ 8
> INSERT 8 : 15 @ 8
+ 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;
+
> EOF

View File

@ -113,13 +113,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) {

View File

@ -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) {

View File

@ -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 : 230 @ 1
> INSERT 1 : 238 @ 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
+
@ -244,7 +252,7 @@
+ eaglercraft.command.clientStub=This command is client side!
+
> INSERT 163 : 350 @ 163
> INSERT 163 : 404 @ 163
+ eaglercraft.singleplayer.busy.killTask=Cancel Task
+ eaglercraft.singleplayer.busy.cancelWarning=Are you sure?
@ -433,6 +441,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
@ -442,7 +504,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