cps counter, refactor, practise server patch?
This commit is contained in:
parent
1704e3c80c
commit
1af6d3efc3
10 changed files with 175 additions and 51 deletions
|
@ -3,4 +3,4 @@ org.gradle.jvmargs=-Xmx2g
|
|||
baseGroup = com.github.stachelbeere1248.zombiesutils
|
||||
mcVersion = 1.8.9
|
||||
modid = zombiesutils
|
||||
version = 1.2.4-PREVIEW_6
|
||||
version = 1.2.5
|
|
@ -3,9 +3,8 @@ package com.github.stachelbeere1248.zombiesutils;
|
|||
import com.github.stachelbeere1248.zombiesutils.commands.CommandRegistry;
|
||||
import com.github.stachelbeere1248.zombiesutils.config.Hotkeys;
|
||||
import com.github.stachelbeere1248.zombiesutils.config.ZombiesUtilsConfig;
|
||||
import com.github.stachelbeere1248.zombiesutils.handlers.HandlerRegistry;
|
||||
import com.github.stachelbeere1248.zombiesutils.handlers.Handlers;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.common.config.Configuration;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||
|
@ -17,10 +16,12 @@ import org.jetbrains.annotations.NotNull;
|
|||
public class ZombiesUtils {
|
||||
private static ZombiesUtils instance;
|
||||
private final Hotkeys hotkeys;
|
||||
private final Handlers handlers;
|
||||
private Logger logger;
|
||||
|
||||
public ZombiesUtils() {
|
||||
hotkeys = new Hotkeys();
|
||||
handlers = new Handlers();
|
||||
instance = this;
|
||||
}
|
||||
|
||||
|
@ -40,7 +41,7 @@ public class ZombiesUtils {
|
|||
|
||||
@Mod.EventHandler
|
||||
public void init(FMLInitializationEvent event) {
|
||||
HandlerRegistry.registerAll();
|
||||
handlers.registerAll();
|
||||
CommandRegistry.registerAll();
|
||||
hotkeys.registerAll();
|
||||
}
|
||||
|
@ -52,6 +53,11 @@ public class ZombiesUtils {
|
|||
public Hotkeys getHotkeys() {
|
||||
return hotkeys;
|
||||
}
|
||||
|
||||
public Handlers getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static boolean isHypixel() {
|
||||
return Minecraft.getMinecraft().getCurrentServerData().serverIP.matches("(.+\\.)?(hypixel\\.net)(:25565)?");
|
||||
}
|
||||
|
|
|
@ -19,6 +19,8 @@ public class ZombiesUtilsConfig {
|
|||
private static Property waveOffset;
|
||||
private static Property language;
|
||||
private static Property auditory;
|
||||
private static Property copyDelta;
|
||||
private static Property cpsCounter;
|
||||
|
||||
public static void load() {
|
||||
ZombiesUtils.getInstance().getLogger().debug("Loading config...");
|
||||
|
@ -86,6 +88,18 @@ public class ZombiesUtilsConfig {
|
|||
"Enable if not using SST by Sosean"
|
||||
|
||||
);
|
||||
copyDelta = config.get(
|
||||
Configuration.CATEGORY_GENERAL,
|
||||
"copy delta",
|
||||
false,
|
||||
"Also copy the delta-time when clicking the round-end message?"
|
||||
);
|
||||
cpsCounter = config.get(
|
||||
Configuration.CATEGORY_GENERAL,
|
||||
"cps",
|
||||
false,
|
||||
"whether to show cps"
|
||||
);
|
||||
}
|
||||
|
||||
public static short getWaveOffset() {
|
||||
|
@ -122,6 +136,12 @@ public class ZombiesUtilsConfig {
|
|||
public static boolean getSST() {
|
||||
return sst.getBoolean();
|
||||
}
|
||||
public static boolean getCopyDelta() {
|
||||
return copyDelta.getBoolean();
|
||||
}
|
||||
public static boolean getCpsToggle() {
|
||||
return cpsCounter.getBoolean();
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onConfigChange(ConfigChangedEvent.@NotNull OnConfigChangedEvent event) {
|
||||
|
|
|
@ -1,5 +1,18 @@
|
|||
package com.github.stachelbeere1248.zombiesutils.game.enums;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public enum Map {
|
||||
DEAD_END, BAD_BLOOD, ALIEN_ARCADIUM, PRISON
|
||||
DEAD_END, BAD_BLOOD, ALIEN_ARCADIUM, PRISON;
|
||||
|
||||
@Override
|
||||
public @NotNull String toString() {
|
||||
switch (this) {
|
||||
case DEAD_END: return "Dead End";
|
||||
case BAD_BLOOD: return "Bad Blood";
|
||||
case ALIEN_ARCADIUM: return "Alien Arcadium";
|
||||
case PRISON: return "Prison";
|
||||
default: throw new IllegalStateException("Unexpected Map value:" + this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package com.github.stachelbeere1248.zombiesutils.game.waves;
|
||||
|
||||
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.util.ChatComponentText;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -16,16 +18,24 @@ public class Waves {
|
|||
|
||||
@Contract(pure = true)
|
||||
public static byte[] get(@NotNull Map map, byte round) {
|
||||
byte[] ret = new byte[0];
|
||||
try {
|
||||
switch (map) {
|
||||
case DEAD_END:
|
||||
return deadEndWaveTimes[round - 1];
|
||||
ret = deadEndWaveTimes[round - 1];
|
||||
case BAD_BLOOD:
|
||||
return badBloodWaveTimes[round - 1];
|
||||
ret = badBloodWaveTimes[round - 1];
|
||||
case ALIEN_ARCADIUM:
|
||||
return alienArcadiumWaveTimes[round - 1];
|
||||
ret = alienArcadiumWaveTimes[round - 1];
|
||||
default:
|
||||
throw new IllegalStateException("Unexpected value: " + map);
|
||||
}
|
||||
} catch (ArrayIndexOutOfBoundsException e) {
|
||||
Minecraft.getMinecraft().thePlayer.addChatMessage(
|
||||
new ChatComponentText("Achievement get: Round " + round + map)
|
||||
);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static short getSum(@NotNull Map map, byte round) {
|
||||
|
|
|
@ -3,12 +3,22 @@ package com.github.stachelbeere1248.zombiesutils.handlers;
|
|||
import com.github.stachelbeere1248.zombiesutils.config.ZombiesUtilsConfig;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
|
||||
public class HandlerRegistry {
|
||||
public static void registerAll() {
|
||||
public class Handlers {
|
||||
private final RenderGameOverlayHandler renderer;
|
||||
|
||||
public Handlers() {
|
||||
renderer = new RenderGameOverlayHandler();
|
||||
}
|
||||
|
||||
public void registerAll() {
|
||||
MinecraftForge.EVENT_BUS.register(new ZombiesUtilsConfig());
|
||||
MinecraftForge.EVENT_BUS.register(new RenderGameOverlayHandler());
|
||||
MinecraftForge.EVENT_BUS.register(renderer);
|
||||
MinecraftForge.EVENT_BUS.register(new TickHandler());
|
||||
MinecraftForge.EVENT_BUS.register(new ChatHandler());
|
||||
MinecraftForge.EVENT_BUS.register(new KeyInputHandler());
|
||||
}
|
||||
|
||||
public RenderGameOverlayHandler getRenderer() {
|
||||
return renderer;
|
||||
}
|
||||
}
|
|
@ -5,25 +5,33 @@ import com.github.stachelbeere1248.zombiesutils.config.Hotkeys;
|
|||
import com.github.stachelbeere1248.zombiesutils.config.ZombiesUtilsConfig;
|
||||
import com.github.stachelbeere1248.zombiesutils.game.waves.WaveTiming;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraftforge.event.entity.player.PlayerUseItemEvent;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.gameevent.InputEvent;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.input.Mouse;
|
||||
|
||||
|
||||
public class KeyInputHandler {
|
||||
@SubscribeEvent
|
||||
public void onKeyInput(InputEvent.KeyInputEvent event) {
|
||||
if (Keyboard.getEventKeyState() && Minecraft.getMinecraft().currentScreen == null) {
|
||||
public void onKeyInput(InputEvent event) {
|
||||
if (Minecraft.getMinecraft().currentScreen != null) return;
|
||||
if (event instanceof InputEvent.KeyInputEvent) {
|
||||
if (Keyboard.getEventKeyState()) {
|
||||
Hotkeys hotkeys = ZombiesUtils.getInstance().getHotkeys();
|
||||
if (Keyboard.getEventKey() == hotkeys.getChatMacro().getKeyCode()) {
|
||||
Minecraft.getMinecraft().thePlayer.sendChatMessage(
|
||||
ZombiesUtilsConfig.getChatMacro()
|
||||
);
|
||||
} else if (Keyboard.getEventKey() == hotkeys.getRlSpawn().getKeyCode()) {
|
||||
RenderGameOverlayHandler.toggleRL();
|
||||
ZombiesUtils.getInstance().getHandlers().getRenderer().toggleRL();
|
||||
WaveTiming.toggleRL();
|
||||
}
|
||||
}
|
||||
} else if (event instanceof InputEvent.MouseInputEvent) {
|
||||
if (Mouse.getEventButtonState()) {
|
||||
if (Mouse.getEventButton() == 1) ZombiesUtils.getInstance().getHandlers().getRenderer().addClick();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -16,7 +16,9 @@ import org.jetbrains.annotations.NotNull;
|
|||
import java.util.Objects;
|
||||
|
||||
public class RenderGameOverlayHandler {
|
||||
private static int rl = 0;
|
||||
private int rl = 0;
|
||||
private final boolean[] clicks = new boolean[20];
|
||||
private int clickPointer = 0;
|
||||
private final FontRenderer fontRenderer;
|
||||
|
||||
public RenderGameOverlayHandler() {
|
||||
|
@ -37,7 +39,7 @@ public class RenderGameOverlayHandler {
|
|||
return String.format("W%d %d:%02d.%d", wave, minutesPart, secondsPart, tenthSecondsPart);
|
||||
}
|
||||
|
||||
static void toggleRL() {
|
||||
void toggleRL() {
|
||||
if (rl == 0) rl = ZombiesUtilsConfig.getWaveOffset();
|
||||
else rl = 0;
|
||||
}
|
||||
|
@ -45,6 +47,7 @@ public class RenderGameOverlayHandler {
|
|||
@SubscribeEvent
|
||||
public void onRenderGameOverlay(RenderGameOverlayEvent.@NotNull Post event) {
|
||||
if (event.type != RenderGameOverlayEvent.ElementType.TEXT) return;
|
||||
|
||||
Timer.getInstance().ifPresent(timer -> {
|
||||
renderTime(timer.roundTime());
|
||||
renderSpawnTime(
|
||||
|
@ -55,10 +58,13 @@ public class RenderGameOverlayHandler {
|
|||
timer.roundTime()
|
||||
);
|
||||
});
|
||||
|
||||
SLA.getInstance().ifPresent(sla -> {
|
||||
sla.refreshActives();
|
||||
renderSla(sla.getRooms());
|
||||
});
|
||||
|
||||
if (ZombiesUtilsConfig.getCpsToggle()) renderCPS();
|
||||
}
|
||||
|
||||
private void renderTime(long timerTicks) {
|
||||
|
@ -128,4 +134,34 @@ public class RenderGameOverlayHandler {
|
|||
heightIndex++;
|
||||
}
|
||||
}
|
||||
public void renderCPS() {
|
||||
final String cps = String.format("%2.1f", getClicks());
|
||||
final ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
|
||||
final int screenWidth = scaledResolution.getScaledWidth();
|
||||
final int width = fontRenderer.getStringWidth(cps);
|
||||
|
||||
fontRenderer.drawStringWithShadow(
|
||||
cps,
|
||||
screenWidth - width,
|
||||
0,
|
||||
0xAAAAAA
|
||||
);
|
||||
}
|
||||
|
||||
public double getClicks() {
|
||||
int i = 0;
|
||||
for (boolean tick : clicks) {
|
||||
if (tick) i++;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
public void addClick() {
|
||||
clicks[clickPointer] = true;
|
||||
}
|
||||
|
||||
public void tick() {
|
||||
clickPointer = (clickPointer + 1) % 20;
|
||||
clicks[clickPointer] = false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.github.stachelbeere1248.zombiesutils.handlers;
|
||||
|
||||
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
||||
import com.github.stachelbeere1248.zombiesutils.game.waves.WaveTiming;
|
||||
import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
|
@ -12,5 +13,6 @@ public class TickHandler {
|
|||
if (event.phase == TickEvent.Phase.START) return;
|
||||
Scoreboard.refresh();
|
||||
WaveTiming.onTick();
|
||||
ZombiesUtils.getInstance().getHandlers().getRenderer().tick();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
package com.github.stachelbeere1248.zombiesutils.timer;
|
||||
|
||||
import com.github.stachelbeere1248.zombiesutils.config.ZombiesUtilsConfig;
|
||||
import com.github.stachelbeere1248.zombiesutils.timer.recorder.Category;
|
||||
import com.github.stachelbeere1248.zombiesutils.timer.recorder.files.CategoryFile;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.event.ClickEvent;
|
||||
import net.minecraft.util.ChatComponentText;
|
||||
import net.minecraft.util.ChatStyle;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -11,55 +14,73 @@ public class RecordManager {
|
|||
private static final String bar = "§l§a▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬";
|
||||
|
||||
public static void compareSegment(byte round, short roundTime, @NotNull Category category) throws IndexOutOfBoundsException {
|
||||
String segmentMessage = bar +
|
||||
"\n§e Category: §d" + category.getName();
|
||||
@SuppressWarnings("OptionalGetWithoutIsPresent")
|
||||
final CategoryFile categoryFile = category.getByGameMode(Timer.getInstance().get().getGameMode());
|
||||
final short bestSegment = categoryFile.getBestSegment(round);
|
||||
|
||||
final String timeString = formattedTime(roundTime);
|
||||
String segmentMessage = bar + "\n§e Category: §d" + category.getName();
|
||||
String deltaString = "";
|
||||
|
||||
|
||||
@SuppressWarnings("OptionalGetWithoutIsPresent") final CategoryFile categoryFile = category.getByGameMode(Timer.getInstance().get().getGameMode());
|
||||
short bestSegment = categoryFile.getBestSegment(round);
|
||||
if (bestSegment == (short) 0) {
|
||||
categoryFile.setBestSegment(round, roundTime);
|
||||
|
||||
segmentMessage += "\n§e§l***§6§l NEW BEST SEGMENT! §e§l***";
|
||||
final String timeString = formattedTime(roundTime);
|
||||
segmentMessage += "\n§cRound " + round + "§e took §a" + timeString + "§e!";
|
||||
} else {
|
||||
if (roundTime < bestSegment) {
|
||||
segmentMessage += "\n§e§l***§6§l NEW BEST SEGMENT! §e§l***";
|
||||
categoryFile.setBestSegment(round, roundTime);
|
||||
}
|
||||
final String timeString = formattedTime(roundTime);
|
||||
segmentMessage += "\n§cRound " + round + "§e took §a" + timeString + " §9" + formattedDelta(roundTime, bestSegment);
|
||||
deltaString = formattedDelta(roundTime, bestSegment);
|
||||
segmentMessage += "\n§cRound " + round + "§e took §a" + timeString + " §9" + deltaString;
|
||||
if (ZombiesUtilsConfig.getCopyDelta()) deltaString = " (" + deltaString + ")";
|
||||
}
|
||||
|
||||
|
||||
segmentMessage += "\n" + bar;
|
||||
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(segmentMessage));
|
||||
final ChatComponentText message = new ChatComponentText(segmentMessage);
|
||||
|
||||
String copyString = String.format("Round %s took %s%s!", round, timeString, deltaString);
|
||||
message.setChatStyle(new ChatStyle().setChatClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, copyString)));
|
||||
|
||||
Minecraft.getMinecraft().thePlayer.addChatMessage(message);
|
||||
}
|
||||
|
||||
public static void compareBest(byte round, int gameTime, @NotNull Category category) throws IndexOutOfBoundsException {
|
||||
String bestMessage = bar +
|
||||
"\n§e Category: §d" + category.getName();
|
||||
@SuppressWarnings("OptionalGetWithoutIsPresent")
|
||||
final CategoryFile categoryFile = category.getByGameMode(Timer.getInstance().get().getGameMode());
|
||||
final int personalBest = categoryFile.getPersonalBest(round);
|
||||
String deltaString = "";
|
||||
|
||||
String bestMessage = bar + "\n§e Category: §d" + category.getName();
|
||||
final String timeString = formattedTime(gameTime);
|
||||
|
||||
@SuppressWarnings("OptionalGetWithoutIsPresent") final CategoryFile categoryFile = category.getByGameMode(Timer.getInstance().get().getGameMode());
|
||||
int personalBest = categoryFile.getPersonalBest(round);
|
||||
if (personalBest == 0) {
|
||||
categoryFile.setPersonalBest(round, gameTime);
|
||||
|
||||
bestMessage += "\n§e§l***§6§l NEW PERSONAL BEST! §e§l***";
|
||||
final String timeString = formattedTime(gameTime);
|
||||
bestMessage += "\n§cRound " + round + "§e finished at §a" + timeString + "§e!";
|
||||
} else {
|
||||
if (gameTime < personalBest) {
|
||||
bestMessage += "\n§e§l***§6§l NEW PERSONAL BEST! §e§l***";
|
||||
categoryFile.setPersonalBest(round, gameTime);
|
||||
}
|
||||
|
||||
final String timeString = formattedTime(gameTime);
|
||||
bestMessage += "\n§cRound " + round + "§e finished at §a" + timeString + " §9" + formattedDelta(gameTime, personalBest);
|
||||
deltaString = formattedDelta(gameTime, personalBest);
|
||||
bestMessage += "\n§cRound " + round + "§e finished at §a" + timeString + " §9" + deltaString;
|
||||
if (ZombiesUtilsConfig.getCopyDelta()) deltaString = " (" + deltaString + ")";
|
||||
}
|
||||
bestMessage += "\n" + bar;
|
||||
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(bestMessage));
|
||||
final ChatComponentText message = new ChatComponentText(bestMessage);
|
||||
|
||||
String copyString = String.format("Round %s finished at %s%s!", round, timeString, deltaString);
|
||||
message.setChatStyle(new ChatStyle().setChatClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, copyString)));
|
||||
|
||||
Minecraft.getMinecraft().thePlayer.addChatMessage(message);
|
||||
}
|
||||
|
||||
@Contract(pure = true)
|
||||
private static String formattedTime(int gameTime) {
|
||||
gameTime *= 50;
|
||||
return String.format("%d:%02d.%d%d",
|
||||
|
@ -72,9 +93,7 @@ public class RecordManager {
|
|||
|
||||
@Contract(pure = true)
|
||||
private static @NotNull String formattedDelta(int newTime, int prevTime) {
|
||||
double delta = (double) (newTime - prevTime) / 20;
|
||||
if (delta < 0) {
|
||||
return String.valueOf(delta);
|
||||
} else return ("+" + delta);
|
||||
final double delta = (double) (newTime - prevTime) / 20;
|
||||
return String.format("%+.2f", delta);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue