Begin LAN support
Todo: cleanup & consistency (specifically with raw/direct usages of IntegratedServer)
This commit is contained in:
parent
0b2a351278
commit
e0fad18020
11
eaglercraft-sp.iml
Normal file
11
eaglercraft-sp.iml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module version="4">
|
||||||
|
<component name="EclipseModuleManager">
|
||||||
|
<conelement value="org.eclipse.buildship.core.gradleclasspathcontainer" />
|
||||||
|
<src_description expected_position="0">
|
||||||
|
<src_folder value="file://$MODULE_DIR$/src/main/java" expected_position="0" />
|
||||||
|
<src_folder value="file://$MODULE_DIR$/src/teavm/java" expected_position="1" />
|
||||||
|
<src_folder value="file://$MODULE_DIR$/sp-server/src/ipc/java" expected_position="2" />
|
||||||
|
</src_description>
|
||||||
|
</component>
|
||||||
|
</module>
|
Binary file not shown.
34982
javascript/classes.js
34982
javascript/classes.js
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -468,5 +468,5 @@ window.startLANServer = () => {
|
||||||
if(typeof window.constructLANServer !== "function") {
|
if(typeof window.constructLANServer !== "function") {
|
||||||
window.initializeLANServer();
|
window.initializeLANServer();
|
||||||
}
|
}
|
||||||
return window.constructLANerver();
|
return window.constructLANServer();
|
||||||
};
|
};
|
||||||
|
|
|
@ -32,6 +32,7 @@ menu.convertingLevel=Converting world
|
||||||
menu.simulating=Simulating the world for a bit
|
menu.simulating=Simulating the world for a bit
|
||||||
menu.respawning=Respawning
|
menu.respawning=Respawning
|
||||||
menu.shareToLan=Open to LAN
|
menu.shareToLan=Open to LAN
|
||||||
|
menu.closeLan=Close LAN
|
||||||
|
|
||||||
menu.skinCapeSettings=Skins/Capes Settings
|
menu.skinCapeSettings=Skins/Capes Settings
|
||||||
menu.skinCapeSettingsNote0=I put the button up here so
|
menu.skinCapeSettingsNote0=I put the button up here so
|
||||||
|
@ -232,6 +233,7 @@ selectServer.direct=Direct Connect
|
||||||
selectServer.edit=Edit
|
selectServer.edit=Edit
|
||||||
selectServer.delete=Delete
|
selectServer.delete=Delete
|
||||||
selectServer.add=Add server
|
selectServer.add=Add server
|
||||||
|
selectServer.lan=§3LAN
|
||||||
selectServer.defaultName=Minecraft Server
|
selectServer.defaultName=Minecraft Server
|
||||||
selectServer.deleteQuestion=Are you sure you want to remove this server?
|
selectServer.deleteQuestion=Are you sure you want to remove this server?
|
||||||
selectServer.deleteWarning=will be lost forever! (A long time!)
|
selectServer.deleteWarning=will be lost forever! (A long time!)
|
||||||
|
|
|
@ -6,6 +6,7 @@ import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import net.lax1dude.eaglercraft.sp.ipc.*;
|
import net.lax1dude.eaglercraft.sp.ipc.*;
|
||||||
|
import net.minecraft.src.EnumGameType;
|
||||||
import net.minecraft.src.NBTTagCompound;
|
import net.minecraft.src.NBTTagCompound;
|
||||||
import net.minecraft.src.NetHandler;
|
import net.minecraft.src.NetHandler;
|
||||||
import net.minecraft.src.WorldSettings;
|
import net.minecraft.src.WorldSettings;
|
||||||
|
@ -426,5 +427,19 @@ public class IntegratedServer {
|
||||||
EaglerAdapter.disableChannel("NET|" + channel);
|
EaglerAdapter.disableChannel("NET|" + channel);
|
||||||
sendIPCPacket(new IPCPacket0CPlayerChannel(channel, false));
|
sendIPCPacket(new IPCPacket0CPlayerChannel(channel, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean hostingLAN = false;
|
||||||
|
|
||||||
|
public static final String shareToLAN(EnumGameType gameType, boolean allowCommands) {
|
||||||
|
hostingLAN = true;
|
||||||
|
return "yee";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final void closeLAN() {
|
||||||
|
hostingLAN = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final boolean isHostingLAN() {
|
||||||
|
return hostingLAN;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import net.lax1dude.eaglercraft.ConfigConstants;
|
||||||
import net.lax1dude.eaglercraft.EaglerAdapter;
|
import net.lax1dude.eaglercraft.EaglerAdapter;
|
||||||
import net.lax1dude.eaglercraft.GuiScreenSkinCapeSettings;
|
import net.lax1dude.eaglercraft.GuiScreenSkinCapeSettings;
|
||||||
import net.lax1dude.eaglercraft.GuiVoiceMenu;
|
import net.lax1dude.eaglercraft.GuiVoiceMenu;
|
||||||
|
import net.lax1dude.eaglercraft.IntegratedServer;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
|
||||||
public class GuiIngameMenu extends GuiScreen {
|
public class GuiIngameMenu extends GuiScreen {
|
||||||
|
@ -30,8 +31,8 @@ public class GuiIngameMenu extends GuiScreen {
|
||||||
this.buttonList.add(new GuiButton(4, this.width / 2 - 100, this.height / 4 + 24 + var1, StatCollector.translateToLocal("menu.returnToGame")));
|
this.buttonList.add(new GuiButton(4, this.width / 2 - 100, this.height / 4 + 24 + var1, StatCollector.translateToLocal("menu.returnToGame")));
|
||||||
this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + var1, 98, 20, StatCollector.translateToLocal("menu.options")));
|
this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + var1, 98, 20, StatCollector.translateToLocal("menu.options")));
|
||||||
GuiButton var3;
|
GuiButton var3;
|
||||||
this.buttonList.add(var3 = new GuiButton(7, this.width / 2 + 2, this.height / 4 + 96 + var1, 98, 20, StatCollector.translateToLocal("menu.shareToLan")));
|
this.buttonList.add(var3 = new GuiButton(7, this.width / 2 + 2, this.height / 4 + 96 + var1, 98, 20, StatCollector.translateToLocal(IntegratedServer.isHostingLAN() ? "menu.closeLan" : "menu.shareToLan")));
|
||||||
var3.enabled = false;
|
var3.enabled = mc.isSingleplayer();
|
||||||
this.buttonList.add(new GuiButton(8, 3, 3, 120, 20, StatCollector.translateToLocal("menu.skinCapeSettings")));
|
this.buttonList.add(new GuiButton(8, 3, 3, 120, 20, StatCollector.translateToLocal("menu.skinCapeSettings")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,6 +62,17 @@ public class GuiIngameMenu extends GuiScreen {
|
||||||
this.mc.setIngameFocus();
|
this.mc.setIngameFocus();
|
||||||
this.mc.sndManager.resumeAllSounds();
|
this.mc.sndManager.resumeAllSounds();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 7:
|
||||||
|
if (IntegratedServer.isHostingLAN()) {
|
||||||
|
IntegratedServer.closeLAN();
|
||||||
|
this.mc.displayGuiScreen((GuiScreen) null);
|
||||||
|
this.mc.setIngameFocus();
|
||||||
|
this.mc.sndManager.resumeAllSounds();
|
||||||
|
} else {
|
||||||
|
this.mc.displayGuiScreen(new GuiShareToLan(this));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 8:
|
case 8:
|
||||||
this.mc.displayGuiScreen(new GuiScreenSkinCapeSettings(this));
|
this.mc.displayGuiScreen(new GuiScreenSkinCapeSettings(this));
|
||||||
|
|
|
@ -123,13 +123,14 @@ public class GuiMultiplayer extends GuiScreen {
|
||||||
*/
|
*/
|
||||||
public void initGuiControls() {
|
public void initGuiControls() {
|
||||||
StringTranslate var1 = StringTranslate.getInstance();
|
StringTranslate var1 = StringTranslate.getInstance();
|
||||||
this.buttonList.add(this.field_96289_p = new GuiButton(7, this.width / 2 - 154, this.height - 28, 70, 20, var1.translateKey("selectServer.edit")));
|
this.buttonList.add(this.field_96289_p = new GuiButton(7, this.width / 2 - 154 + 36, this.height - 28, 60, 20, var1.translateKey("selectServer.edit")));
|
||||||
this.buttonList.add(this.buttonDelete = new GuiButton(2, this.width / 2 - 74, this.height - 28, 70, 20, var1.translateKey("selectServer.delete")));
|
this.buttonList.add(this.buttonDelete = new GuiButton(2, this.width / 2 - 74 + 22, this.height - 28, 60, 20, var1.translateKey("selectServer.delete")));
|
||||||
this.buttonList.add(this.buttonSelect = new GuiButton(1, this.width / 2 - 154, this.height - 52, 100, 20, var1.translateKey("selectServer.select")));
|
this.buttonList.add(this.buttonSelect = new GuiButton(1, this.width / 2 - 154, this.height - 52, 100, 20, var1.translateKey("selectServer.select")));
|
||||||
this.buttonList.add(new GuiButton(4, this.width / 2 - 50, this.height - 52, 100, 20, var1.translateKey("selectServer.direct")));
|
this.buttonList.add(new GuiButton(4, this.width / 2 - 50, this.height - 52, 100, 20, var1.translateKey("selectServer.direct")));
|
||||||
this.buttonList.add(new GuiButton(3, this.width / 2 + 4 + 50, this.height - 52, 100, 20, var1.translateKey("selectServer.add")));
|
this.buttonList.add(new GuiButton(3, this.width / 2 + 4 + 50, this.height - 52, 100, 20, var1.translateKey("selectServer.add")));
|
||||||
this.buttonList.add(new GuiButton(8, this.width / 2 + 4, this.height - 28, 70, 20, var1.translateKey("selectServer.refresh")));
|
this.buttonList.add(new GuiButton(8, this.width / 2 + 4 + 10, this.height - 28, 60, 20, var1.translateKey("selectServer.refresh")));
|
||||||
this.buttonList.add(new GuiButton(0, this.width / 2 + 4 + 76, this.height - 28, 75, 20, var1.translateKey("gui.cancel")));
|
this.buttonList.add(new GuiButton(0, this.width / 2 + 4 + 76, this.height - 28, 75, 20, var1.translateKey("gui.cancel")));
|
||||||
|
this.buttonList.add(new GuiButton(10, this.width / 2 - 154, this.height - 28, 30, 20, var1.translateKey("selectServer.lan")));
|
||||||
boolean var2 = this.selectedServer >= 0 && this.selectedServer < this.serverSlotContainer.getSize();
|
boolean var2 = this.selectedServer >= 0 && this.selectedServer < this.serverSlotContainer.getSize();
|
||||||
this.buttonSelect.enabled = var2;
|
this.buttonSelect.enabled = var2;
|
||||||
this.field_96289_p.enabled = var2;
|
this.field_96289_p.enabled = var2;
|
||||||
|
@ -193,6 +194,8 @@ public class GuiMultiplayer extends GuiScreen {
|
||||||
--cooldownTimer;
|
--cooldownTimer;
|
||||||
this.mc.displayGuiScreen(new GuiMultiplayer(this.parentScreen));
|
this.mc.displayGuiScreen(new GuiMultiplayer(this.parentScreen));
|
||||||
}
|
}
|
||||||
|
} else if (par1GuiButton.id == 10) {
|
||||||
|
this.mc.displayGuiScreen(this.parentScreen);
|
||||||
} else {
|
} else {
|
||||||
this.serverSlotContainer.actionPerformed(par1GuiButton);
|
this.serverSlotContainer.actionPerformed(par1GuiButton);
|
||||||
}
|
}
|
||||||
|
|
91
src/main/java/net/minecraft/src/GuiShareToLan.java
Normal file
91
src/main/java/net/minecraft/src/GuiShareToLan.java
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
package net.minecraft.src;
|
||||||
|
|
||||||
|
import net.lax1dude.eaglercraft.IntegratedServer;
|
||||||
|
|
||||||
|
public class GuiShareToLan extends GuiScreen {
|
||||||
|
/**
|
||||||
|
* A reference to the screen object that created this. Used for navigating between screens.
|
||||||
|
*/
|
||||||
|
private final GuiScreen parentScreen;
|
||||||
|
private GuiButton buttonAllowCommandsToggle;
|
||||||
|
private GuiButton buttonGameMode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The currently selected game mode. One of 'survival', 'creative', or 'adventure'
|
||||||
|
*/
|
||||||
|
private String gameMode = "survival";
|
||||||
|
|
||||||
|
/** True if 'Allow Cheats' is currently enabled */
|
||||||
|
private boolean allowCommands;
|
||||||
|
|
||||||
|
public GuiShareToLan(GuiScreen par1GuiScreen) {
|
||||||
|
this.parentScreen = par1GuiScreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the buttons (and other controls) to the screen in question.
|
||||||
|
*/
|
||||||
|
public void initGui() {
|
||||||
|
this.buttonList.clear();
|
||||||
|
this.buttonList.add(new GuiButton(101, this.width / 2 - 155, this.height - 28, 150, 20, StatCollector.translateToLocal("lanServer.start")));
|
||||||
|
this.buttonList.add(new GuiButton(102, this.width / 2 + 5, this.height - 28, 150, 20, StatCollector.translateToLocal("gui.cancel")));
|
||||||
|
this.buttonList.add(this.buttonGameMode = new GuiButton(104, this.width / 2 - 155, 100, 150, 20, StatCollector.translateToLocal("selectWorld.gameMode")));
|
||||||
|
this.buttonList.add(this.buttonAllowCommandsToggle = new GuiButton(103, this.width / 2 + 5, 100, 150, 20, StatCollector.translateToLocal("selectWorld.allowCommands")));
|
||||||
|
this.func_74088_g();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void func_74088_g() {
|
||||||
|
this.buttonGameMode.displayString = StatCollector.translateToLocal("selectWorld.gameMode") + " " + StatCollector.translateToLocal("selectWorld.gameMode." + this.gameMode);
|
||||||
|
this.buttonAllowCommandsToggle.displayString = StatCollector.translateToLocal("selectWorld.allowCommands") + " ";
|
||||||
|
|
||||||
|
if (this.allowCommands) {
|
||||||
|
this.buttonAllowCommandsToggle.displayString = this.buttonAllowCommandsToggle.displayString + StatCollector.translateToLocal("options.on");
|
||||||
|
} else {
|
||||||
|
this.buttonAllowCommandsToggle.displayString = this.buttonAllowCommandsToggle.displayString + StatCollector.translateToLocal("options.off");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
|
||||||
|
*/
|
||||||
|
protected void actionPerformed(GuiButton par1GuiButton) {
|
||||||
|
if (par1GuiButton.id == 102) {
|
||||||
|
this.mc.displayGuiScreen(this.parentScreen);
|
||||||
|
} else if (par1GuiButton.id == 104) {
|
||||||
|
if (this.gameMode.equals("survival")) {
|
||||||
|
this.gameMode = "creative";
|
||||||
|
} else if (this.gameMode.equals("creative")) {
|
||||||
|
this.gameMode = "adventure";
|
||||||
|
} else {
|
||||||
|
this.gameMode = "survival";
|
||||||
|
}
|
||||||
|
|
||||||
|
this.func_74088_g();
|
||||||
|
} else if (par1GuiButton.id == 103) {
|
||||||
|
this.allowCommands = !this.allowCommands;
|
||||||
|
this.func_74088_g();
|
||||||
|
} else if (par1GuiButton.id == 101) {
|
||||||
|
this.mc.displayGuiScreen((GuiScreen)null);
|
||||||
|
String var2 = IntegratedServer.shareToLAN(EnumGameType.getByName(this.gameMode), this.allowCommands);
|
||||||
|
String var3;
|
||||||
|
|
||||||
|
if (var2 != null) {
|
||||||
|
var3 = StatCollector.translateToLocalFormatted("commands.publish.started", var2);
|
||||||
|
} else {
|
||||||
|
var3 = StatCollector.translateToLocal("commands.publish.failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.mc.ingameGUI.getChatGUI().printChatMessage(var3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draws the screen and all the components in it.
|
||||||
|
*/
|
||||||
|
public void drawScreen(int par1, int par2, float par3) {
|
||||||
|
this.drawDefaultBackground();
|
||||||
|
this.drawCenteredString(this.fontRenderer, StatCollector.translateToLocal("lanServer.title"), this.width / 2, 50, 16777215);
|
||||||
|
this.drawCenteredString(this.fontRenderer, StatCollector.translateToLocal("lanServer.otherPlayers"), this.width / 2, 82, 16777215);
|
||||||
|
super.drawScreen(par1, par2, par3);
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,7 +4,7 @@ import org.teavm.jso.JSFunctor;
|
||||||
import org.teavm.jso.JSObject;
|
import org.teavm.jso.JSObject;
|
||||||
import org.teavm.jso.typedarrays.ArrayBuffer;
|
import org.teavm.jso.typedarrays.ArrayBuffer;
|
||||||
|
|
||||||
public interface EaglercraftLANClient {
|
public interface EaglercraftLANClient extends JSObject {
|
||||||
|
|
||||||
final int READYSTATE_INIT_FAILED = -2;
|
final int READYSTATE_INIT_FAILED = -2;
|
||||||
final int READYSTATE_FAILED = -1;
|
final int READYSTATE_FAILED = -1;
|
||||||
|
|
|
@ -4,7 +4,7 @@ import org.teavm.jso.JSFunctor;
|
||||||
import org.teavm.jso.JSObject;
|
import org.teavm.jso.JSObject;
|
||||||
import org.teavm.jso.typedarrays.ArrayBuffer;
|
import org.teavm.jso.typedarrays.ArrayBuffer;
|
||||||
|
|
||||||
public interface EaglercraftLANServer {
|
public interface EaglercraftLANServer extends JSObject {
|
||||||
|
|
||||||
boolean LANServerSupported();
|
boolean LANServerSupported();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user