Split mod into core, recording, replay, render[todo], paths[todo] and extras[wip] modules
Move everything to com.replaymod package Add KeyBindingRegistry and SettingsRegistry Recreate settings GUI with new GUI API and dynamically from SettingsRegistry Use ReplayFile from ReplayStudio ReplayHandler is now object oriented Add GuiOverlay, GuiSlider and GuiTexturedButton to GUI API Rewrite both overlays to use new GUI API Fix size capping in vertical and horizontal layout Allow CustomLayouts to have parents Fix tooltip rendering when close to screen border Allow changing of columns in GridLayout
This commit is contained in:
7
src/main/java/com/replaymod/extras/Extra.java
Normal file
7
src/main/java/com/replaymod/extras/Extra.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package com.replaymod.extras;
|
||||
|
||||
import com.replaymod.core.ReplayMod;
|
||||
|
||||
public interface Extra {
|
||||
void register(ReplayMod mod) throws Exception;
|
||||
}
|
||||
101
src/main/java/com/replaymod/extras/HotkeyButtons.java
Normal file
101
src/main/java/com/replaymod/extras/HotkeyButtons.java
Normal file
@@ -0,0 +1,101 @@
|
||||
package com.replaymod.extras;
|
||||
|
||||
import com.replaymod.core.ReplayMod;
|
||||
import com.replaymod.replay.events.ReplayOpenEvent;
|
||||
import com.replaymod.replay.gui.overlay.GuiReplayOverlay;
|
||||
import de.johni0702.minecraft.gui.container.GuiPanel;
|
||||
import de.johni0702.minecraft.gui.element.GuiButton;
|
||||
import de.johni0702.minecraft.gui.element.GuiElement;
|
||||
import de.johni0702.minecraft.gui.element.GuiLabel;
|
||||
import de.johni0702.minecraft.gui.element.GuiTexturedButton;
|
||||
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
||||
import de.johni0702.minecraft.gui.layout.GridLayout;
|
||||
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
||||
import de.johni0702.minecraft.gui.layout.LayoutData;
|
||||
import net.minecraft.client.settings.KeyBinding;
|
||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
public class HotkeyButtons implements Extra {
|
||||
private ReplayMod mod;
|
||||
|
||||
@Override
|
||||
public void register(ReplayMod mod) throws Exception {
|
||||
this.mod = mod;
|
||||
|
||||
FMLCommonHandler.instance().bus().register(this);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void postReplayOpen(ReplayOpenEvent.Post event) {
|
||||
GuiReplayOverlay overlay = event.getReplayHandler().getOverlay();
|
||||
new Gui(mod, overlay);
|
||||
}
|
||||
|
||||
public static final class Gui {
|
||||
private final GuiTexturedButton toggleButton;
|
||||
private final GridLayout panelLayout;
|
||||
private final GuiPanel panel;
|
||||
|
||||
private boolean open;
|
||||
|
||||
public Gui(ReplayMod mod, GuiReplayOverlay overlay) {
|
||||
toggleButton = new GuiTexturedButton(overlay).setSize(20, 20)
|
||||
.setTexture(ReplayMod.TEXTURE, ReplayMod.TEXTURE_SIZE).setTexturePosH(0, 0)
|
||||
.onClick(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
open = !open;
|
||||
}
|
||||
});
|
||||
|
||||
panel = new GuiPanel(overlay) {
|
||||
@Override
|
||||
public Collection<GuiElement> getChildren() {
|
||||
return open ? super.getChildren() : Collections.<GuiElement>emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<GuiElement, LayoutData> getElements() {
|
||||
return open ? super.getElements() : Collections.<GuiElement, LayoutData>emptyMap();
|
||||
}
|
||||
}.setLayout(panelLayout = new GridLayout().setSpacingX(5).setSpacingY(5).setColumns(1));
|
||||
|
||||
for (final KeyBinding keyBinding : mod.getKeyBindingRegistry().getKeyBindings().values()) {
|
||||
String keyName = "???";
|
||||
try {
|
||||
keyName = Keyboard.getKeyName(keyBinding.getKeyCode());
|
||||
} catch (ArrayIndexOutOfBoundsException e) {
|
||||
// Apparently windows likes to press strange keys, see https://www.replaymod.com/forum/thread/55
|
||||
}
|
||||
panel.addElements(null, new GuiPanel().setSize(150, 20).setLayout(new HorizontalLayout().setSpacing(2))
|
||||
.addElements(new HorizontalLayout.Data(0.5),
|
||||
new GuiButton().setSize(20, 20).setLabel(keyName).onClick(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
keyBinding.pressTime++;
|
||||
FMLCommonHandler.instance().fireKeyInput();
|
||||
}
|
||||
}),
|
||||
new GuiLabel().setI18nText(keyBinding.getKeyDescription())
|
||||
));
|
||||
}
|
||||
|
||||
overlay.setLayout(new CustomLayout<GuiReplayOverlay>(overlay.getLayout()) {
|
||||
@Override
|
||||
protected void layout(GuiReplayOverlay container, int width, int height) {
|
||||
panelLayout.setColumns((width - 10) / 105);
|
||||
size(panel, panelLayout.calcMinSize(container));
|
||||
|
||||
pos(toggleButton, 5, height - 25);
|
||||
pos(panel, 5, y(toggleButton) - 5 - height(panel));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
44
src/main/java/com/replaymod/extras/ReplayModExtras.java
Normal file
44
src/main/java/com/replaymod/extras/ReplayModExtras.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package com.replaymod.extras;
|
||||
|
||||
import com.replaymod.core.ReplayMod;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Mod(modid = ReplayModExtras.MOD_ID, useMetadata = true)
|
||||
public class ReplayModExtras {
|
||||
public static final String MOD_ID = "replaymod-extras";
|
||||
|
||||
@Mod.Instance(MOD_ID)
|
||||
public static ReplayModExtras instance;
|
||||
|
||||
@Mod.Instance(ReplayMod.MOD_ID)
|
||||
private static ReplayMod core;
|
||||
|
||||
private static final List<Class<? extends Extra>> builtin = Arrays.<Class<? extends Extra>>asList(
|
||||
HotkeyButtons.class
|
||||
);
|
||||
|
||||
private Logger logger;
|
||||
|
||||
@Mod.EventHandler
|
||||
public void preInit(FMLPreInitializationEvent event) {
|
||||
logger = event.getModLog();
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
public void init(FMLInitializationEvent event) {
|
||||
for (Class<? extends Extra> cls : builtin) {
|
||||
try {
|
||||
Extra extra = cls.newInstance();
|
||||
extra.register(core);
|
||||
} catch (Throwable t) {
|
||||
logger.warn("Failed to load extra " + cls.getName() + ": ", t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user