Skip to content

Commit d5b5188

Browse files
committed
Cleaned up TASmodClient
- Moved each registration in it's own method - Moved /restartandplay functionality to PlaybackController - [MCTCommon] Added functionality to AbstractRegistry - Moved Keybind registering to TASmodKeybinds - Added TASmodRegistry
1 parent 077a6e7 commit d5b5188

File tree

9 files changed

+274
-170
lines changed

9 files changed

+274
-170
lines changed

src/main/java/com/minecrafttas/mctcommon/KeybindManager.java

+9-10
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ public class KeybindManager implements EventClientGameLoop {
2323

2424
public static class Keybind {
2525

26-
private KeyBinding keyBinding;
27-
private String category;
28-
private Runnable onKeyDown;
29-
private IsKeyDownFunc isKeyDownFunc;
26+
public final KeyBinding vanillaKeyBinding;
27+
private final String category;
28+
private final Runnable onKeyDown;
29+
private final IsKeyDownFunc isKeyDownFunc;
3030

3131
/**
3232
* Initialize keybind
@@ -49,7 +49,7 @@ public Keybind(String name, String category, int defaultKey, Runnable onKeyDown)
4949
* @param onKeyDown Will be run when the keybind is pressed
5050
*/
5151
public Keybind(String name, String category, int defaultKey, Runnable onKeyDown, IsKeyDownFunc func) {
52-
this.keyBinding = new KeyBinding(name, defaultKey, category);
52+
this.vanillaKeyBinding = new KeyBinding(name, defaultKey, category);
5353
this.category = category;
5454
this.onKeyDown = onKeyDown;
5555
this.isKeyDownFunc = func;
@@ -77,7 +77,7 @@ public KeybindManager(IsKeyDownFunc defaultFunction) {
7777
public void onRunClientGameLoop(Minecraft mc) {
7878
for (Keybind keybind : this.keybindings){
7979
IsKeyDownFunc keyDown = keybind.isKeyDownFunc != null ? keybind.isKeyDownFunc : defaultFunction;
80-
if(keyDown.isKeyDown(keybind.keyBinding)){
80+
if(keyDown.isKeyDown(keybind.vanillaKeyBinding)){
8181
keybind.onKeyDown.run();
8282
}
8383
}
@@ -89,9 +89,9 @@ public void onRunClientGameLoop(Minecraft mc) {
8989
*
9090
* @param keybind Keybind to register
9191
*/
92-
public KeyBinding registerKeybind(Keybind keybind) {
92+
public void registerKeybind(Keybind keybind) {
9393
this.keybindings.add(keybind);
94-
KeyBinding keyBinding = keybind.keyBinding;
94+
KeyBinding keyBinding = keybind.vanillaKeyBinding;
9595

9696
// add category
9797
GameSettings options = Minecraft.getMinecraft().gameSettings;
@@ -100,9 +100,8 @@ public KeyBinding registerKeybind(Keybind keybind) {
100100

101101
// add keybinding
102102
options.keyBindings = ArrayUtils.add(options.keyBindings, keyBinding);
103-
return keyBinding;
104103
}
105-
104+
106105
@FunctionalInterface
107106
public static interface IsKeyDownFunc {
108107

Original file line numberDiff line numberDiff line change
@@ -1,5 +1,38 @@
11
package com.minecrafttas.mctcommon.registry;
22

3-
public class AbstractRegistry {
4-
3+
import java.util.Map;
4+
5+
public abstract class AbstractRegistry<K, V> {
6+
public final Map<K, V> REGISTRY;
7+
8+
public AbstractRegistry(Map<K, V> map) {
9+
REGISTRY = map;
10+
}
11+
12+
public abstract void register(V registryObject);
13+
14+
@SafeVarargs
15+
public final void register(V... registryObjects) {
16+
for (V registryObject : registryObjects) {
17+
this.register(registryObject);
18+
}
19+
}
20+
21+
public abstract void unregister(V registryObject);
22+
23+
@SafeVarargs
24+
public final void unregister(V... registryObjects) {
25+
for (V registryObject : registryObjects) {
26+
this.unregister(registryObject);
27+
}
28+
}
29+
30+
protected boolean containsClass(V newExtension) {
31+
for (V extension : REGISTRY.values()) {
32+
if (extension.getClass().equals(newExtension.getClass())) {
33+
return true;
34+
}
35+
}
36+
return false;
37+
}
538
}

src/main/java/com/minecrafttas/tasmod/TASmodClient.java

+82-109
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,13 @@
44

55
import java.io.File;
66
import java.io.IOException;
7-
import java.util.ArrayList;
8-
import java.util.List;
7+
import java.util.Arrays;
98

109
import org.apache.logging.log4j.Level;
11-
import org.lwjgl.input.Keyboard;
1210

1311
import com.minecrafttas.mctcommon.Configuration;
1412
import com.minecrafttas.mctcommon.Configuration.ConfigOptions;
1513
import com.minecrafttas.mctcommon.KeybindManager;
16-
import com.minecrafttas.mctcommon.KeybindManager.Keybind;
1714
import com.minecrafttas.mctcommon.LanguageManager;
1815
import com.minecrafttas.mctcommon.events.EventClient.EventClientInit;
1916
import com.minecrafttas.mctcommon.events.EventClient.EventOpenGui;
@@ -24,11 +21,9 @@
2421
import com.minecrafttas.mctcommon.server.Server;
2522
import com.minecrafttas.tasmod.gui.InfoHud;
2623
import com.minecrafttas.tasmod.handlers.LoadingScreenHandler;
27-
import com.minecrafttas.tasmod.networking.TASmodBufferBuilder;
2824
import com.minecrafttas.tasmod.networking.TASmodPackets;
2925
import com.minecrafttas.tasmod.playback.PlaybackControllerClient;
3026
import com.minecrafttas.tasmod.playback.PlaybackControllerClient.TASstate;
31-
import com.minecrafttas.tasmod.playback.metadata.PlaybackMetadataRegistry;
3227
import com.minecrafttas.tasmod.playback.metadata.integrated.CreditsMetadataExtension;
3328
import com.minecrafttas.tasmod.playback.metadata.integrated.StartpositionMetadataExtension;
3429
import com.minecrafttas.tasmod.playback.tasfile.PlaybackSerialiser;
@@ -38,6 +33,8 @@
3833
import com.minecrafttas.tasmod.util.LoggerMarkers;
3934
import com.minecrafttas.tasmod.util.Scheduler;
4035
import com.minecrafttas.tasmod.util.ShieldDownloader;
36+
import com.minecrafttas.tasmod.util.TASmodKeybinds;
37+
import com.minecrafttas.tasmod.util.TASmodRegistry;
4138
import com.minecrafttas.tasmod.virtual.VirtualInput;
4239
import com.minecrafttas.tasmod.virtual.VirtualKeybindings;
4340

@@ -48,11 +45,7 @@
4845
import net.minecraft.client.gui.GuiMainMenu;
4946
import net.minecraft.client.gui.GuiScreen;
5047
import net.minecraft.client.multiplayer.ServerData;
51-
import net.minecraft.client.settings.KeyBinding;
5248
import net.minecraft.server.MinecraftServer;
53-
import net.minecraft.util.text.ChatType;
54-
import net.minecraft.util.text.TextComponentString;
55-
import net.minecraft.util.text.TextFormatting;
5649

5750
public class TASmodClient implements ClientModInitializer, EventClientInit, EventPlayerJoinedClientSide, EventOpenGui{
5851

@@ -115,25 +108,11 @@ public static void createSavestatesDir() {
115108
@Override
116109
public void onInitializeClient() {
117110

118-
// Load config
119-
Minecraft mc = Minecraft.getMinecraft();
120-
121-
File configDir = new File(mc.mcDataDir, "config");
122-
if(!configDir.exists()) {
123-
configDir.mkdir();
124-
}
125-
config = new Configuration("TASmod configuration", new File(configDir, "tasmod.cfg"));
126-
127111
LanguageManager.registerMod("tasmod");
128112

129-
// Execute /restartandplay. Load the file to start from the config. If it exists load the playback file on start.
130-
String fileOnStart = config.get(ConfigOptions.FileToOpen);
131-
if (fileOnStart.isEmpty()) {
132-
fileOnStart = null;
133-
} else {
134-
config.reset(ConfigOptions.FileToOpen);
135-
}
136-
virtual=new VirtualInput(LOGGER); //TODO Move fileOnStart to PlaybackController
113+
loadConfig(Minecraft.getMinecraft());
114+
115+
virtual=new VirtualInput(LOGGER);
137116

138117
// Initialize InfoHud
139118
hud = new InfoHud();
@@ -146,7 +125,29 @@ public void onInitializeClient() {
146125
// Initialize keybind manager
147126
keybindManager = new KeybindManager(VirtualKeybindings::isKeyDownExceptTextfield);
148127

149-
// Register event listeners
128+
registerEventListeners();
129+
130+
registerNetworkPacketHandlers();
131+
132+
// Starting local server instance
133+
try {
134+
TASmod.server = new Server(TASmod.networkingport-1, TASmodPackets.values());
135+
} catch (Exception e) {
136+
LOGGER.error("Unable to launch TASmod server: {}", e.getMessage());
137+
}
138+
139+
}
140+
141+
private void registerNetworkPacketHandlers() {
142+
// Register packet handlers
143+
LOGGER.info(LoggerMarkers.Networking, "Registering network handlers on client");
144+
PacketHandlerRegistry.register(controller);
145+
PacketHandlerRegistry.register(ticksyncClient);
146+
PacketHandlerRegistry.register(tickratechanger);
147+
PacketHandlerRegistry.register(savestateHandlerClient);
148+
}
149+
150+
private void registerEventListeners() {
150151
EventListenerRegistry.register(this);
151152
// EventListenerRegistry.register(virtual); TODO Remove if unnecessary
152153
EventListenerRegistry.register(hud);
@@ -161,64 +162,14 @@ public void onInitializeClient() {
161162
return gui;
162163
}));
163164
EventListenerRegistry.register(controller);
164-
PlaybackMetadataRegistry.register(creditsMetadataExtension);
165165
EventListenerRegistry.register(creditsMetadataExtension);
166-
167-
PlaybackMetadataRegistry.register(startpositionMetadataExtension);
168166
EventListenerRegistry.register(startpositionMetadataExtension);
169-
170-
// Register packet handlers
171-
LOGGER.info(LoggerMarkers.Networking, "Registering network handlers on client");
172-
PacketHandlerRegistry.register(controller);
173-
PacketHandlerRegistry.register(ticksyncClient);
174-
PacketHandlerRegistry.register(tickratechanger);
175-
PacketHandlerRegistry.register(savestateHandlerClient);
176-
177-
// Starting local server instance
178-
try {
179-
TASmod.server = new Server(TASmod.networkingport-1, TASmodPackets.values());
180-
} catch (Exception e) {
181-
LOGGER.error("Unable to launch TASmod server: {}", e.getMessage());
182-
}
183-
184167
}
185168

186169
@Override
187170
public void onClientInit(Minecraft mc) {
188-
// initialize keybindings
189-
List<KeyBinding> blockedKeybindings = new ArrayList<>();
190-
blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Tickrate 0 Key", "TASmod", Keyboard.KEY_F8, () -> TASmodClient.tickratechanger.togglePause(), VirtualKeybindings::isKeyDown)));
191-
blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Advance Tick", "TASmod", Keyboard.KEY_F9, () -> TASmodClient.tickratechanger.advanceTick(), VirtualKeybindings::isKeyDown)));
192-
blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Recording/Playback Stop", "TASmod", Keyboard.KEY_F10, () -> TASmodClient.controller.setTASState(TASstate.NONE), VirtualKeybindings::isKeyDown)));
193-
blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Create Savestate", "TASmod", Keyboard.KEY_J, () -> {
194-
Minecraft.getMinecraft().ingameGUI.addChatMessage(ChatType.CHAT, new TextComponentString("Savestates might not work correctly at the moment... rewriting a lot of core features, which might break this..."));
195-
try {
196-
TASmodClient.client.send(new TASmodBufferBuilder(TASmodPackets.SAVESTATE_SAVE).writeInt(-1));
197-
} catch (Exception e) {
198-
e.printStackTrace();
199-
}
200-
})));
201-
blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Load Latest Savestate", "TASmod", Keyboard.KEY_K, () -> {
202-
Minecraft.getMinecraft().ingameGUI.addChatMessage(ChatType.CHAT, new TextComponentString(TextFormatting.RED+"Savestates might not work correctly at the moment... rewriting a lot of core features, which might break this..."));
203-
try {
204-
TASmodClient.client.send(new TASmodBufferBuilder(TASmodPackets.SAVESTATE_LOAD).writeInt(-1));
205-
} catch (Exception e) {
206-
e.printStackTrace();
207-
}
208-
})));
209-
blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Open InfoGui Editor", "TASmod", Keyboard.KEY_F6, () -> Minecraft.getMinecraft().displayGuiScreen(TASmodClient.hud))));
210-
blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Various Testing", "TASmod", Keyboard.KEY_F12, () -> {
211-
controller.setTASState(TASstate.RECORDING);
212-
}, VirtualKeybindings::isKeyDown)));
213-
blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Various Testing2", "TASmod", Keyboard.KEY_F7, () -> {
214-
// try {
215-
// TASmodClient.client = new Client("localhost", TASmod.networkingport-1, TASmodPackets.values(), mc.getSession().getProfile().getName(), true);
216-
// } catch (Exception e) {
217-
// e.printStackTrace();
218-
// }
219-
controller.setTASState(TASstate.PLAYBACK);
220-
}, VirtualKeybindings::isKeyDown)));
221-
blockedKeybindings.forEach(VirtualKeybindings::registerBlockedKeyBinding);
171+
registerKeybindings(mc);
172+
registerPlaybackMetadata(mc);
222173

223174
createTASDir();
224175
createSavestatesDir();
@@ -255,7 +206,7 @@ public void onPlayerJoinedClientSide(EntityPlayerSP player) {
255206
}
256207

257208

258-
if(!(ip+":"+port).equals(connectedIP)) {
209+
if(!(ip+":"+port).equals(connectedIP)) { // TODO Clean this up. Make TASmodNetworkHandler out of this... Maybe with Permission system?
259210
try {
260211
LOGGER.info("Closing client connection: {}", client.getRemote());
261212
client.disconnect();
@@ -280,34 +231,7 @@ public void onPlayerJoinedClientSide(EntityPlayerSP player) {
280231
@Override
281232
public GuiScreen onOpenGui(GuiScreen gui) {
282233
if (gui instanceof GuiMainMenu) {
283-
if (client == null) {
284-
Minecraft mc = Minecraft.getMinecraft();
285-
286-
String IP = "localhost";
287-
int PORT = TASmod.networkingport - 1;
288-
289-
// Get the connection on startup from config
290-
String configAddress = config.get(ConfigOptions.ServerConnection);
291-
if(configAddress != null && !configAddress.isEmpty()) {
292-
String[] ipSplit = configAddress.split(":");
293-
IP = ipSplit[0];
294-
try {
295-
PORT = Integer.parseInt(ipSplit[1]);
296-
} catch (Exception e) {
297-
LOGGER.catching(Level.ERROR, e);
298-
IP = "localhost";
299-
PORT = TASmod.networkingport - 1;
300-
}
301-
}
302-
303-
try {
304-
// connect to server and authenticate
305-
client = new Client(IP, PORT, TASmodPackets.values(), mc.getSession().getUsername(), true);
306-
} catch (Exception e) {
307-
LOGGER.error("Unable to connect TASmod client: {}", e);
308-
}
309-
ticksyncClient.setEnabled(true);
310-
}
234+
initializeCustomPacketHandler();
311235
} else if (gui instanceof GuiControls) {
312236
TASmodClient.controller.setTASState(TASstate.NONE); // Set the TASState to nothing to avoid collisions
313237
if (TASmodClient.tickratechanger.ticksPerSecond == 0) {
@@ -322,4 +246,53 @@ public GuiScreen onOpenGui(GuiScreen gui) {
322246
}
323247
return gui;
324248
}
249+
250+
private void initializeCustomPacketHandler() {
251+
if (client == null) {
252+
Minecraft mc = Minecraft.getMinecraft();
253+
254+
String IP = "localhost";
255+
int PORT = TASmod.networkingport - 1;
256+
257+
// Get the connection on startup from config
258+
String configAddress = config.get(ConfigOptions.ServerConnection);
259+
if(configAddress != null && !configAddress.isEmpty()) {
260+
String[] ipSplit = configAddress.split(":");
261+
IP = ipSplit[0];
262+
try {
263+
PORT = Integer.parseInt(ipSplit[1]);
264+
} catch (Exception e) {
265+
LOGGER.catching(Level.ERROR, e);
266+
IP = "localhost";
267+
PORT = TASmod.networkingport - 1;
268+
}
269+
}
270+
271+
try {
272+
// connect to server and authenticate
273+
client = new Client(IP, PORT, TASmodPackets.values(), mc.getSession().getUsername(), true);
274+
} catch (Exception e) {
275+
LOGGER.error("Unable to connect TASmod client: {}", e);
276+
}
277+
ticksyncClient.setEnabled(true);
278+
}
279+
}
280+
281+
private void registerKeybindings(Minecraft mc) {
282+
Arrays.stream(TASmodKeybinds.valuesKeybind()).forEach(keybindManager::registerKeybind);
283+
Arrays.stream(TASmodKeybinds.valuesVanillaKeybind()).forEach(VirtualKeybindings::registerBlockedKeyBinding);
284+
}
285+
286+
private void registerPlaybackMetadata(Minecraft mc) {
287+
TASmodRegistry.PLAYBACK_METADATA.register(creditsMetadataExtension);
288+
TASmodRegistry.PLAYBACK_METADATA.register(startpositionMetadataExtension);
289+
}
290+
291+
private void loadConfig(Minecraft mc) {
292+
File configDir = new File(mc.mcDataDir, "config");
293+
if(!configDir.exists()) {
294+
configDir.mkdir();
295+
}
296+
config = new Configuration("TASmod configuration", new File(configDir, "tasmod.cfg"));
297+
}
325298
}

src/main/java/com/minecrafttas/tasmod/TASmodRegistry.java

-5
This file was deleted.

0 commit comments

Comments
 (0)