diff --git a/src/main/java/eu/crushedpixel/replaymod/ReplayMod.java b/src/main/java/eu/crushedpixel/replaymod/ReplayMod.java index ac3e31b2..4462318f 100644 --- a/src/main/java/eu/crushedpixel/replaymod/ReplayMod.java +++ b/src/main/java/eu/crushedpixel/replaymod/ReplayMod.java @@ -11,10 +11,11 @@ import net.minecraftforge.fml.common.Mod.Instance; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; -import eu.crushedpixel.replaymod.authentication.AuthenticationHandler; +import eu.crushedpixel.replaymod.api.client.ApiClient; import eu.crushedpixel.replaymod.events.GuiEventHandler; import eu.crushedpixel.replaymod.events.GuiReplayOverlay; import eu.crushedpixel.replaymod.events.RecordingHandler; +import eu.crushedpixel.replaymod.online.authentication.AuthenticationHandler; import eu.crushedpixel.replaymod.recording.ConnectionEventHandler; import eu.crushedpixel.replaymod.registry.KeybindRegistry; import eu.crushedpixel.replaymod.renderer.SafeEntityRenderer; @@ -49,6 +50,8 @@ public class ReplayMod public static int TP_DISTANCE_LIMIT = 128; + public static final ApiClient apiClient = new ApiClient(); + // The instance of your mod that Forge uses. @Instance(value = "ReplayModID") public static ReplayMod instance; @@ -87,8 +90,6 @@ public class ReplayMod FMLCommonHandler.instance().bus().register(overlay); MinecraftForge.EVENT_BUS.register(overlay); - AuthenticationHandler.authenticate(); - KeybindRegistry.initialize(); try { diff --git a/src/main/java/eu/crushedpixel/replaymod/events/GuiEventHandler.java b/src/main/java/eu/crushedpixel/replaymod/events/GuiEventHandler.java index df921d73..c006a091 100644 --- a/src/main/java/eu/crushedpixel/replaymod/events/GuiEventHandler.java +++ b/src/main/java/eu/crushedpixel/replaymod/events/GuiEventHandler.java @@ -20,11 +20,14 @@ import net.minecraftforge.client.event.GuiOpenEvent; import net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent; import net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import eu.crushedpixel.replaymod.authentication.AuthenticationHandler; +import eu.crushedpixel.replaymod.gui.GuiConstants; import eu.crushedpixel.replaymod.gui.GuiReplaySaving; import eu.crushedpixel.replaymod.gui.GuiReplaySettings; +import eu.crushedpixel.replaymod.gui.online.GuiLoginPrompt; +import eu.crushedpixel.replaymod.gui.online.GuiReplayCenter; import eu.crushedpixel.replaymod.gui.replaymanager.GuiReplayManager; import eu.crushedpixel.replaymod.gui.replaymanager.ResourceHelper; +import eu.crushedpixel.replaymod.online.authentication.AuthenticationHandler; import eu.crushedpixel.replaymod.registry.ReplayGuiRegistry; import eu.crushedpixel.replaymod.renderer.SafeEntityRenderer; import eu.crushedpixel.replaymod.replay.ReplayHandler; @@ -64,9 +67,6 @@ public class GuiEventHandler { } } - private static final int REPLAY_MANAGER_ID = 9001; - private static final int REPLAY_OPTIONS_ID = 9001; - @SubscribeEvent public void onInit(InitGuiEvent event) { if(event.gui instanceof GuiIngameMenu && ReplayHandler.replayActive()) { @@ -89,9 +89,15 @@ public class GuiEventHandler { } } - GuiButton rm = new GuiButton(REPLAY_MANAGER_ID, event.gui.width / 2 - 100, i1 + 2*24, I18n.format("Replay Manager", new Object[0])); + GuiButton rm = new GuiButton(GuiConstants.REPLAY_MANAGER_BUTTON_ID, event.gui.width / 2 - 100, i1 + 2*24, I18n.format("Replay Manager", new Object[0])); + rm.width = rm.width/2 - 2; rm.enabled = AuthenticationHandler.isAuthenticated(); event.buttonList.add(rm); + + GuiButton rc = new GuiButton(GuiConstants.REPLAY_CENTER_BUTTON_ID, event.gui.width / 2 + 2, i1 + 2*24, I18n.format("Replay Center", new Object[0])); + rc.width = rc.width/2 - 2; + rc.enabled = true; + event.buttonList.add(rc); } else if(event.gui instanceof GuiOptions) { event.buttonList.add(new GuiButton(9001, event.gui.width / 2 - 155, event.gui.height / 6 + 48 - 6 - 24, 310, 20, "Replay Mod Settings...")); } @@ -99,10 +105,14 @@ public class GuiEventHandler { @SubscribeEvent public void onButton(ActionPerformedEvent event) { - if(!AuthenticationHandler.isAuthenticated()) return; - if(event.gui instanceof GuiMainMenu && event.button.id == REPLAY_MANAGER_ID) { - mc.displayGuiScreen(new GuiReplayManager()); - } else if(event.gui instanceof GuiOptions && event.button.id == REPLAY_OPTIONS_ID) { + if(!event.button.enabled) return; + if(event.gui instanceof GuiMainMenu) { + if(event.button.id == GuiConstants.REPLAY_MANAGER_BUTTON_ID) { + mc.displayGuiScreen(new GuiReplayManager()); + } else if(event.button.id == GuiConstants.REPLAY_CENTER_BUTTON_ID) { + mc.displayGuiScreen(new GuiLoginPrompt(event.gui, new GuiReplayCenter())); + } + } else if(event.gui instanceof GuiOptions && event.button.id == GuiConstants.REPLAY_OPTIONS_BUTTON_ID) { mc.displayGuiScreen(new GuiReplaySettings(event.gui)); } @@ -111,8 +121,6 @@ public class GuiEventHandler { Thread t = new Thread(new Runnable() { @Override public void run() { - //mc.displayGuiScreen(new GuiReplaySaving(new GuiMainMenu())); - ReplayHandler.setSpeed(1f); ReplayHandler.endReplay(); diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/GuiConstants.java b/src/main/java/eu/crushedpixel/replaymod/gui/GuiConstants.java new file mode 100644 index 00000000..97e64761 --- /dev/null +++ b/src/main/java/eu/crushedpixel/replaymod/gui/GuiConstants.java @@ -0,0 +1,15 @@ +package eu.crushedpixel.replaymod.gui; + +public class GuiConstants { + + public static final int REPLAY_OPTIONS_BUTTON_ID = 8000; + + public static final int REPLAY_MANAGER_BUTTON_ID = 9001; + + public static final int REPLAY_CENTER_BUTTON_ID = 1000; + public static final int REPLAY_CENTER_LOGIN_TEXT_ID = 1001; + public static final int REPLAY_CENTER_PASSWORD_TEXT_ID = 1002; + + public static final int LOGIN_OKAY_BUTTON = 1100; + public static final int LOGIN_CANCEL_BUTTON = 1101; +} diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/PasswordTextField.java b/src/main/java/eu/crushedpixel/replaymod/gui/PasswordTextField.java new file mode 100644 index 00000000..7c0b83a2 --- /dev/null +++ b/src/main/java/eu/crushedpixel/replaymod/gui/PasswordTextField.java @@ -0,0 +1,46 @@ +package eu.crushedpixel.replaymod.gui; + +import java.lang.reflect.Field; + +import eu.crushedpixel.replaymod.reflection.MCPNames; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiTextField; + +public class PasswordTextField extends GuiTextField { + + private static Field text; + + static { + try { + text = GuiTextField.class.getDeclaredField(MCPNames.field("field_146216_j")); + text.setAccessible(true); + } catch(Exception e) { + e.printStackTrace(); + } + } + + public PasswordTextField(int p_i45542_1_, FontRenderer p_i45542_2_, + int p_i45542_3_, int p_i45542_4_, int p_i45542_5_, int p_i45542_6_) { + super(p_i45542_1_, p_i45542_2_, p_i45542_3_, p_i45542_4_, p_i45542_5_, + p_i45542_6_); + } + + @Override + public void drawTextBox() { + String prev = getText(); + + String pw = ""; + for(int i=0; i 0 && password.getText().length() > 0; + } +} diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java b/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java new file mode 100644 index 00000000..a835393c --- /dev/null +++ b/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java @@ -0,0 +1,7 @@ +package eu.crushedpixel.replaymod.gui.online; + +import net.minecraft.client.gui.GuiScreen; + +public class GuiReplayCenter extends GuiScreen { + +} diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/replaymanager/GuiReplayManager.java b/src/main/java/eu/crushedpixel/replaymod/gui/replaymanager/GuiReplayManager.java index a9a20629..172fc55e 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/replaymanager/GuiReplayManager.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/replaymanager/GuiReplayManager.java @@ -89,15 +89,7 @@ public class GuiReplayManager extends GuiScreen implements GuiYesNoCallback { BufferedImage bimg = ImageIO.read(is); if(bimg != null) { img = ImageUtils.scaleImage(bimg, new Dimension(1280, 720)); - } - - /* Old way of reading thumbnail - else { - is = archive.getInputStream(image); - bimg = ImageIO.read(is); - img = ImageUtils.scaleImage(bimg, new Dimension(1280, 720)); } - */ } InputStream is = archive.getInputStream(metadata); @@ -136,8 +128,8 @@ public class GuiReplayManager extends GuiScreen implements GuiYesNoCallback { } - public void initGui() - { + @Override + public void initGui() { replayGuiList = new GuiReplayListExtended(this, this.mc, this.width, this.height, 32, this.height - 64, 36); Keyboard.enableRepeatEvents(true); this.buttonList.clear(); diff --git a/src/main/java/eu/crushedpixel/replaymod/authentication/AuthenticationHandler.java b/src/main/java/eu/crushedpixel/replaymod/online/authentication/AuthenticationHandler.java similarity index 56% rename from src/main/java/eu/crushedpixel/replaymod/authentication/AuthenticationHandler.java rename to src/main/java/eu/crushedpixel/replaymod/online/authentication/AuthenticationHandler.java index 7ab7b216..3bd9cb7b 100644 --- a/src/main/java/eu/crushedpixel/replaymod/authentication/AuthenticationHandler.java +++ b/src/main/java/eu/crushedpixel/replaymod/online/authentication/AuthenticationHandler.java @@ -1,23 +1,37 @@ -package eu.crushedpixel.replaymod.authentication; +package eu.crushedpixel.replaymod.online.authentication; +import java.io.IOException; import java.util.ArrayList; import java.util.List; import net.minecraft.client.Minecraft; +import eu.crushedpixel.replaymod.ReplayMod; +import eu.crushedpixel.replaymod.api.client.ApiException; import eu.crushedpixel.replaymod.reflection.MCPNames; public class AuthenticationHandler { + public static final int SUCCESS = 1; + public static final int INVALID = 2; + public static final int NO_CONNECTION = 3; + private static Minecraft mc = Minecraft.getMinecraft(); - private static boolean auth = false; + private static String authkey = null; public static boolean isAuthenticated() { - return auth; + return authkey != null; } - public static void authenticate() { - auth = isPremiumUsername(Minecraft.getMinecraft().getSession().getUsername()); + public static int authenticate(String username, String password) { + try { + authkey = ReplayMod.apiClient.getLogin(username, password).getAuthkey(); + return SUCCESS; + } catch(ApiException e) { + return INVALID; + } catch(Exception e) { + return NO_CONNECTION; + } } private static final List PREMIUM_USERS = new ArrayList() { diff --git a/src/main/java/eu/crushedpixel/replaymod/recording/DataListener.java b/src/main/java/eu/crushedpixel/replaymod/recording/DataListener.java index 58c8c921..19015835 100644 --- a/src/main/java/eu/crushedpixel/replaymod/recording/DataListener.java +++ b/src/main/java/eu/crushedpixel/replaymod/recording/DataListener.java @@ -20,6 +20,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ActiveRenderInfo; import com.google.gson.Gson; @@ -146,8 +147,13 @@ public abstract class DataListener extends ChannelInboundHandlerAdapter { try { GuiReplaySaving.replaySaving = true; - + String mcversion = Minecraft.getMinecraft().getVersion(); + String[] split = mcversion.split("-"); + if(split.length > 0) { + mcversion = split[0]; + } + String[] pl = players.toArray(new String[players.size()]); ReplayMetaData metaData = new ReplayMetaData(singleplayer, worldName, (int) lastSentPacket, startTime, pl, mcversion);