Skip to content
This repository has been archived by the owner on Feb 1, 2022. It is now read-only.

Commit

Permalink
Bug fixes, new configs and more!
Browse files Browse the repository at this point in the history
Recmod 1.4.2
============

- Added localization
- Added testing tab (not used yet)
- Replaced RAW config with an FML config
- Added RAW config to FML config convertor
- Removed the ability for changing the indicator sheet (can still modify
it with texture packs), 2x
indicators are now used on fancy graphics while the 1x are used on fast
- Added a general pane which has an option to maintain the state
throughout the session
- Optimised a thingy
- Moved the entirety of rec commands to be processed on the client side
- Made the client-side table be cleared on logout
- The server no longer has control over player's own state
  • Loading branch information
fuj1n committed Oct 10, 2014
1 parent 3383c7c commit 43c36c1
Show file tree
Hide file tree
Showing 13 changed files with 263 additions and 139 deletions.
Binary file added pub_build/RecStatusMod-v1.4.2-1.7.10.jar
Binary file not shown.
35 changes: 35 additions & 0 deletions resources/assets/recmod/lang/en_US.lang
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
recmod.interface.name=RecMod -

recmod.gui.back=<
recmod.gui.close=X

recmod.gui.enabledcode=a
recmod.gui.disabledcode=c
recmod.gui.highlightcode=e

recmod.gui.enabled=Yes
recmod.gui.disabled=No
recmod.gui.disabled2=DISABLED

recmod.gui.pane.title.main=Main
recmod.gui.pane.title.general=General
recmod.gui.pane.title.interface=Interface
recmod.gui.pane.title.keyboard=Keyboard
recmod.gui.pane.title.integration=Integration - NYI
recmod.gui.pane.title.testing=Testing

recmod.gui.pane.main.recording=Recording
recmod.gui.pane.main.streaming=Streaming

recmod.gui.pane.nyitext1=This feature is still not
recmod.gui.pane.nyitext2=implemented, trust me, it'll be
recmod.gui.pane.nyitext3=awesome!

recmod.gui.pane.general.kstate=Keep State: $s

recmod.gui.pane.interface.bobber=Bobber: $s
recmod.gui.pane.interface.never=Never: $s

recmod.gui.pane.keyboard.enable=Keyboard Enabled: $s
recmod.gui.pane.keyboard.record=Record Key: $s
recmod.gui.pane.keyboard.stream=Stream Key: $s
2 changes: 1 addition & 1 deletion resources/mcmod.info
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"modid": "fuj1n.recmod",
"name": "Recording Status Mod",
"description": "Record/Stream status in the players list, /rec <r/s> to toggle",
"version": "v1.4",
"version": "v1.4.2",
"mcversion": "1.7.10",
"url": "",
"updateUrl": "",
Expand Down
122 changes: 52 additions & 70 deletions src/fuj1n/recmod/RecMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,17 @@
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.relauncher.Side;
import fuj1n.recmod.client.event.*;
import fuj1n.recmod.client.keybind.KeyHandlerRecMod;
import fuj1n.recmod.command.CommandRec;
import fuj1n.recmod.legacy.OldConfigConverter;
import fuj1n.recmod.network.*;
import fuj1n.recmod.network.packet.*;
import java.io.*;
import java.io.File;
import java.util.HashMap;
import net.minecraft.command.ServerCommandManager;
import net.minecraft.entity.player.*;
import net.minecraft.server.MinecraftServer;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.config.Configuration;

@Mod(name = "Recording Status Mod", version = "v1.4", modid = "fuj1n.recmod", acceptableRemoteVersions = "*", canBeDeactivated = false)
public class RecMod {
Expand All @@ -30,31 +31,47 @@ public class RecMod {
private static HashMap<String, Boolean> streamers = new HashMap<String, Boolean>();

public boolean showSelf = true;
public boolean keepState = false;
public boolean recState = false, strState = false;

//Keyboard stuffs
// Keyboard stuffs
public boolean enableKeys = false;
public int keyRec = 44;
public int keyStr = 45;

public String sheetLocation = "recmod:textures/sheets/indicators.png";

public boolean showSelfDef = false;

public File configFile;
public Configuration config;

public boolean mapsDirty = false;

@EventHandler
public void preinit(FMLPreInitializationEvent event) {
MinecraftForge.EVENT_BUS.register(new PlayerTracker());
FMLCommonHandler.instance().bus().register(new PlayerTracker());

NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler());

configFile = new File(event.getModConfigurationDirectory(), "recmod.ui");
OldConfigConverter.configFile = new File(event.getModConfigurationDirectory(), "recmod.ui");

if (event.getSide() == Side.CLIENT) {
configFile = event.getSuggestedConfigurationFile();

if (OldConfigConverter.configFile.exists() && !configFile.exists()) {
OldConfigConverter.convert();
OldConfigConverter.configFile.delete();
} else {
if (OldConfigConverter.configFile.exists()) {
OldConfigConverter.configFile.delete();
}

instanciateConfig();
}

readFromFile();
MinecraftForge.EVENT_BUS.register(new EventRenderGame());
FMLCommonHandler.instance().bus().register(new EventClientEntityLogin());
FMLCommonHandler.instance().bus().register(new KeyHandlerRecMod());
FMLCommonHandler.instance().bus().register(new EventClientTick());
}
}

Expand All @@ -63,10 +80,11 @@ public void init(FMLInitializationEvent event) {
packetPipeline.initialise();

PacketPipeline pp = packetPipeline;
//Packet Registration
// Packet Registration
pp.registerPacket(PacketUpdatePlayerStatus.class);
pp.registerPacket(PacketRemovePlayer.class);
pp.registerPacket(PacketClientCommand.class);
pp.registerPacket(PacketEndOfInitialTransmission.class);
}

@EventHandler
Expand All @@ -80,8 +98,7 @@ public void serverStart(FMLServerStartedEvent event) {
return;
}

recorders = new HashMap<String, Boolean>();
streamers = new HashMap<String, Boolean>();
clearMaps();

ServerCommandManager handler = (ServerCommandManager) MinecraftServer.getServer().getCommandManager();
handler.registerCommand(new CommandRec());
Expand Down Expand Up @@ -117,81 +134,41 @@ public void onUIStateChanged() {
writeToFile();
}

public void onSheetChanged() {
writeToFile();
public void instanciateConfig() {
config = new Configuration(configFile, true);
}

public void readFromFile() {
if (!configFile.exists()) {
writeToFile();

return;
}
config.load();

try {
BufferedReader b = new BufferedReader(new FileReader(configFile));
String line1 = b.readLine();
String line2 = b.readLine();
String line3 = b.readLine();
String line4 = b.readLine();
String line5 = b.readLine();

showSelfDef = convertToBoolean(line1, true);
sheetLocation = line2 != null && !line2.equals("") ? line2 : sheetLocation;
enableKeys = convertToBoolean(line3, false);
keyRec = convertToInteger(line4, 44);
keyStr = convertToInteger(line5, 45);

b.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
//Don't want the massive stacktrace if the file read fails.
//e.printStackTrace();
}
}
showSelfDef = config.getBoolean("Show bobber", "Interface", showSelfDef, "Whether the bobber will be made visible if the mod determines that you are playing multiplayer.");
enableKeys = config.getBoolean("Enable keyboard", "Keyboard", enableKeys, "Whether the keyboard shortcuts are enabled.");
keyRec = config.getInt("Record Key", "Keyboard", keyRec, -1338, 250, "The key that will toggle recording.");
keyStr = config.getInt("Stream Key", "Keyboard", keyStr, -1338, 250, "The key that will toggle streaming.");
keepState = config.getBoolean("Keep state", "General", keepState, "Whether the recording state is kept throughout the gaming session.");

public int convertToInteger(String s, int def) {
try {
return Integer.parseInt(s);
} catch (Exception e) {
if (config.hasChanged()) {
config.save();
}
return def;
}

public boolean convertToBoolean(String s, boolean def) {
try {
return Boolean.parseBoolean(s);
} catch (Exception e) {
}
return def;
}

public void writeToFile() {
// Delete the config to force update
configFile.delete();
try {
configFile.createNewFile();
BufferedWriter b = new BufferedWriter(new FileWriter(configFile));
b.write(Boolean.toString(showSelfDef));
b.newLine();
b.write(sheetLocation);
b.newLine();
b.write(Boolean.toString(enableKeys));
b.newLine();
b.write(Integer.toString(keyRec));
b.newLine();
b.write(Integer.toString(keyStr));
b.close();
} catch (IOException e) {
e.printStackTrace();
}

readFromFile();
}

public void removeUnneededData(String username) {
recorders.remove(username);
streamers.remove(username);
}

public void clearMaps() {
recorders.clear();
streamers.clear();
}

public void sendDataToPlayer(EntityPlayer player) {
for (int i = 0; i < recorders.size(); i++) {
sendPacket(player, recorders.keySet().toArray()[i].toString(), 0, Boolean.parseBoolean(recorders.values().toArray()[i].toString()));
Expand All @@ -200,11 +177,16 @@ public void sendDataToPlayer(EntityPlayer player) {
for (int i = 0; i < streamers.size(); i++) {
sendPacket(player, streamers.keySet().toArray()[i].toString(), 1, Boolean.parseBoolean(streamers.values().toArray()[i].toString()));
}

if (player instanceof EntityPlayerMP) {
PacketEndOfInitialTransmission pckt = new PacketEndOfInitialTransmission();
packetPipeline.sendTo(pckt, (EntityPlayerMP) player);
}
}

public void sendPacket(EntityPlayer target, String player, int type, boolean flag) {
PacketUpdatePlayerStatus pckt = new PacketUpdatePlayerStatus(player, type, flag);
if (target instanceof EntityPlayerMP) {
PacketUpdatePlayerStatus pckt = new PacketUpdatePlayerStatus(player, type, flag);
packetPipeline.sendTo(pckt, (EntityPlayerMP) target);
} else {
}
Expand Down
4 changes: 3 additions & 1 deletion src/fuj1n/recmod/client/event/EventClientEntityLogin.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ public class EventClientEntityLogin {

@SubscribeEvent
public void onEntityLogin(PlayerLoggedInEvent event) {
Minecraft mc = Minecraft.getMinecraft().getMinecraft();
Minecraft mc = Minecraft.getMinecraft();
RecMod.instance.showSelf = !mc.isSingleplayer() && !RecMod.instance.showSelfDef;

RecMod.instance.mapsDirty = true;
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fuj1n.recmod.client.keybind;
package fuj1n.recmod.client.event;

import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent;
Expand All @@ -9,7 +9,7 @@
import net.minecraft.client.Minecraft;
import org.lwjgl.input.Keyboard;

public class KeyHandlerRecMod {
public class EventClientTick {

boolean recDown = false;
boolean strDown = false;
Expand All @@ -18,12 +18,24 @@ public class KeyHandlerRecMod {

@SubscribeEvent
public void onTick(ClientTickEvent event) {
if (event.type == Type.CLIENT && event.phase == Phase.END && mc.theWorld == null && mc.thePlayer == null && RecMod.instance.mapsDirty) {

if (RecMod.instance.keepState) {
String player = mc.getSession().getUsername();
RecMod.instance.recState = RecMod.instance.isPlayerRecording(player);
RecMod.instance.strState = RecMod.instance.isPlayerStreaming(player);
}

RecMod.instance.clearMaps();

RecMod.instance.mapsDirty = false;
}

if (!RecMod.instance.enableKeys) {
return;
}
if (event.type == Type.CLIENT && event.phase == Phase.START && mc.theWorld != null && mc.currentScreen == null) {
keyTick();
keyTick();
}
}

Expand Down
11 changes: 4 additions & 7 deletions src/fuj1n/recmod/client/event/EventRenderGame.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,17 @@

public class EventRenderGame extends Gui {

private String sheetLocation = RecMod.instance.sheetLocation;
private ResourceLocation indicators = new ResourceLocation(sheetLocation);
private ResourceLocation indicatorsHigh = new ResourceLocation("recmod:textures/sheets/indicatorsx2.png");
private ResourceLocation indicatorsLow = new ResourceLocation("recmod:textures/sheets/indicators.png");

@SubscribeEvent
public void onRenderGameOverlay(RenderGameOverlayEvent event) {
if (!sheetLocation.equals(RecMod.instance.sheetLocation)) {
sheetLocation = RecMod.instance.sheetLocation;
indicators = new ResourceLocation(sheetLocation);
}

if (event.type != RenderGameOverlayEvent.ElementType.ALL) {
return;
}
Minecraft mc = Minecraft.getMinecraft();
ResourceLocation indicators = mc.isFancyGraphicsEnabled() ? indicatorsHigh : indicatorsLow;

if (mc.gameSettings.keyBindPlayerList.getIsKeyPressed() && (!mc.isIntegratedServerRunning() || mc.thePlayer.sendQueue.playerInfoList.size() > 1 || mc.theWorld.getScoreboard().func_96539_a(0) != null)) {
mc.mcProfiler.startSection("playerList");
NetHandlerPlayClient nethandlerplayclient = mc.thePlayer.sendQueue;
Expand Down
Loading

0 comments on commit 43c36c1

Please sign in to comment.