Compare commits

..

No commits in common. "forge_1.8.9-master" and "v1.3.4" have entirely different histories.

45 changed files with 276 additions and 10289 deletions

View file

@ -1,80 +1,53 @@
# zombies-utils # zombies-utils
##### Download latest release: [v1.3.4](https://github.com/Stachelbeere1248/zombies-utils/releases/tag/v1.3.4).
##### Go to release page [here](https://git.stachel.xyz/Stachelbeere1248/zombies-utils/releases)
Hello, I am currently working on this mod. More features will come. For now it has: Hello, I am currently working on this mod. More features will come. For now it has:
- An accurate timer + Automatic splitting - An accurate timer + Automatic splitting
- Tracking of splits & segment PBs (with custom categories) - Tracking of splits & segment PBs (with custom categories)
- SLA hud - SLA hud
- A chat macro - A chat macro
- Spawn-times HUD: visual, auditory, RL-mode - Spawn-times HUD: visual, auditory, RL-mode
- Player Visibility - Player Visibility
#### Disclaimers #### Disclaimers
- If you are using a Hypixel language other than the selected one the mod may not work entirely. Check config. - If you are using a Hypixel language other than the selected one the mod may not work entirely. Check config.
## For Users ## For Users
The timer automatically splits every round. The PB/Segment recorder automatically distinguishes maps and difficulties, but not player count.
The timer automatically splits every round. The PB/Segment recorder automatically distinguishes maps and difficulties,
but not player count.
### Config ### Config
- Language: The selected Hypixel language. Currently supports EN,FR,DE.
- `Language`: The selected Hypixel language. Currently supports EN,FR,DE. - Timer:
- ###### Timer: - Default Category: The record-category to be selected when starting the game.
- `Default Category`: The record-category to be selected when starting the game. - PB Announcements: Whether to show **\*\*\*NEW PERSONAL BEST\*\*\*** on PB in summaries.
- `PB Announcements`: Whether to show **\*\*\*NEW PERSONAL BEST\*\*\*** on PB in summaries. - SST:
- ###### SST: - Enabled: Enables / disables this feature.
- `Enabled`: Enables / disables this feature. - Auditory: A List of tick offsets that a sound should be played. Default (-40, -20, 0) means 2s and 1s in advance, as well as on spawn.
- `Auditory`: A List of tick offsets that a sound should be played. Default (-40, -20, 0) means 2s and 1s in - RL pre-timing: During RL mode, how much SST times sohuld be offsetted. Defaults to 1.4s earlier. Affects HUD as well as auditory.
advance, as well as on spawn. - Truncate: Whether to show passed rounds in the HUD.
- `RL pre-timing`: During RL mode, how much SST times sohuld be offsetted. Defaults to 1.4s earlier. Affects HUD as - SLA:
well as auditory. - Enabled: Whether the SLA HUD should automatically be shown when starting a game.
- `Truncate`: Whether to show passed rounds in the HUD. - Truncate: Whether inactive windows and rooms should be shown.
- ###### SLA: - Macro Message: The Message to be sent when pressing the Chat Macro Key. Do NOT use "§" as symbol.
- `Enabled`: Whether the SLA HUD should automatically be shown when starting a game. - Player Visibility: Whether to enable PlayerVisibility by default.
- `Truncate`: Whether inactive windows and rooms should be shown. - CPS Counter: A simple CPS Counter which shows the amount of clicks within the last 20 gameticks.
- ###### Player Visibility:
- `Enabled`: Whether to enable PlayerVisibility by default.
- `Range`: The range within which players are hidden while enabled.
- `Macro Message`: The Message to be sent when pressing the Chat Macro Key. Do NOT use "§" as symbol.
- `CPS Counter`: A simple CPS Counter which shows the amount of clicks within the last 20 gameticks.
### Commands ### Commands
- /category \<name> - Switches to the category called name. All recorded times are bound to its category. Tabcomplete suggests already existing categories, but you can insert a new (clean) one as well.
- /category \<name> - Switches to the category called name. All recorded times are bound to its category. Tabcomplete - Examples:
suggests already existing categories, but you can insert a new (clean) one as well. - /category pistol_only
- Examples: - /category no_doors_solo
- /category pistol_only - note: you do NOT need to make your own categories to seperate difficulties or map
- /category no_doors_solo
- note: you do NOT need to make your own categories to seperate difficulties or map
- /sla \<off|map|quick|rotate|mirror|offset> - /sla \<off|map|quick|rotate|mirror|offset>
- /sla off - Disables the SLA hud - /sla off - Disables the SLA hud
- /sla map \<de|bb|aa|p> - forcefully set the map - /sla map \<de|bb|aa|p> - forcefully set the map
- /sla quick \<mogi_a|ghxula|ghxula-garden> - /sla quick \<mogi_a|ghxula|ghxula-garden>
- useless for most players: - /sla rotate - rotates all windows around the axis (0,y,0)
- /sla rotate - rotates all windows around the axis (0,y,0) - /sla mirror \<x|z> - mirrors all windows along the plane (0,y,z) or (x,y,0)
- /sla mirror \<x|z> - mirrors all windows along the plane (0,y,z) or (x,y,0) - /sla offset \<x> \<y> \<z> - set an offset, allowing you to use sla on map-recreations, such as housings
- /sla offset \<x> \<y> \<z> - set an offset, allowing you to use sla on map-recreations, such as housings
- /zombiesutils \<timer> - /zombiesutils \<timer>
- /zombiesutils timer \<kill|split> - /zombiesutils timer \<kill|split>
- /zombiesutils timer kill - Stops the running timer completely - /zombiesutils timer kill - Stops the running timer completely
- /zombiesutils timer split \<round> - Splits as if \<round> was passed, not recommended to use as it might - /zombiesutils timer split \<round> - Splits as if \<round> was passed, not recommended to use as it might create impossible PBs.
create impossible PBs.
- /qz \<de|bb|aa|p> - sends you to a new game of Dead End, Bad Blood, Alien Arcadium or Prison - /qz \<de|bb|aa|p> - sends you to a new game of Dead End, Bad Blood, Alien Arcadium or Prison
### Hotkeys ### Hotkeys
- Chat Macro: Sends the message specified in the config. - Chat Macro: Sends the message specified in the config.
- RL Mode: Toggles usage of the rocket launcher mode spawn-time offset. - RL Mode: Toggles usage of the rocket launcher mode spawn-time offset.
- Player Visibility: Toggles whether to show players that are within a 4 block radius. - Player Visibility: Toggles whether to show players that are within a 4 block radius.
### Extra ### Extra
- Managing split-categories: In your game directory is a folder called "zombies" which contains the folder "splits". You can simply rename or delete the folders inside "splits". You can also edit your splits, the data is stored as a list of ticks inside the MAP_DIFFICULTY.times files, a simple text editor (such as Notepad on Windows) should be able to edit it (UTF-16 encoded text). The other subfolder, runs, logs all the splits for every run you play.
- Managing split-categories: In your game directory (aka `.minecraft`) is a folder called `zombies` which contains the
folder `splits`. You can simply rename or delete the folders inside `splits`, they represent your categories. You can
also edit your splits, the data is stored as a list of ticks inside the `MAP_DIFFICULTY.times` files, a simple text
editor (such as Notepad on Windows) should be able to edit it (UTF-16 encoded text). The other subfolder, runs, logs
all the splits for every run you play.

View file

@ -1,6 +1,6 @@
loom.platform=forge loom.platform=forge
org.gradle.jvmargs=-Xmx2g org.gradle.jvmargs=-Xmx2g
baseGroup=com.github.stachelbeere1248.zombiesutils baseGroup = com.github.stachelbeere1248.zombiesutils
mcVersion=1.8.9 mcVersion = 1.8.9
modid=zombiesutils modid = zombiesutils
version=1.3.7 version = 1.3.4

View file

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"> <Configuration status="WARN">
<!-- Filter out Hypixel scoreboard and sound errors --> <!-- Filter out Hypixel scoreboard and sound errors -->
<RegexFilter regex="Error executing task.*|Unable to play unknown soundEvent.*" onMatch="DENY" <RegexFilter regex="Error executing task.*|Unable to play unknown soundEvent.*" onMatch="DENY" onMismatch="NEUTRAL"/>
onMismatch="NEUTRAL"/>
</Configuration> </Configuration>

View file

@ -19,7 +19,7 @@ pluginManagement {
} }
plugins { plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version ("0.6.0") id("org.gradle.toolchains.foojay-resolver-convention") version("0.6.0")
} }

View file

@ -1,22 +0,0 @@
package com.github.stachelbeere1248.zombiesutils;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import net.minecraft.client.Minecraft;
import net.minecraft.util.ResourceLocation;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Optional;
public class ResourceLoader {
public static Optional<JsonElement> readJsonResource(final String resourcePath) {
ResourceLocation resourceLocation = new ResourceLocation("zombiesutils", resourcePath);
try (Reader reader = new InputStreamReader(Minecraft.getMinecraft().getResourceManager().getResource(resourceLocation).getInputStream())) {
return Optional.ofNullable(new JsonParser().parse(reader));
} catch (Exception e) {
ZombiesUtils.getInstance().getLogger().error(e.fillInStackTrace());
return Optional.empty();
}
}
}

View file

@ -3,7 +3,6 @@ package com.github.stachelbeere1248.zombiesutils;
import com.github.stachelbeere1248.zombiesutils.commands.CommandRegistry; import com.github.stachelbeere1248.zombiesutils.commands.CommandRegistry;
import com.github.stachelbeere1248.zombiesutils.config.Hotkeys; import com.github.stachelbeere1248.zombiesutils.config.Hotkeys;
import com.github.stachelbeere1248.zombiesutils.config.ZombiesUtilsConfig; import com.github.stachelbeere1248.zombiesutils.config.ZombiesUtilsConfig;
import com.github.stachelbeere1248.zombiesutils.game.GameData;
import com.github.stachelbeere1248.zombiesutils.handlers.Handlers; import com.github.stachelbeere1248.zombiesutils.handlers.Handlers;
import com.github.stachelbeere1248.zombiesutils.timer.GameManager; import com.github.stachelbeere1248.zombiesutils.timer.GameManager;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -22,7 +21,6 @@ public class ZombiesUtils {
private ZombiesUtilsConfig config; private ZombiesUtilsConfig config;
private Handlers handlers; private Handlers handlers;
private Logger logger; private Logger logger;
private GameData gameData;
public ZombiesUtils() { public ZombiesUtils() {
hotkeys = new Hotkeys(); hotkeys = new Hotkeys();
@ -54,7 +52,6 @@ public class ZombiesUtils {
handlers.registerAll(); handlers.registerAll();
CommandRegistry.registerAll(); CommandRegistry.registerAll();
hotkeys.registerAll(); hotkeys.registerAll();
gameData = new GameData();
} }
public Logger getLogger() { public Logger getLogger() {
@ -76,8 +73,4 @@ public class ZombiesUtils {
public GameManager getGameManager() { public GameManager getGameManager() {
return gameManager; return gameManager;
} }
public GameData getGameData() {
return gameData;
}
} }

View file

@ -1,8 +1,8 @@
package com.github.stachelbeere1248.zombiesutils.commands; package com.github.stachelbeere1248.zombiesutils.commands;
import com.github.stachelbeere1248.zombiesutils.game.SLA;
import com.github.stachelbeere1248.zombiesutils.game.enums.Map; import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
import com.github.stachelbeere1248.zombiesutils.game.sla.QuickSLA; import com.github.stachelbeere1248.zombiesutils.game.sla.QuickSLA;
import com.github.stachelbeere1248.zombiesutils.game.windows.SLA;
import net.minecraft.command.*; import net.minecraft.command.*;
import net.minecraft.util.BlockPos; import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentText;

View file

@ -68,7 +68,8 @@ public class ZombiesUtilsCommand extends CommandBase {
default: default:
return Collections.emptyList(); return Collections.emptyList();
} }
} else if (args.length == 3) { }
else if (args.length == 3) {
switch (args[0]) { switch (args[0]) {
case "timer": case "timer":
switch (args[1]) { switch (args[1]) {

View file

@ -41,7 +41,6 @@ public class Hotkeys {
public KeyBinding getRlSpawn() { public KeyBinding getRlSpawn() {
return rlSpawn; return rlSpawn;
} }
public KeyBinding getPlayerVisiblity() { public KeyBinding getPlayerVisiblity() {
return playerVisiblity; return playerVisiblity;
} }

View file

@ -1,5 +1,6 @@
package com.github.stachelbeere1248.zombiesutils.config; package com.github.stachelbeere1248.zombiesutils.config;
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
import com.github.stachelbeere1248.zombiesutils.utils.LanguageSupport; import com.github.stachelbeere1248.zombiesutils.utils.LanguageSupport;
import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.common.config.Property; import net.minecraftforge.common.config.Property;
@ -26,7 +27,6 @@ public class ZombiesUtilsConfig {
private Property cpsCounter; private Property cpsCounter;
private Property announcePB; private Property announcePB;
private Property playerVis; private Property playerVis;
private Property playerVisRange;
public ZombiesUtilsConfig(Configuration config) { public ZombiesUtilsConfig(Configuration config) {
this.config = config; this.config = config;
@ -34,7 +34,9 @@ public class ZombiesUtilsConfig {
} }
private void read() { private void read() {
ZombiesUtils.getInstance().getLogger().debug("Loading config...");
config.load(); config.load();
ZombiesUtils.getInstance().getLogger().debug("Config loaded.");
//SST //SST
sstHud = config.get( sstHud = config.get(
@ -97,22 +99,6 @@ public class ZombiesUtilsConfig {
"Whether to announce PBs." "Whether to announce PBs."
); );
//Player Visibility
playerVis = config.get(
"PlayerVis",
"default",
false,
"If players should always be visible"
);
playerVisRange = config.get(
"PlayerVis",
"range",
4,
"The range within which players are hidden",
0,
50
);
//ROOT //ROOT
language = config.get( language = config.get(
@ -128,6 +114,12 @@ public class ZombiesUtilsConfig {
"T", "T",
"The Text to be sent when pressing the chat-macro hotkey" "The Text to be sent when pressing the chat-macro hotkey"
); );
playerVis = config.get(
Configuration.CATEGORY_GENERAL,
"playervis",
false,
"If players should always be visible"
);
cpsCounter = config.get( cpsCounter = config.get(
Configuration.CATEGORY_GENERAL, Configuration.CATEGORY_GENERAL,
"cps", "cps",
@ -159,21 +151,14 @@ public class ZombiesUtilsConfig {
); );
} }
private List<IConfigElement> getPlayerVisElements() {
return Arrays.asList(
new CustomConfigElement("Enabled", playerVis),
new CustomConfigElement("Range", playerVisRange)
);
}
List<IConfigElement> getRootElements() { List<IConfigElement> getRootElements() {
return Arrays.asList( return Arrays.asList(
new CustomConfigElement("Language", language), new CustomConfigElement("Language", language),
new DummyConfigElement.DummyCategoryElement("Timer", "", getTimerElements()), new DummyConfigElement.DummyCategoryElement("Timer", "", getTimerElements()),
new DummyConfigElement.DummyCategoryElement("SST", "", getSpawntimeElements()), new DummyConfigElement.DummyCategoryElement("SST", "", getSpawntimeElements()),
new DummyConfigElement.DummyCategoryElement("SLA", "", getSlaElements()), new DummyConfigElement.DummyCategoryElement("SLA", "", getSlaElements()),
new DummyConfigElement.DummyCategoryElement("Player Visibility", "", getPlayerVisElements()),
new CustomConfigElement("Macro message", chatMacro), new CustomConfigElement("Macro message", chatMacro),
new CustomConfigElement("Player visibility", playerVis),
new CustomConfigElement("CPS counter", cpsCounter) new CustomConfigElement("CPS counter", cpsCounter)
); );
@ -219,19 +204,13 @@ public class ZombiesUtilsConfig {
public boolean getCpsToggle() { public boolean getCpsToggle() {
return cpsCounter.getBoolean(); return cpsCounter.getBoolean();
} }
public boolean getAnnouncePB() { public boolean getAnnouncePB() {
return announcePB.getBoolean(); return announcePB.getBoolean();
} }
public boolean getPlayerVis() { public boolean getPlayerVis() {
return playerVis.getBoolean(); return playerVis.getBoolean();
} }
public int getPlayerVisRange() {
return playerVisRange.getInt();
}
@SubscribeEvent @SubscribeEvent
public void onConfigChange(ConfigChangedEvent.@NotNull OnConfigChangedEvent event) { public void onConfigChange(ConfigChangedEvent.@NotNull OnConfigChangedEvent event) {
if (event.modID.equals("zombiesutils") && event.configID == null) { if (event.modID.equals("zombiesutils") && event.configID == null) {

View file

@ -1,57 +0,0 @@
package com.github.stachelbeere1248.zombiesutils.game;
import com.github.stachelbeere1248.zombiesutils.ResourceLoader;
import com.github.stachelbeere1248.zombiesutils.game.waves.Round;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import org.jetbrains.annotations.NotNull;
public class GameData {
private final Round[][] roundData;
public GameData() {
roundData = new Round[10][];
roundData[0] = readFromFile("data/rounds/DEAD_END_NORMAL.json");
roundData[1] = readFromFile("data/rounds/DEAD_END_HARD.json");
roundData[2] = readFromFile("data/rounds/DEAD_END_RIP.json");
roundData[3] = readFromFile("data/rounds/BAD_BLOOD_NORMAL.json");
roundData[4] = readFromFile("data/rounds/BAD_BLOOD_HARD.json");
roundData[5] = readFromFile("data/rounds/BAD_BLOOD_RIP.json");
roundData[6] = readFromFile("data/rounds/ALIEN_ARCADIUM.json");
roundData[7] = readFromFile("data/rounds/PRISON_NORMAL.json");
roundData[8] = readFromFile("data/rounds/PRISON_HARD.json");
roundData[9] = readFromFile("data/rounds/PRISON_RIP.json");
}
public Round getRound(@NotNull GameMode gameMode, int round) {
switch (gameMode) {
case DEAD_END:
return roundData[0][round - 1];
case DEAD_END_HARD:
return roundData[1][round - 1];
case DEAD_END_RIP:
return roundData[2][round - 1];
case BAD_BLOOD:
return roundData[3][round - 1];
case BAD_BLOOD_HARD:
return roundData[4][round - 1];
case BAD_BLOOD_RIP:
return roundData[5][round - 1];
case ALIEN_ARCADIUM:
return roundData[6][round - 1];
case PRISON:
return roundData[7][round - 1];
case PRISON_HARD:
return roundData[8][round - 1];
case PRISON_RIP:
return roundData[9][round - 1];
default:
throw new IllegalStateException("Invalid GameMode: " + gameMode);
}
}
private Round[] readFromFile(final String resourcePath) {
final JsonElement roundsJsonElement = ResourceLoader.readJsonResource(resourcePath).orElseThrow(RuntimeException::new);
return new Gson().fromJson(roundsJsonElement, Round[].class);
}
}

View file

@ -2,83 +2,48 @@ package com.github.stachelbeere1248.zombiesutils.game;
import com.github.stachelbeere1248.zombiesutils.game.enums.Difficulty; import com.github.stachelbeere1248.zombiesutils.game.enums.Difficulty;
import com.github.stachelbeere1248.zombiesutils.game.enums.Map; import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public enum GameMode { import java.util.Objects;
DEAD_END(Map.DEAD_END, Difficulty.NORMAL), DEAD_END_HARD(Map.DEAD_END, Difficulty.HARD), DEAD_END_RIP(Map.DEAD_END, Difficulty.RIP),
BAD_BLOOD(Map.BAD_BLOOD, Difficulty.NORMAL), BAD_BLOOD_HARD(Map.BAD_BLOOD, Difficulty.HARD), BAD_BLOOD_RIP(Map.BAD_BLOOD, Difficulty.RIP),
ALIEN_ARCADIUM(Map.ALIEN_ARCADIUM, Difficulty.NORMAL),
PRISON(Map.PRISON, Difficulty.NORMAL), PRISON_HARD(Map.PRISON, Difficulty.HARD), PRISON_RIP(Map.PRISON, Difficulty.RIP);
private final Map map;
private final Difficulty difficulty;
GameMode(final @NotNull Map map, final @NotNull Difficulty difficulty) { public class GameMode {
private final Map map;
private Difficulty difficulty;
public GameMode(@NotNull Map map) {
this.map = map;
this.difficulty = Difficulty.NORMAL;
}
public GameMode(@NotNull Map map, @NotNull Difficulty difficulty) {
this.map = map; this.map = map;
this.difficulty = difficulty; this.difficulty = difficulty;
} }
@Contract(pure = true)
public static GameMode getNormalForMap(final @NotNull Map map) {
switch (map) {
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 value: " + map);
}
}
public Map getMap() { public Map getMap() {
return this.map; return map;
} }
public Difficulty getDifficulty() { public Difficulty getDifficulty() {
return this.difficulty; return difficulty;
} }
public GameMode appliedDifficulty(final Difficulty difficulty) { public void changeDifficulty(@NotNull Difficulty difficulty) {
switch (this.map) { switch (map) {
case DEAD_END: case DEAD_END:
switch (difficulty) {
case NORMAL:
return DEAD_END;
case HARD:
return DEAD_END_HARD;
case RIP:
return DEAD_END_RIP;
}
case BAD_BLOOD: case BAD_BLOOD:
switch (difficulty) {
case NORMAL:
return BAD_BLOOD;
case HARD:
return BAD_BLOOD_HARD;
case RIP:
return BAD_BLOOD_RIP;
}
case PRISON: case PRISON:
switch (difficulty) { this.difficulty = difficulty;
case NORMAL: break;
return PRISON;
case HARD:
return PRISON_HARD;
case RIP:
return PRISON_RIP;
}
case ALIEN_ARCADIUM: case ALIEN_ARCADIUM:
return ALIEN_ARCADIUM; throw new RuntimeException("Achievement Get: Alien Arcadium Hard/RIP" + Map.ALIEN_ARCADIUM);
default:
throw new IllegalStateException("Invalid Map: " + this.map);
} }
} }
public boolean isMap(Map map) { public boolean is(Map map, Difficulty difficulty) {
return this.getDifficulty() == difficulty && this.getMap() == map;
}
public boolean is(Map map) {
return this.getMap() == map; return this.getMap() == map;
} }
} }

View file

@ -1,9 +1,12 @@
package com.github.stachelbeere1248.zombiesutils.game.windows; package com.github.stachelbeere1248.zombiesutils.game;
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils; import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
import com.github.stachelbeere1248.zombiesutils.game.enums.Map; import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
import com.github.stachelbeere1248.zombiesutils.game.windows.Room;
import com.github.stachelbeere1248.zombiesutils.game.windows.Window;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.util.ChatComponentText;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Arrays; import java.util.Arrays;
@ -27,7 +30,7 @@ public class SLA {
this.rooms = Room.getAA(); this.rooms = Room.getAA();
break; break;
case PRISON: case PRISON:
this.rooms = new Room[0]; this.rooms = Room.getP();
break; break;
default: default:
throw new IllegalStateException("Unexpected value: " + map); throw new IllegalStateException("Unexpected value: " + map);
@ -86,7 +89,7 @@ public class SLA {
} }
// (2x)²+(2y)²+(2z)² = 4(x²+y²+z²) = 4d² // (2x)²+(2y)²+(2z)² = 4(x²+y²+z²) = 4d²
final int slaRange = 50; final int slaRange = 40;
if (distanceDoubledThenSquared < 4 * slaRange * slaRange) { if (distanceDoubledThenSquared < 4 * slaRange * slaRange) {
window.setActive(true); window.setActive(true);
room.increaseActiveWindowCount(); room.increaseActiveWindowCount();

View file

@ -14,7 +14,7 @@ public enum Map {
public static Optional<Map> getMap() { public static Optional<Map> getMap() {
World world = Minecraft.getMinecraft().theWorld; World world = Minecraft.getMinecraft().theWorld;
BlockPos pos = new BlockPos(44, 71, 0); BlockPos pos = new BlockPos(44,71,0);
if (!world.isBlockLoaded(pos) || Scoreboard.isNotZombies()) return Optional.empty(); if (!world.isBlockLoaded(pos) || Scoreboard.isNotZombies()) return Optional.empty();
Block block = world.getBlockState(pos).getBlock(); Block block = world.getBlockState(pos).getBlock();

View file

@ -1,7 +1,7 @@
package com.github.stachelbeere1248.zombiesutils.game.sla; package com.github.stachelbeere1248.zombiesutils.game.sla;
import com.github.stachelbeere1248.zombiesutils.game.SLA;
import com.github.stachelbeere1248.zombiesutils.game.enums.Map; import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
import com.github.stachelbeere1248.zombiesutils.game.windows.SLA;
@SuppressWarnings("SpellCheckingInspection") @SuppressWarnings("SpellCheckingInspection")
public class QuickSLA { public class QuickSLA {

View file

@ -1,37 +0,0 @@
package com.github.stachelbeere1248.zombiesutils.game.waves;
public enum Prefix {
BOSS(0xCC5555, "B", 0x7A3333),
BLAZES(0xEFB61F, "BL", 0x8F6D0F),
SLIME(0x88FF88, "S", 0x51A951),
HBM(0x2A415F, "HBM", 0x193241),
WITHER_SKELETON(0x888888, "WS", 0x515151),
OLD_ONE(0x55AA55, "O1", 0x336633),
GIANT(0x00FFFF, "G", 0x009999),
POLICE(0x16537E, "P", 0x0E324D),
CELL(0xFF8234, "C", 0x99501F),
WINDOW(0xAAAAAA, "W", 0x666666);
private final int color;
private final int fadedColor;
private final String prefix;
Prefix(final int color, final String prefix, final int fadedColor) {
this.color = color;
this.prefix = prefix;
this.fadedColor = fadedColor;
}
public int getColor() {
return color;
}
public String getPrefix() {
return prefix;
}
public int getFadedColor() {
return fadedColor;
}
}

View file

@ -1,21 +0,0 @@
package com.github.stachelbeere1248.zombiesutils.game.waves;
public class Round {
private final Wave[] waves;
public Round(final Wave[] waves) {
this.waves = waves;
}
public Wave[] getWaves() {
return waves;
}
public short[] getWaveTimes() {
short[] ret = new short[waves.length];
for (int i = 0; i < waves.length; i++) {
ret[i] = waves[i].getTime();
}
return ret;
}
}

View file

@ -1,25 +0,0 @@
package com.github.stachelbeere1248.zombiesutils.game.waves;
@SuppressWarnings("DuplicatedCode")
public class Wave {
private final short ticks;
private final Prefix[] prefixes;
public Wave(final short ticks, final Prefix[] prefixes) {
this.ticks = ticks;
this.prefixes = prefixes;
}
public Wave(final short ticks) {
this.ticks = ticks;
this.prefixes = new Prefix[]{ Prefix.WINDOW };
}
public short getTime() {
return this.ticks;
}
public Prefix[] getPrefixes() {
return this.prefixes;
}
}

View file

@ -3,21 +3,21 @@ package com.github.stachelbeere1248.zombiesutils.game.waves;
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils; import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard; import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays; import java.util.Arrays;
public class WaveTiming { public class WaveTiming {
public static int rl = 0; public static int rl = 0;
public static void onTick() { public static void onTick() {
if (Scoreboard.isNotZombies()) return; if (Scoreboard.isNotZombies()) return;
ZombiesUtils.getInstance().getGameManager().getGame().ifPresent( ZombiesUtils.getInstance().getGameManager().getGame().ifPresent(
game -> { game -> {
short[] waves = ZombiesUtils.getInstance().getGameData().getRound(game.getGameMode(), game.getRound()).getWaveTimes(); byte[] waves = Waves.get(game.getGameMode().getMap(), game.getRound());
final int roundTime = game.getTimer().getRoundTime(); final int roundTime = game.getTimer().getRoundTime();
final int[] auditory = ZombiesUtils.getInstance().getConfig().getAuditory(); final int[] auditory = ZombiesUtils.getInstance().getConfig().getAuditory();
for (short wave : waves) { for (int wave : waves) {
wave = (short) (wave + rl); wave = wave * 20 + rl;
final Integer pre = roundTime - wave; final Integer pre = roundTime - wave;
if (Arrays.stream(auditory).anyMatch(pre::equals)) { if (Arrays.stream(auditory).anyMatch(pre::equals)) {
Minecraft.getMinecraft().thePlayer.playSound("note.pling", 1, 2); Minecraft.getMinecraft().thePlayer.playSound("note.pling", 1, 2);

View file

@ -0,0 +1,48 @@
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;
@SuppressWarnings("DuplicatedCode")
public class Waves {
private static final byte[][]
deadEndWaveTimes = {{10, 20}, {10, 20}, {10, 20, 35}, {10, 20, 35}, {10, 22, 37}, {10, 22, 44}, {10, 25, 47}, {10, 25, 50}, {10, 22, 38}, {10, 24, 45}, {10, 25, 48}, {10, 25, 50}, {10, 25, 50}, {10, 25, 45}, {10, 25, 46}, {10, 24, 47}, {10, 24, 47}, {10, 24, 47}, {10, 24, 47}, {10, 24, 49}, {10, 23, 44}, {10, 23, 45}, {10, 23, 42}, {10, 23, 43}, {10, 23, 43}, {10, 23, 36}, {10, 24, 44}, {10, 24, 42}, {10, 24, 42}, {10, 24, 45}},
badBloodWaveTimes = {{10, 22}, {10, 22}, {10, 22}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 24, 38}, {10, 24, 38}, {10, 22, 34}, {10, 24, 38}, {10, 22, 34}},
alienArcadiumWaveTimes = {{10, 13, 16, 19}, {10, 14, 18, 22}, {10, 13, 16, 19}, {10, 14, 17, 21, 25, 28}, {10, 14, 18, 22, 26, 30}, {10, 14, 19, 23, 28, 32}, {10, 15, 19, 23, 27, 31}, {10, 15, 20, 25, 30, 35}, {10, 14, 19, 23, 28, 32}, {10, 16, 22, 27, 33, 38}, {10, 16, 21, 27, 32, 38}, {10, 16, 22, 28, 34, 40}, {10, 16, 22, 28, 34, 40}, {10, 16, 21, 26, 31, 36}, {10, 17, 24, 31, 38, 46}, {10, 16, 22, 27, 33, 38}, {10, 14, 19, 23, 28, 32}, {10, 14, 19, 23, 28, 32}, {10, 14, 18, 22, 26, 30}, {10, 15, 21, 26, 31, 36}, {10, 14, 19, 23, 28, 32}, {10, 14, 19, 23, 28, 34}, {10, 14, 18, 22, 26, 30}, {10, 14, 19, 23, 28, 32}, {10}, {10, 23, 36}, {10, 22, 34}, {10, 20, 30}, {10, 24, 38}, {10, 22, 34}, {10, 22, 34}, {10, 21, 32}, {10, 22, 34}, {10, 22, 34}, {10}, {10, 22, 34}, {10, 20, 31}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34, 37, 45}, {10, 21, 32}, {10, 22, 34}, {10, 13, 22, 25, 34, 37}, {10, 22, 34}, {10, 22, 34, 35}, {10, 21, 32, 35}, {10, 20, 30}, {10, 20, 30, 33}, {10, 21, 32}, {10, 22, 34, 37}, {10, 20, 30, 33}, {10, 22, 34, 37}, {10, 22, 34, 37}, {10, 20, 32, 35, 39}, {10, 16, 22, 28, 34, 40}, {10, 14, 18}, {10, 14, 18}, {10, 22, 34, 37, 38}, {10, 14, 18, 22, 26, 30}, {10, 20, 30, 33}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 27, 32}, {10, 14, 18, 22, 27, 32}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {5}, {5}, {5}, {5}, {5}},
prisonWaveTimes = {{10, 20}, {10, 20, 30}, {10, 17, 24, 31}, {10, 17, 24, 31}, {10, 20, 30}, {10, 20, 30}, {10, 20, 30}, {10, 25, 40}, {10, 25, 35}, {10, 25, 45}, {10, 25, 40}, {10, 25, 37}, {10, 22, 34}, {10, 25, 37}, {10, 25, 40}, {10, 22, 37}, {10, 22, 42}, {10, 25, 45}, {10, 25, 45}, {10, 25, 40}, {10, 20, 35, 55, 75}, {10, 25, 40}, {10, 30, 50}, {10, 30, 50}, {10, 25, 45}, {10, 30, 50}, {10, 25, 45}, {10, 30, 50}, {10, 30, 55}, {10}, {0, 15, 30, 45, 60, 75, 90, 105}};
@Contract(pure = true)
public static byte[] get(@NotNull Map map, int round) {
byte[] ret = new byte[]{0};
try {
switch (map) {
case DEAD_END:
ret = deadEndWaveTimes[round - 1];
break;
case BAD_BLOOD:
ret = badBloodWaveTimes[round - 1];
break;
case ALIEN_ARCADIUM:
ret = alienArcadiumWaveTimes[round - 1];
break;
case PRISON:
ret = prisonWaveTimes[round - 1];
break;
}
} catch (ArrayIndexOutOfBoundsException ignored) {
Minecraft.getMinecraft().thePlayer.addChatMessage(
new ChatComponentText("Achievement get: Round " + round + " " + map)
);
}
return ret;
}
public static byte getLastWave(@NotNull Map map, int round) {
byte[] aByte = get(map, round);
return aByte[aByte.length - 1];
}
}

View file

@ -149,7 +149,6 @@ public class Room {
}) })
}; };
} }
@Contract(" -> new") @Contract(" -> new")
public static Room @NotNull [] getP() { public static Room @NotNull [] getP() {
return new Room[]{ return new Room[]{
@ -173,8 +172,7 @@ public class Room {
new Window(2, 189, 144, 25), new Window(2, 189, 144, 25),
}), }),
new Room("Visitor's Room", "v", new Window[]{ new Room("Visitor's Room", "v", new Window[]{
new Window(1, 261, 144, -45), new Window(1, 261, 146, -45),
new Window(2, 273, 144, 13)
}), }),
new Room("Library", "l", new Window[]{ new Room("Library", "l", new Window[]{
new Window(1, 265, 158, 9), new Window(1, 265, 158, 9),
@ -190,8 +188,7 @@ public class Room {
}), }),
new Room("The Courts", "cs", new Window[]{ new Room("The Courts", "cs", new Window[]{
new Window(1, 285, 144, 81), new Window(1, 285, 144, 81),
new Window(2, 247, 144, 157), new Window(2, 211, 144, 157),
new Window(3, 211, 144, 157),
}), }),
new Room("Offices", "o", new Window[]{ new Room("Offices", "o", new Window[]{
new Window(1, 153, 144, 161), new Window(1, 153, 144, 161),
@ -208,7 +205,6 @@ public class Room {
}), }),
new Room("Basement Corridor", "bc", new Window[]{ new Room("Basement Corridor", "bc", new Window[]{
new Window(1, 231, 130, 29), new Window(1, 231, 130, 29),
new Window(2, 193, 130, 31),
}), }),
new Room("The Deep", "d", new Window[]{ new Room("The Deep", "d", new Window[]{
new Window(1, 167, 126, -45), new Window(1, 167, 126, -45),
@ -228,7 +224,6 @@ public class Room {
}), }),
new Room("Alleyway", "a", new Window[]{ new Room("Alleyway", "a", new Window[]{
new Window(1, 101, 144, 133), new Window(1, 101, 144, 133),
new Window(2, 147, 144, 117)
}), }),
new Room("Guard's Gunroom", "gr", new Window[]{ new Room("Guard's Gunroom", "gr", new Window[]{
new Window(1, 29, 148, 75), new Window(1, 29, 148, 75),
@ -255,10 +250,6 @@ public class Room {
new Window(1, 37, 144, 15), new Window(1, 37, 144, 15),
new Window(2, 37, 144, -11), new Window(2, 37, 144, -11),
}), }),
new Room("???", "?", new Window[]{
new Window(1, 191, 126, -67),
new Window(2, 207, 126, -67),
}),
}; };
} }

View file

@ -17,19 +17,18 @@ public class ChatHandler {
@SubscribeEvent @SubscribeEvent
public void difficultyChange(@NotNull final ClientChatReceivedEvent event) { public void difficultyChange(@NotNull final ClientChatReceivedEvent event) {
if (event.message.getUnformattedText().contains(":")) return; ZombiesUtils.getInstance().getGameManager().getGame().ifPresent(
final String message = STRIP_COLOR_PATTERN.matcher(event.message.getUnformattedText()).replaceAll("").trim(); game -> {
String message = STRIP_COLOR_PATTERN.matcher(event.message.getUnformattedText()).replaceAll("").trim();
if (LanguageSupport.containsHard(message)) { if (message.contains(":")) return;
ZombiesUtils.getInstance().getGameManager().setDifficulty(Difficulty.HARD); if (LanguageSupport.containsHard(message)) {
} else if (LanguageSupport.containsRIP(message)) { game.getGameMode().changeDifficulty(Difficulty.HARD);
ZombiesUtils.getInstance().getGameManager().setDifficulty(Difficulty.RIP); } else if (LanguageSupport.containsRIP(message)) {
} else { game.getGameMode().changeDifficulty(Difficulty.RIP);
ZombiesUtils.getInstance().getGameManager().getGame().ifPresent( } else if (LanguageSupport.isHelicopterIncoming(message)) {
game -> { game.helicopter();
if (LanguageSupport.isHelicopterIncoming(message)) game.helicopter();
} }
); }
} );
} }
} }

View file

@ -1,11 +1,9 @@
package com.github.stachelbeere1248.zombiesutils.handlers; package com.github.stachelbeere1248.zombiesutils.handlers;
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils; import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
import com.github.stachelbeere1248.zombiesutils.game.waves.Prefix; import com.github.stachelbeere1248.zombiesutils.game.SLA;
import com.github.stachelbeere1248.zombiesutils.game.waves.Wave; import com.github.stachelbeere1248.zombiesutils.game.waves.Waves;
import com.github.stachelbeere1248.zombiesutils.game.windows.Room; import com.github.stachelbeere1248.zombiesutils.game.windows.Room;
import com.github.stachelbeere1248.zombiesutils.game.windows.SLA;
import com.github.stachelbeere1248.zombiesutils.timer.Game;
import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard; import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.FontRenderer;
@ -33,6 +31,13 @@ public class RenderGameOverlayHandler {
return String.format("%d:%02d.%d", minutesPart, secondsPart, tenthSecondsPart); return String.format("%d:%02d.%d", minutesPart, secondsPart, tenthSecondsPart);
} }
private static String getWaveString(long waveTicks, int wave) {
final long minutesPart = (waveTicks * 50) / 60000;
final long secondsPart = ((waveTicks * 50) % 60000) / 1000;
final long tenthSecondsPart = ((waveTicks * 50) % 1000) / 100;
return String.format("W%d %d:%02d.%d", wave, minutesPart, secondsPart, tenthSecondsPart);
}
void toggleRL() { void toggleRL() {
if (rl == 0) rl = ZombiesUtils.getInstance().getConfig().getOffset(); if (rl == 0) rl = ZombiesUtils.getInstance().getConfig().getOffset();
else rl = 0; else rl = 0;
@ -46,13 +51,16 @@ public class RenderGameOverlayHandler {
game -> { game -> {
renderTime(game.getTimer().getRoundTime()); renderTime(game.getTimer().getRoundTime());
renderSpawnTime( renderSpawnTime(
game Waves.get(
game.getGameMode().getMap(),
game.getRound()
),
game.getTimer().getRoundTime()
); );
} }
); );
if (!Minecraft.getMinecraft().gameSettings.showDebugInfo) if (!Minecraft.getMinecraft().gameSettings.showDebugInfo) SLA.getInstance().ifPresent(sla -> renderSla(sla.getRooms()));
SLA.getInstance().ifPresent(sla -> renderSla(sla.getRooms()));
if (ZombiesUtils.getInstance().getConfig().getCpsToggle()) renderCPS(); if (ZombiesUtils.getInstance().getConfig().getCpsToggle()) renderCPS();
} }
@ -88,51 +96,42 @@ public class RenderGameOverlayHandler {
} }
} }
private void renderSpawnTime(final Game game) { private void renderSpawnTime(byte @NotNull [] waveTimes, short roundTicks) {
if (!ZombiesUtils.getInstance().getConfig().getSST() || Scoreboard.isNotZombies()) return; if (Scoreboard.isNotZombies() || !ZombiesUtils.getInstance().getConfig().getSST()) return;
final ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
final int screenWidth = scaledResolution.getScaledWidth(); final int length = waveTimes.length + 1;
final int screenHeight = scaledResolution.getScaledHeight();
final Wave[] round = ZombiesUtils.getInstance().getGameData().getRound(game.getGameMode(), game.getRound()).getWaves();
final int roundTime = game.getTimer().getRoundTime();
final int length = round.length + 1;
int heightIndex = 0; int heightIndex = 0;
int color = 0xFFFF55; int color = 0xFFFF55;
boolean faded = false;
for (Wave wave : round) { for (byte waveTime : waveTimes) {
final short spawnTime = (short) (wave.getTime() + rl); int clonedColor = color;
if (roundTime > spawnTime) { final short waveTicks = (short) ((waveTime * 20) + rl);
if (!ZombiesUtils.getInstance().getConfig().isSpawntimeShortened()) faded = true;
if (roundTicks > waveTicks) {
if (!ZombiesUtils.getInstance().getConfig().isSpawntimeShortened()) clonedColor = 0x555555;
else { else {
heightIndex++; heightIndex++;
continue; continue;
} }
} else faded = false; }
final String spawnTimeString = " W" + (heightIndex + 1) + ": " + getTimeString(spawnTime);
int width = fontRenderer.getStringWidth(spawnTimeString); final String time = getWaveString(waveTicks, heightIndex + 1);
final int width = fontRenderer.getStringWidth(time);
final ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
final int screenWidth = scaledResolution.getScaledWidth();
final int screenHeight = scaledResolution.getScaledHeight();
fontRenderer.drawStringWithShadow( fontRenderer.drawStringWithShadow(
spawnTimeString, time,
screenWidth - width, screenWidth - width,
screenHeight - fontRenderer.FONT_HEIGHT * (length - heightIndex), screenHeight - fontRenderer.FONT_HEIGHT * (length - heightIndex),
faded ? 0x666666 : color clonedColor
); );
for (Prefix prefix : wave.getPrefixes()) { if (clonedColor != 0x555555) color = 0xAAAAAA;
final String prefixString = prefix.getPrefix() + " ";
width += fontRenderer.getStringWidth(prefixString);
fontRenderer.drawStringWithShadow(
prefixString,
screenWidth - width,
screenHeight - fontRenderer.FONT_HEIGHT * (length - heightIndex),
faded ? prefix.getFadedColor() : prefix.getColor()
);
}
if (!faded) color = 0xAAAAAA;
heightIndex++; heightIndex++;
} }
} }
public void renderCPS() { public void renderCPS() {
final String cps = String.format("%2d", getClicks()); final String cps = String.format("%2d", getClicks());
final ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); final ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());

View file

@ -2,7 +2,6 @@ package com.github.stachelbeere1248.zombiesutils.handlers;
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils; import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.Vec3; import net.minecraft.util.Vec3;
import net.minecraftforge.client.event.RenderPlayerEvent; import net.minecraftforge.client.event.RenderPlayerEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@ -24,20 +23,9 @@ public class RenderPlayerHandler {
} }
private boolean inRange(@NotNull Vec3 playerOther) { private boolean inRange(@NotNull Vec3 playerOther) {
final int range = ZombiesUtils.getInstance().getConfig().getPlayerVisRange(); return playerOther.squareDistanceTo(Minecraft.getMinecraft().thePlayer.getPositionVector()) <= 16;
return playerOther.squareDistanceTo(Minecraft.getMinecraft().thePlayer.getPositionVector()) <= range * range;
} }
public void togglePlayerVisibility() { public void togglePlayerVisibility() {
this.visible = !this.visible; this.visible = !this.visible;
final String s;
if (this.visible) {
s = "§dPlayer Visibility §e is now §rON";
} else {
s = "§dPlayer Visibility §e is now §8OFF";
}
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(
s
));
} }
} }

View file

@ -39,8 +39,8 @@ public class MixinNetHandlerPlayClient {
if (!( if (!(
soundEffect.equals("mob.wither.spawn") soundEffect.equals("mob.wither.spawn")
|| (soundEffect.equals("mob.guardian.curse") || (soundEffect.equals("mob.guardian.curse")
&& !zombies_utils$alienUfoOpened) && !zombies_utils$alienUfoOpened)
)) return; )) return;
zombies_utils$alienUfoOpened = soundEffect.equals("mob.guardian.curse"); zombies_utils$alienUfoOpened = soundEffect.equals("mob.guardian.curse");
@ -49,7 +49,7 @@ public class MixinNetHandlerPlayClient {
ZombiesUtils.getInstance().getGameManager().splitOrNew(Scoreboard.getRound()); ZombiesUtils.getInstance().getGameManager().splitOrNew(Scoreboard.getRound());
} catch (ScoardboardException | InvalidMapException e) { } catch (ScoardboardException | InvalidMapException e) {
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("§cFailed to start or split timer. Please send a log to Stachelbeere1248.")); Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("§cFailed to start or split timer. Please send a log to Stachelbeere1248."));
ZombiesUtils.getInstance().getLogger().error(e.fillInStackTrace()); ZombiesUtils.getInstance().getLogger().error(e.getStackTrace());
} }
} }
@ -59,8 +59,8 @@ public class MixinNetHandlerPlayClient {
if (Scoreboard.isNotZombies()) return; if (Scoreboard.isNotZombies()) return;
final String message = packet.getMessage().getUnformattedText().trim(); final String message = packet.getMessage().getUnformattedText().trim();
String serverNumber; String serverNumber;
serverNumber = Scoreboard.getServerNumber().orElse(""); serverNumber = Scoreboard.getServerNumber().orElse("");
if (LanguageSupport.isWin(message)) ZombiesUtils.getInstance().getGameManager().endGame(serverNumber, true); if (LanguageSupport.isWin(message)) ZombiesUtils.getInstance().getGameManager().endGame(serverNumber,true);
if (LanguageSupport.isLoss(message)) ZombiesUtils.getInstance().getGameManager().endGame(serverNumber, false); if (LanguageSupport.isLoss(message)) ZombiesUtils.getInstance().getGameManager().endGame(serverNumber, false);
} }

View file

@ -2,9 +2,8 @@ package com.github.stachelbeere1248.zombiesutils.timer;
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils; import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
import com.github.stachelbeere1248.zombiesutils.game.GameMode; import com.github.stachelbeere1248.zombiesutils.game.GameMode;
import com.github.stachelbeere1248.zombiesutils.game.enums.Difficulty; import com.github.stachelbeere1248.zombiesutils.game.SLA;
import com.github.stachelbeere1248.zombiesutils.game.enums.Map; import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
import com.github.stachelbeere1248.zombiesutils.game.windows.SLA;
import com.github.stachelbeere1248.zombiesutils.handlers.Round1Correction; import com.github.stachelbeere1248.zombiesutils.handlers.Round1Correction;
import com.github.stachelbeere1248.zombiesutils.timer.recorder.Category; import com.github.stachelbeere1248.zombiesutils.timer.recorder.Category;
import com.github.stachelbeere1248.zombiesutils.timer.recorder.files.CategoryFile; import com.github.stachelbeere1248.zombiesutils.timer.recorder.files.CategoryFile;
@ -17,15 +16,15 @@ import org.jetbrains.annotations.NotNull;
public class Game { public class Game {
private final Timer timer; private final Timer timer;
private final GameMode gameMode;
private final GameFile gameFile; private final GameFile gameFile;
private final boolean roundOneRecorded; private final boolean roundOneRecorded;
private GameMode gameMode;
private Category category;
private int round; private int round;
private Category category;
private boolean escaping; private boolean escaping;
public Game(@NotNull final Map map, final String serverNumber) { public Game(@NotNull final Map map, final String serverNumber) {
this.gameMode = GameMode.getNormalForMap(map); this.gameMode = new GameMode(map);
this.timer = new Timer(); this.timer = new Timer();
this.gameFile = new GameFile(serverNumber, map); this.gameFile = new GameFile(serverNumber, map);
this.category = new Category(); this.category = new Category();
@ -35,9 +34,8 @@ public class Game {
MinecraftForge.EVENT_BUS.register(new Round1Correction(this.timer, serverNumber)); MinecraftForge.EVENT_BUS.register(new Round1Correction(this.timer, serverNumber));
if (ZombiesUtils.getInstance().getConfig().isSlaToggled()) SLA.instance = new SLA(map); if (ZombiesUtils.getInstance().getConfig().isSlaToggled()) SLA.instance = new SLA(map);
} }
public Game(@NotNull final Map map, final String serverNumber, final int round) { public Game(@NotNull final Map map, final String serverNumber, final int round) {
this.gameMode = GameMode.getNormalForMap(map); this.gameMode = new GameMode(map);
this.timer = new Timer(); this.timer = new Timer();
this.gameFile = new GameFile(serverNumber, map); this.gameFile = new GameFile(serverNumber, map);
this.category = new Category(); this.category = new Category();
@ -50,21 +48,15 @@ public class Game {
} }
public Timer getTimer() { public Timer getTimer() {
return this.timer; return this.timer;
} }
public void setCategory(Category category) { public void setCategory(Category category) {
this.category = category; this.category = category;
} }
public void changeDifficulty(final Difficulty difficulty) {
this.gameMode = this.gameMode.appliedDifficulty(difficulty);
}
public int getRound() { public int getRound() {
return round; return round;
} }
public GameMode getGameMode() { public GameMode getGameMode() {
return gameMode; return gameMode;
} }
@ -83,9 +75,8 @@ public class Game {
this.timer.split(); this.timer.split();
this.round = round + 1; this.round = round + 1;
} }
public void helicopter() { public void helicopter() {
if (!gameMode.isMap(Map.PRISON)) { if (!gameMode.is(Map.PRISON)) {
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("§cEscaping without playing prison???")); Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("§cEscaping without playing prison???"));
ZombiesUtils.getInstance().getLogger().error(Thread.currentThread().getStackTrace()); ZombiesUtils.getInstance().getLogger().error(Thread.currentThread().getStackTrace());
return; return;
@ -95,9 +86,9 @@ public class Game {
} }
private void record() { private void record() {
this.compareSegment(); this.compareSegment();
if (this.roundOneRecorded) this.compareBest(); if (this.roundOneRecorded) this.compareBest();
this.gameFile.setSegment(this.round, this.timer.getRoundTime()); this.gameFile.setSegment(this.round, this.timer.getRoundTime());
} }
public void compareSegment() throws IndexOutOfBoundsException { public void compareSegment() throws IndexOutOfBoundsException {
@ -108,7 +99,7 @@ public class Game {
if (bestSegment == (short) 0) categoryFile.setBestSegment(round, roundTime); if (bestSegment == (short) 0) categoryFile.setBestSegment(round, roundTime);
else if (roundTime < bestSegment) categoryFile.setBestSegment(round, roundTime); else if (roundTime < bestSegment) categoryFile.setBestSegment(round, roundTime);
final RecordMessageSender recordMessageSender = new RecordMessageSender(this.category.getName(), round, roundTime, bestSegment); final RecordMessageSender recordMessageSender = new RecordMessageSender(this.category.getName(), round, false, roundTime, bestSegment);
recordMessageSender.roundSplit(); recordMessageSender.roundSplit();
recordMessageSender.sendRecordMessage(); recordMessageSender.sendRecordMessage();
} }
@ -121,7 +112,7 @@ public class Game {
if (personalBest == 0) categoryFile.setPersonalBest(round, gameTime); if (personalBest == 0) categoryFile.setPersonalBest(round, gameTime);
else if (gameTime < personalBest) categoryFile.setPersonalBest(round, gameTime); else if (gameTime < personalBest) categoryFile.setPersonalBest(round, gameTime);
final RecordMessageSender recordMessageSender = new RecordMessageSender(category.getName(), round, gameTime, personalBest); final RecordMessageSender recordMessageSender = new RecordMessageSender(category.getName(), round, true, gameTime, personalBest);
if (!escaping) recordMessageSender.gameSplit(); if (!escaping) recordMessageSender.gameSplit();
else recordMessageSender.helicopterSplit(); else recordMessageSender.helicopterSplit();
recordMessageSender.sendRecordMessage(); recordMessageSender.sendRecordMessage();

View file

@ -1,20 +1,17 @@
package com.github.stachelbeere1248.zombiesutils.timer; package com.github.stachelbeere1248.zombiesutils.timer;
import com.github.stachelbeere1248.zombiesutils.game.enums.Difficulty;
import com.github.stachelbeere1248.zombiesutils.game.enums.Map; import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
import com.github.stachelbeere1248.zombiesutils.utils.InvalidMapException; import com.github.stachelbeere1248.zombiesutils.utils.InvalidMapException;
import com.github.stachelbeere1248.zombiesutils.utils.ScoardboardException; import com.github.stachelbeere1248.zombiesutils.utils.ScoardboardException;
import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard; import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
public class GameManager { public class GameManager {
private final HashMap<String, Game> GAMES; private final HashMap<String, Game> GAMES;
private Optional<Difficulty> queuedDifficulty = Optional.empty();
private String queuedDifficultyServer = "INVALID";
public GameManager() { public GameManager() {
GAMES = new HashMap<>(); GAMES = new HashMap<>();
@ -29,14 +26,14 @@ public class GameManager {
final Game game = GAMES.get(serverNumber); final Game game = GAMES.get(serverNumber);
if (isWin) { if (isWin) {
switch (game.getGameMode().getMap()) { switch (game.getGameMode().getMap()) {
case DEAD_END: case DEAD_END:
case BAD_BLOOD: case BAD_BLOOD:
case PRISON: case PRISON:
game.pass(30); game.pass(30);
break; break;
case ALIEN_ARCADIUM: case ALIEN_ARCADIUM:
game.pass(105); game.pass(105);
break; break;
} }
} }
GAMES.remove(serverNumber); GAMES.remove(serverNumber);
@ -46,25 +43,11 @@ public class GameManager {
public void splitOrNew(int round) throws ScoardboardException, InvalidMapException { public void splitOrNew(int round) throws ScoardboardException, InvalidMapException {
final String serverNumber = Scoreboard.getServerNumber().orElseThrow(ScoardboardException::new); final String serverNumber = Scoreboard.getServerNumber().orElseThrow(ScoardboardException::new);
if (GAMES.containsKey(serverNumber)) { if (GAMES.containsKey(serverNumber)) {
if (round == 0) newGame(serverNumber); if (round == 0) GAMES.put(serverNumber, new Game(Map.getMap().orElseThrow(InvalidMapException::new), serverNumber));
else GAMES.get(serverNumber).pass(round); else GAMES.get(serverNumber).pass(round);
} else newGame(serverNumber); } else {
} GAMES.put(serverNumber, new Game(Map.getMap().orElseThrow(InvalidMapException::new), serverNumber, round + 1));
private void newGame(@NotNull String serverNumber) throws InvalidMapException {
final Game game = new Game(Map.getMap().orElseThrow(InvalidMapException::new), serverNumber);
if (serverNumber.equals(queuedDifficultyServer)) {
this.queuedDifficulty.ifPresent(game::changeDifficulty);
} }
this.queuedDifficulty = Optional.empty();
this.GAMES.put(serverNumber, game);
}
public void setDifficulty(@NotNull Difficulty difficulty) {
this.queuedDifficultyServer = Scoreboard.getServerNumber().orElse("INVALID");
if (this.GAMES.containsKey(this.queuedDifficultyServer)) {
this.GAMES.get(this.queuedDifficultyServer).changeDifficulty(difficulty);
} else this.queuedDifficulty = Optional.of(difficulty);
} }
public Set<String> getGames() { public Set<String> getGames() {

View file

@ -9,43 +9,55 @@ import org.jetbrains.annotations.Contract;
public class RecordMessageSender { public class RecordMessageSender {
private final StringBuilder recordMessage; private final StringBuilder recordMessage;
private final int newTime; private final int roundTime;
private final int oldTime; private final int gameTime;
private final int oldPB;
private final int oldBS;
private final int round; private final int round;
private final String deltaString; private final String deltaString;
private final String timeString; private final String timeString;
private final boolean cumulative;
private String copyString; private String copyString;
public RecordMessageSender(final String categoryName, final int round, final boolean cumulative, final int newTime, final int oldTime) {
public RecordMessageSender(final String categoryName, final int round, final int newTime, final int oldTime) {
this.recordMessage = new StringBuilder( this.recordMessage = new StringBuilder(
"§l§a▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n§e Category: §d" + categoryName "§l§a▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n§e Category: §d" + categoryName
); );
this.newTime = newTime; if (cumulative) {
this.oldTime = oldTime; this.gameTime = newTime;
this.deltaString = oldTime != 0 ? " " + formattedDelta(newTime, oldTime) : ""; this.oldPB = oldTime;
this.roundTime = 0;
this.oldBS = 0;
} else {
this.gameTime = 0;
this.oldPB = 0;
this.roundTime = newTime;
this.oldBS = oldTime;
}
this.deltaString = oldTime != 0 ? formattedDelta(newTime, oldTime) : "";
this.timeString = formattedTime(newTime); this.timeString = formattedTime(newTime);
this.cumulative = cumulative;
this.round = round; this.round = round;
} }
public void sendRecordMessage() { public void sendRecordMessage() {
final ChatComponentText message = new ChatComponentText( final ChatComponentText message = new ChatComponentText(
this.recordMessage this.recordMessage
.append("\n§l§a▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬") .append("\n§l§a▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬")
.toString() .toString()
); );
message.setChatStyle(new ChatStyle().setChatClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, this.copyString))); message.setChatStyle(new ChatStyle().setChatClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, this.copyString)));
Minecraft.getMinecraft().thePlayer.addChatMessage(message); Minecraft.getMinecraft().thePlayer.addChatMessage(message);
} }
public void gameSplit() { public void gameSplit() {
final String announcement = newTime < oldTime && ZombiesUtils.getInstance().getConfig().getAnnouncePB() ? final String announcement = gameTime < oldPB && ZombiesUtils.getInstance().getConfig().getAnnouncePB() ?
"\n§e§l***§6§l NEW PERSONAL BEST! §e§l***" : ""; "\n§e§l***§6§l NEW PERSONAL BEST! §e§l***" : "";
this.recordMessage.append(announcement) this.recordMessage.append(announcement)
.append("\n§cRound ") .append("\n§cRound ")
.append(round) .append(round)
.append("§e finished at §a") .append("§e finished at §a")
.append(timeString) .append(timeString)
.append("§9") .append(" §9")
.append(deltaString) .append(deltaString)
.append("§e!"); .append("§e!");
this.copyString = deltaString.isEmpty() ? this.copyString = deltaString.isEmpty() ?
@ -54,37 +66,35 @@ public class RecordMessageSender {
} }
public void roundSplit() { public void roundSplit() {
final String announcement = newTime < oldTime && ZombiesUtils.getInstance().getConfig().getAnnouncePB() ? final String announcement = roundTime < oldBS && ZombiesUtils.getInstance().getConfig().getAnnouncePB() ?
"\n§e§l***§6§l NEW BEST SEGMENT! §e§l***" : ""; "\n§e§l***§6§l NEW BEST SEGMENT! §e§l***" : "";
final String timeString = formattedTime(newTime); final String timeString = formattedTime(roundTime);
final String deltaString = oldTime != 0 ? formattedDelta(newTime, oldTime) : ""; final String deltaString = oldBS != 0 ? formattedDelta(roundTime, oldBS) : "";
this.recordMessage.append(announcement) this.recordMessage.append(announcement)
.append("\n§cRound ") .append("\n§cRound ")
.append(round) .append(round)
.append("§e took §a") .append("§e took §a")
.append(timeString) .append(timeString)
.append("§9") .append(" §9")
.append(deltaString) .append(deltaString)
.append("§e!"); .append("§e!");
this.copyString = deltaString.isEmpty() ? this.copyString = deltaString.isEmpty() ?
String.format("Round %d took %s!", round, timeString) : String.format("Round %d took %s!", round, timeString) :
String.format("Round %d took %s (%s)!", round, timeString, deltaString); String.format("Round %d took %s (%s)!", round, timeString, deltaString);
} }
public void helicopterSplit() { public void helicopterSplit() {
final String announcement = newTime < oldTime && ZombiesUtils.getInstance().getConfig().getAnnouncePB() ? final String announcement = gameTime < oldPB && ZombiesUtils.getInstance().getConfig().getAnnouncePB() ?
"\n§e§l***§6§l NEW PERSONAL BEST! §e§l***" : ""; "\n§e§l***§6§l NEW PERSONAL BEST! §e§l***" : "";
this.recordMessage.append(announcement) this.recordMessage.append(announcement)
.append("\n§8§lHelicopter §r§ecalled at §a") .append("§8§lHelicopter §r§ecalled at §a")
.append(timeString) .append(timeString)
.append("§9") .append(" §9")
.append(deltaString) .append(deltaString)
.append("§e!"); .append("§e!");
this.copyString = deltaString.isEmpty() ? this.copyString = deltaString.isEmpty() ?
String.format("Helicopter called at %s!", timeString) : String.format("Helicopter called at %s!", timeString) :
String.format("Helicopter called at %s (%s)!", timeString, deltaString); String.format("Helicopter called at %s (%s)!", timeString, deltaString);
} }
@Contract(pure = true) @Contract(pure = true)
private String formattedTime(int time) { private String formattedTime(int time) {
time *= 50; time *= 50;
@ -95,7 +105,6 @@ public class RecordMessageSender {
(time % 100) / 10 (time % 100) / 10
); );
} }
@Contract(pure = true) @Contract(pure = true)
private String formattedDelta(int newTime, int oldTime) { private String formattedDelta(int newTime, int oldTime) {
final double delta = (double) (newTime - oldTime) / 20; final double delta = (double) (newTime - oldTime) / 20;

View file

@ -14,11 +14,9 @@ public class Timer {
public void correctStartTick() { public void correctStartTick() {
this.startTick = this.getCurrentTick() - 200; this.startTick = this.getCurrentTick() - 200;
} }
void split() { void split() {
this.roundStart = this.getGameTime(); this.roundStart = this.getGameTime();
} }
public int getGameTime() { public int getGameTime() {
return (int) (getCurrentTick() - startTick); return (int) (getCurrentTick() - startTick);
} }

View file

@ -2,6 +2,8 @@ package com.github.stachelbeere1248.zombiesutils.timer.recorder;
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils; import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
import com.github.stachelbeere1248.zombiesutils.game.GameMode; import com.github.stachelbeere1248.zombiesutils.game.GameMode;
import com.github.stachelbeere1248.zombiesutils.game.enums.Difficulty;
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
import com.github.stachelbeere1248.zombiesutils.timer.recorder.files.CategoryFile; import com.github.stachelbeere1248.zombiesutils.timer.recorder.files.CategoryFile;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -16,19 +18,19 @@ public class Category {
final File category; final File category;
if (ZombiesUtils.isHypixel()) category = new File(new File("zombies", "splits"), selectedCategory); if (ZombiesUtils.isHypixel()) category = new File(new File("zombies", "splits"), selectedCategory);
else category = new File(new File("zombies", "practise-splits"), selectedCategory); else category = new File(new File("zombies", "practise-splits"), selectedCategory);
categoryFiles[0] = new CategoryFile(category, GameMode.DEAD_END); categoryFiles[0] = new CategoryFile(category, new GameMode(Map.DEAD_END));
categoryFiles[1] = new CategoryFile(category, GameMode.DEAD_END_HARD); categoryFiles[1] = new CategoryFile(category, new GameMode(Map.DEAD_END, Difficulty.HARD));
categoryFiles[2] = new CategoryFile(category, GameMode.DEAD_END_RIP); categoryFiles[2] = new CategoryFile(category, new GameMode(Map.DEAD_END, Difficulty.RIP));
categoryFiles[3] = new CategoryFile(category, GameMode.BAD_BLOOD); categoryFiles[3] = new CategoryFile(category, new GameMode(Map.BAD_BLOOD));
categoryFiles[4] = new CategoryFile(category, GameMode.BAD_BLOOD_HARD); categoryFiles[4] = new CategoryFile(category, new GameMode(Map.BAD_BLOOD, Difficulty.HARD));
categoryFiles[5] = new CategoryFile(category, GameMode.BAD_BLOOD_RIP); categoryFiles[5] = new CategoryFile(category, new GameMode(Map.BAD_BLOOD, Difficulty.RIP));
categoryFiles[6] = new CategoryFile(category, GameMode.ALIEN_ARCADIUM); categoryFiles[6] = new CategoryFile(category, new GameMode(Map.ALIEN_ARCADIUM));
categoryFiles[7] = new CategoryFile(category, GameMode.PRISON); categoryFiles[7] = new CategoryFile(category, new GameMode(Map.PRISON));
categoryFiles[8] = new CategoryFile(category, GameMode.PRISON_HARD); categoryFiles[8] = new CategoryFile(category, new GameMode(Map.PRISON, Difficulty.HARD));
categoryFiles[9] = new CategoryFile(category, GameMode.PRISON_RIP); categoryFiles[9] = new CategoryFile(category, new GameMode(Map.PRISON, Difficulty.RIP));
this.name = Category.selectedCategory; this.name = Category.selectedCategory;
} }
@ -47,30 +49,22 @@ public class Category {
} }
public CategoryFile getByGameMode(@NotNull GameMode gameMode) { public CategoryFile getByGameMode(@NotNull GameMode gameMode) {
switch (gameMode) {
case DEAD_END:
return categoryFiles[0]; if (gameMode.is(Map.DEAD_END, Difficulty.NORMAL)) return categoryFiles[0];
case DEAD_END_HARD: else if (gameMode.is(Map.DEAD_END, Difficulty.HARD)) return categoryFiles[1];
return categoryFiles[1]; else if (gameMode.is(Map.DEAD_END, Difficulty.RIP)) return categoryFiles[2];
case DEAD_END_RIP:
return categoryFiles[2]; else if (gameMode.is(Map.BAD_BLOOD, Difficulty.NORMAL)) return categoryFiles[3];
case BAD_BLOOD: else if (gameMode.is(Map.BAD_BLOOD, Difficulty.HARD)) return categoryFiles[4];
return categoryFiles[3]; else if (gameMode.is(Map.BAD_BLOOD, Difficulty.RIP)) return categoryFiles[5];
case BAD_BLOOD_HARD:
return categoryFiles[4]; else if (gameMode.is(Map.ALIEN_ARCADIUM, Difficulty.NORMAL)) return categoryFiles[6];
case BAD_BLOOD_RIP:
return categoryFiles[5]; else if (gameMode.is(Map.PRISON, Difficulty.NORMAL)) return categoryFiles[7];
case ALIEN_ARCADIUM: else if (gameMode.is(Map.PRISON, Difficulty.HARD)) return categoryFiles[8];
return categoryFiles[6]; else if (gameMode.is(Map.PRISON, Difficulty.RIP)) return categoryFiles[9];
case PRISON: else throw new IllegalStateException("Unexpected value: " + gameMode);
return categoryFiles[7];
case PRISON_HARD:
return categoryFiles[8];
case PRISON_RIP:
return categoryFiles[9];
default:
throw new IllegalStateException("Unexpected value: " + gameMode);
}
} }
public String getName() { public String getName() {

View file

@ -18,7 +18,7 @@ public class CategoryFile extends File {
public CategoryFile(File category, @NotNull GameMode gameMode) { public CategoryFile(File category, @NotNull GameMode gameMode) {
// Game-directory -> custom category -> file named "MAP_DIFFICULTY.times" // Game-directory -> custom category -> file named "MAP_DIFFICULTY.times"
// Content encoded in StandardCharsets.UTF_16 // Content encoded in StandardCharsets.UTF_16
super(category, gameMode + ".times"); super(category, gameMode.getMap() + "_" + gameMode.getDifficulty() + ".times");
this.gameMode = gameMode; this.gameMode = gameMode;
this.data = FileManager.categoryReadOrCreate(this); this.data = FileManager.categoryReadOrCreate(this);
} }

View file

@ -51,7 +51,6 @@ public class LanguageSupport {
}; };
return Arrays.stream(words).anyMatch(input::contains); return Arrays.stream(words).anyMatch(input::contains);
} }
public static boolean isHelicopterIncoming(@NotNull String input) { public static boolean isHelicopterIncoming(@NotNull String input) {
final String[] words = { final String[] words = {
"The Helicopter is on its way! Hold out for 120 more seconds!" "The Helicopter is on its way! Hold out for 120 more seconds!"
@ -71,7 +70,6 @@ public class LanguageSupport {
throw new IllegalStateException("Unexpected value: " + language); throw new IllegalStateException("Unexpected value: " + language);
} }
} }
public static String[] getLanguages() { public static String[] getLanguages() {
return LANGUAGES; return LANGUAGES;
} }

View file

@ -1,692 +0,0 @@
[
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"SLIME"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"SLIME"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"SLIME"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"SLIME"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON",
"BOSS"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"HBM"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"HBM"
]
},
{
"ticks": 480,
"prefixes": [
"HBM"
]
},
{
"ticks": 760,
"prefixes": [
"HBM"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 760,
"prefixes": [
"WINDOW",
"HBM"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 760,
"prefixes": [
"WINDOW",
"HBM"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"HBM",
"BOSS"
]
},
{
"ticks": 680,
"prefixes": [
"HBM",
"WINDOW"
]
}
]
}
]

View file

@ -1,687 +0,0 @@
[
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"SLIME"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"SLIME"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"SLIME"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON",
"BOSS"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"HBM"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"HBM"
]
},
{
"ticks": 480,
"prefixes": [
"HBM"
]
},
{
"ticks": 760,
"prefixes": [
"HBM"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 760,
"prefixes": [
"WINDOW",
"HBM"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 760,
"prefixes": [
"WINDOW",
"HBM"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"HBM",
"BOSS"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"HBM"
]
}
]
}
]

View file

@ -1,697 +0,0 @@
[
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"SLIME"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"SLIME"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"SLIME"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"SLIME"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"SLIME"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"BOSS"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"WITHER_SKELETON"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"WITHER_SKELETON",
"BOSS"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"WITHER_SKELETON",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"HBM"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"HBM"
]
},
{
"ticks": 480,
"prefixes": [
"HBM"
]
},
{
"ticks": 760,
"prefixes": [
"HBM"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 760,
"prefixes": [
"WINDOW",
"HBM"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW",
"HBM"
]
},
{
"ticks": 760,
"prefixes": [
"WINDOW",
"HBM"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"HBM",
"BOSS"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW",
"HBM",
"BOSS"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW",
"HBM"
]
}
]
}
]

View file

@ -1,658 +0,0 @@
[
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 700,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 700,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 740,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 880,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 760,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 960,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"BLAZES"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW",
"BOSS"
]
},
{
"ticks": 920,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"BLAZES"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 980,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 880,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 840,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 860,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 860,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 720,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 880,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 840,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 840,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW",
"BOSS"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
}
]

View file

@ -1,655 +0,0 @@
[
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 700,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 700,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 740,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 880,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 760,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 960,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"BLAZES"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 920,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"BLAZES"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 980,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 880,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 840,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 860,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 860,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 720,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 880,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 840,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 840,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
}
]

View file

@ -1,663 +0,0 @@
[
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 700,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 700,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 740,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 880,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 760,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW",
"BOSS"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 960,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"BLAZES"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW",
"BOSS"
]
},
{
"ticks": 920,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 940,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 980,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 880,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 840,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 860,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"BOSS"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW",
"BOSS"
]
},
{
"ticks": 860,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 460,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 720,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 880,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 840,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 840,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"BOSS"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW",
"BOSS"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW",
"BOSS"
]
}
]
}
]

View file

@ -1,738 +0,0 @@
[
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"CELL"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"CELL"
]
},
{
"ticks": 340,
"prefixes": [
"CELL"
]
},
{
"ticks": 480,
"prefixes": [
"CELL"
]
},
{
"ticks": 620,
"prefixes": [
"CELL",
"POLICE"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 340,
"prefixes": [
"CELL"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 620,
"prefixes": [
"CELL",
"POLICE"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW",
"POLICE"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"CELL",
"POLICE"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"CELL"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW",
"CELL"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW",
"CELL"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"CELL",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"CELL"
]
},
{
"ticks": 700,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"CELL"
]
},
{
"ticks": 900,
"prefixes": [
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 740,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 740,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 740,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 840,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"BOSS",
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 700,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1100,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1500,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1100,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 0,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 300,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1200,
"prefixes": [
"BOSS",
"WINDOW"
]
},
{
"ticks": 1500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1800,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 2100,
"prefixes": [
"WINDOW"
]
}
]
}
]

View file

@ -1,738 +0,0 @@
[
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"CELL"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"CELL"
]
},
{
"ticks": 340,
"prefixes": [
"CELL"
]
},
{
"ticks": 480,
"prefixes": [
"CELL"
]
},
{
"ticks": 620,
"prefixes": [
"CELL",
"POLICE"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 340,
"prefixes": [
"CELL"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 620,
"prefixes": [
"CELL",
"POLICE"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW",
"POLICE"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"CELL",
"POLICE"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"CELL"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW",
"CELL"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW",
"CELL"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"CELL",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"CELL"
]
},
{
"ticks": 700,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"CELL"
]
},
{
"ticks": 900,
"prefixes": [
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 740,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 740,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 740,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 840,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"BOSS",
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 700,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1100,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1500,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1100,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 0,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 300,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1200,
"prefixes": [
"BOSS",
"WINDOW"
]
},
{
"ticks": 1500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1800,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 2100,
"prefixes": [
"WINDOW"
]
}
]
}
]

View file

@ -1,738 +0,0 @@
[
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"CELL"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"CELL"
]
},
{
"ticks": 340,
"prefixes": [
"CELL"
]
},
{
"ticks": 480,
"prefixes": [
"CELL"
]
},
{
"ticks": 620,
"prefixes": [
"CELL",
"POLICE"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 340,
"prefixes": [
"CELL"
]
},
{
"ticks": 480,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 620,
"prefixes": [
"CELL",
"POLICE"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW",
"POLICE"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"CELL",
"POLICE"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"CELL"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW",
"CELL"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW",
"CELL"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"CELL",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"CELL"
]
},
{
"ticks": 700,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"CELL"
]
},
{
"ticks": 900,
"prefixes": [
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW",
"POLICE"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 740,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 680,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 740,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 740,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 440,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 840,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"BOSS",
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 400,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 700,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1100,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1500,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 800,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1000,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1100,
"prefixes": [
"WINDOW"
]
}
]
},
{
"waves": [
{
"ticks": 200,
"prefixes": [
"BOSS"
]
}
]
},
{
"waves": [
{
"ticks": 0,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 300,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 600,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 900,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1200,
"prefixes": [
"BOSS",
"WINDOW"
]
},
{
"ticks": 1500,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 1800,
"prefixes": [
"WINDOW"
]
},
{
"ticks": 2100,
"prefixes": [
"WINDOW"
]
}
]
}
]

View file

@ -2,16 +2,16 @@
{ {
"modid": "${modid}", "modid": "${modid}",
"name": "Zombies Utils", "name": "Zombies Utils",
"description": "An all-in-one mod for Hypixel Zombies. Targets legit speed-runners.", "description": "",
"version": "${version}", "version": "${version}",
"mcversion": "${mcversion}", "mcversion": "${mcversion}",
"url": "https://github.com/Stachelbeere1248/zombies-utils", "url": "https://github.com/Stachelbeere1248/zombies-utils",
"updateUrl": "https://github.com/Stachelbeere1248/zombies-utils/blob/master/update.json", "updateUrl": "https://github.com/Stachelbeere1248/zombies-utils/releases",
"authorList": [ "authorList": [
"Stachelbeere1248" "Stachelbeere1248"
], ],
"credits": "Seosean, thamid-23", "credits": "Seosean, thamid-23",
"logoFile": "zombiesutils.png", "logoFile": "",
"screenshots": [], "screenshots": [],
"dependencies": [] "dependencies": []
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 273 B

View file

@ -1,13 +0,0 @@
{
"homepage": "https://github.com/Stachelbeere1248/zombies-utils/releases",
"promos": {
"1.8.9-latest": "1.3.7",
"1.8.9-recommended": "1.3.7"
},
"1.8.9": {
"1.3.6": "SST Prefixes, added update checker url",
"1.3.7-PRE_1": "patch: difficiluty detection",
"1.3.7-PRE_2": "fix instant crash",
"1.3.7": "mark release, fix faded prefix colors"
}
}