Compare commits

..

No commits in common. "neoforge" and "neoforge-1.26.3" have entirely different histories.

15 changed files with 332 additions and 1485 deletions

View file

@ -1,64 +1,5 @@
# Upcoming changes # Upcoming changes
# Version Forge-1.26.5
Update TBM\_Config.toml to have haste\_speed and slow\_speed for all mob
entries.
Update Config to merge in new changes. This means that the existing config will
be overwritten much less frequently (if ever).
Update to Forge 52.0.26 (MC 1.21.1).
# Version NeoForge-1.26.5-MC-1.21.1
Update TBM\_Config.toml to have haste\_speed and slow\_speed for all mob
entries.
Update ClientConfigGui to quit to mod-menu screen in NeoForge (before, it quit
to the main screen or current game).
Update Config to merge in new changes. This means that the existing config will
be overwritten much less frequently (if ever).
Update to NeoForge 21.1.74 (MC 1.21.1).
# Version NeoForge-1.26.5
Update TBM\_Config.toml to have haste\_speed and slow\_speed for all mob
entries.
Update ClientConfigGui to quit to mod-menu screen in NeoForge (before, it quit
to the main screen or current game).
Update Config to merge in new changes. This means that the existing config will
be overwritten much less frequently (if ever).
Update to NeoForge 21.3.11-beta (MC 1.21.3).
# Version Forge-1.26.4
[Add support for "per-player-stats" in Turn-Based-Battle.](https://stephen-seo.github.io/TurnBasedMinecraftMod/server_config/#per-player-settings)
Update to Forge 52.0.24 (MC 1.21.1).
# Version NeoForge-1.26.4-MC-1.21.1
[Add support for "per-player-stats" in Turn-Based-Battle.](https://stephen-seo.github.io/TurnBasedMinecraftMod/server_config/#per-player-settings)
Update to Neoforge 21.1.73 (Minecraft 1.21.1).
# Version NeoForge-1.26.4
[Add support for "per-player-stats" in Turn-Based-Battle.](https://stephen-seo.github.io/TurnBasedMinecraftMod/server_config/#per-player-settings)
Update to NeoForge 21.3.6-beta (MC 1.21.3).
# Version Forge-1.26.3
Tweak to "Ping" packet to not create client-local Battle instance if it does
not exist.
# Version NeoForge-1.26.3 # Version NeoForge-1.26.3
Port to NeoForge 21.3.2-beta (MC 1.21.3). Port to NeoForge 21.3.2-beta (MC 1.21.3).
@ -66,9 +7,6 @@ Port to NeoForge 21.3.2-beta (MC 1.21.3).
Note that MC 1.21.1 (NeoForge 21.1.72) will still be supported in a separate Note that MC 1.21.1 (NeoForge 21.1.72) will still be supported in a separate
branch (neoforge\_mc1.21.1) until MC version 1.22 is released. branch (neoforge\_mc1.21.1) until MC version 1.22 is released.
Tweak to "Ping" packet to not create client-local Battle instance if it does
not exist.
# Version NeoForge-1.26.3-MC-1.21.1 # Version NeoForge-1.26.3-MC-1.21.1
Tweak to "Ping" packet to not create client-local Battle instance if it does Tweak to "Ping" packet to not create client-local Battle instance if it does

5
FAQ.md
View file

@ -79,11 +79,6 @@ command](https://youtu.be/9xkbHNWkcIY).
## I updated the mod, but now my config changes are back to default, what happened? ## I updated the mod, but now my config changes are back to default, what happened?
*As of Version 1.26.5 and onwards, this should happen less often!*
Version 1.26.5 introduces more robust config updating such that entries that
exist in the default config, but not in the current config will be appended to
the current config.
Sometimes, I add new mob entries to the config, and increment the version Sometimes, I add new mob entries to the config, and increment the version
number of the config. When the server/client starts, it checks the default number of the config. When the server/client starts, it checks the default
config's version number with the existing config's version number. If the config's version number with the existing config's version number. If the

View file

@ -11,10 +11,6 @@ https://www.curseforge.com/minecraft/mc-mods/turnbasedminecraft/files
https://modrinth.com/mod/turnbasedmc https://modrinth.com/mod/turnbasedmc
https://git.seodisparate.com/stephenseo/TurnBasedMinecraftMod/releases https://git.seodisparate.com/stephenseo/TurnBasedMinecraftMod/releases
# Documentation Page
https://stephen-seo.github.io/TurnBasedMinecraftMod/
# Forge or NeoForge # Forge or NeoForge
The `forge` branch tracks the version of the mod for Minecraft Forge. The `forge` branch tracks the version of the mod for Minecraft Forge.
@ -36,14 +32,10 @@ The config file `.minecraft/config/TurnBasedMinecraft/TBM_Config.toml` is commen
with info on what each option does. ~~It will also be moved if a newer version with info on what each option does. ~~It will also be moved if a newer version
of this mod has a newer version of the config file (usually renamed with a of this mod has a newer version of the config file (usually renamed with a
timestamp).~~ ~~I will try my best to not move the previous version config, but rather timestamp).~~ ~~I will try my best to not move the previous version config, but rather
edit the previous version config to have new options.~~ ~~When a new config version is made, edit the previous version config to have new options.~~ When a new config version is made,
usually because a new entry has been added, the existing config is renamed to a file with usually because a new entry has been added, the existing config is renamed to a file with
a timestamp in the filename of when it was replaced. One can set a config option in the a timestamp in the filename of when it was replaced. One can set a config option in the
config to prevent it being overwritten if necessary.~~ config to prevent it being overwritten if necessary.
*As of version 1.26.5 of this mod, this should happen less frequently!*
Version 1.26.5 introduces changes that allow entries that exist in the default
config but not in the current config to be appended in the current config.
Some options in the config file only affect the Server, and ~~some only affect the Client~~. Some options in the config file only affect the Server, and ~~some only affect the Client~~.
Client config has been moved to a Client config has been moved to a
@ -82,7 +74,7 @@ configured for them.)
Simply invoke `./gradlew build` in the mod directory and after some time the Simply invoke `./gradlew build` in the mod directory and after some time the
finished jar will be saved at finished jar will be saved at
`build/libs/TurnBasedMinecraft-NeoForge-1.26.5-all.jar` `build/libs/TurnBasedMinecraft-NeoForge-1.26.3-all.jar`
# Reproducibility # Reproducibility
@ -100,7 +92,7 @@ which is licensed under the [MIT License](https://github.com/kevinstadler/JavaMP
# Frequently Asked Questions # Frequently Asked Questions
[See the FAQ page.](https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/FAQ.md) [See the FAQ page.](https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/master/FAQ.md)
# Related Videos # Related Videos

View file

@ -4,123 +4,6 @@ Starting with version 1.24.0 of this mod, this file will list what version of
Java was used to compile the jars. In theory, using the same version of Java Java was used to compile the jars. In theory, using the same version of Java
should result in an identical jar due to reproducible builds. should result in an identical jar due to reproducible builds.
## NeoForge 1.26.5
$ java --version
openjdk 21.0.5 2024-10-15
OpenJDK Runtime Environment (build 21.0.5+11)
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
$ javac --version
javac 21.0.5
$ sha256sum build/libs/TurnBasedMinecraft-NeoForge-1.26.5-all.jar
b02d0abf6f2fbc5c3b718b548309efacb159ec8f86c7d2d653fc0b73234e761a build/libs/TurnBasedMinecraft-NeoForge-1.26.5-all.jar
## NeoForge 1.26.5-MC-1.21.1
$ java --version
openjdk 21.0.5 2024-10-15
OpenJDK Runtime Environment (build 21.0.5+11)
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
$ javac --version
javac 21.0.5
$ sha256sum build/libs/TurnBasedMinecraft-NeoForge-1.26.5-MC-1.21.1-all.jar
c529ebe3dd48608afd27e3393b201036ce84d3be0a850cdf48039fbc4820629e build/libs/TurnBasedMinecraft-NeoForge-1.26.5-MC-1.21.1-all.jar
## Forge 1.26.5
$ java --version
openjdk 21.0.5 2024-10-15
OpenJDK Runtime Environment (build 21.0.5+11)
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
$ javac --version
javac 21.0.5
$ sha256sum build/libs/TurnBasedMinecraft-Forge-1.26.5-all.jar
c8ed6e2e9a433c40901d41ec604bc6260fc5b231f5d3859832ecbe76b0f5a9e2 build/libs/TurnBasedMinecraft-Forge-1.26.5-all.jar
## NeoForge 1.26.4
$ java --version
openjdk 21.0.5 2024-10-15
OpenJDK Runtime Environment (build 21.0.5+11)
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
$ javac --version
javac 21.0.5
$ sha256sum build/libs/TurnBasedMinecraft-NeoForge-1.26.4-all.jar
ddab3e58638ba70c7b10f84f4aa7ac81e8e5a63cb47d0ebf7e7aa4bcf3c0a1ba build/libs/TurnBasedMinecraft-NeoForge-1.26.4-all.jar
## NeoForge 1.26.4-MC-1.21.1
$ java --version
openjdk 21.0.5 2024-10-15
OpenJDK Runtime Environment (build 21.0.5+11)
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
$ javac --version
javac 21.0.5
$ sha256sum build/libs/TurnBasedMinecraft-NeoForge-1.26.4-MC-1.21.1-all.jar
e49665c67452cae8fab8f356d187b860893885afbe6dab1e3a869331a12f1cf5 build/libs/TurnBasedMinecraft-NeoForge-1.26.4-MC-1.21.1-all.jar
## Forge 1.26.4
$ java --version
openjdk 21.0.5 2024-10-15
OpenJDK Runtime Environment (build 21.0.5+11)
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
$ javac --version
javac 21.0.5
$ sha256sum build/libs/TurnBasedMinecraft-Forge-1.26.4-all.jar
2052b1e8f6a49374b6a9bbc0c0547c1972d5454ea9afa5f0455c534285d6cada build/libs/TurnBasedMinecraft-Forge-1.26.4-all.jar
## NeoForge 1.26.3
$ java --version
openjdk 21.0.5 2024-10-15
OpenJDK Runtime Environment (build 21.0.5+11)
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
$ javac --version
javac 21.0.5
$ sha256sum build/libs/TurnBasedMinecraft-NeoForge-1.26.3-all.jar
2c8f17499a475f22493244e16f499bed46ea6a32a20f6bd2be5b3151464b2225 build/libs/TurnBasedMinecraft-NeoForge-1.26.3-all.jar
## NeoForge 1.26.3-MC-1.21.1
$ java --version
openjdk 21.0.5 2024-10-15
OpenJDK Runtime Environment (build 21.0.5+11)
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
$ javac --version
javac 21.0.5
$ sha256sum build/libs/TurnBasedMinecraft-NeoForge-1.26.3-MC-1.21.1-all.jar
311018353109da4d9a49379d9ebc29dbac7e2aef3331ec177bd0edc300d15b89 /home/public/TurnBasedMC/TurnBasedMinecraft-NeoForge-1.26.3-MC-1.21.1-all.jar
## Forge 1.26.3
$ java --version
openjdk 21.0.5 2024-10-15
OpenJDK Runtime Environment (build 21.0.5+11)
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
$ javac --version
javac 21.0.5
$ sha256sum build/libs/TurnBasedMinecraft-Forge-1.26.3-all.jar
5fdaffd14f75c2340a410c37811a5f7644ade3c6852db4b982bf3161bab1aae7 build/libs/TurnBasedMinecraft-Forge-1.26.3-all.jar
## NeoForge 1.26.2 ## NeoForge 1.26.2
$ java --version $ java --version

View file

@ -21,7 +21,7 @@ minecraft_version=1.21.3
minecraft_version_range=[1.21.3, 1.22) minecraft_version_range=[1.21.3, 1.22)
# The Neo version must agree with the Minecraft version to get a valid artifact # The Neo version must agree with the Minecraft version to get a valid artifact
neo_version=21.3.11-beta neo_version=21.3.2-beta
# The Neo version range can use any version of Neo as bounds # The Neo version range can use any version of Neo as bounds
neo_version_range=[21.3.0,) neo_version_range=[21.3.0,)
# The loader version range can only use the major version of FML as bounds # The loader version range can only use the major version of FML as bounds
@ -37,7 +37,7 @@ mod_name=TurnBasedMinecraftMod
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=MIT mod_license=MIT
# The mod version. See https://semver.org/ # The mod version. See https://semver.org/
mod_version=1.26.5 mod_version=1.26.3
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources. # This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html # See https://maven.apache.org/guides/mini/guide-naming-conventions.html

View file

@ -20,7 +20,6 @@ public class ClientConfigGui extends net.minecraft.client.gui.screens.Screen {
private Checkbox affectedByMasterVolCheckbox = null; private Checkbox affectedByMasterVolCheckbox = null;
private Checkbox affectedByMusicVolCheckbox = null; private Checkbox affectedByMusicVolCheckbox = null;
private SliderPercentage volumeSlider = null; private SliderPercentage volumeSlider = null;
private Screen parentScreen = null;
public ClientConfigGui(ModContainer container, Screen parent) { public ClientConfigGui(ModContainer container, Screen parent) {
super(Component.literal("TurnBasedMC Client Config")); super(Component.literal("TurnBasedMC Client Config"));
@ -28,8 +27,6 @@ public class ClientConfigGui extends net.minecraft.client.gui.screens.Screen {
dirtyFlag = true; dirtyFlag = true;
accepted = false; accepted = false;
this.parentScreen = parent;
} }
public void onDirty() { public void onDirty() {
@ -178,7 +175,7 @@ public class ClientConfigGui extends net.minecraft.client.gui.screens.Screen {
addRenderableWidget(volumeSlider); addRenderableWidget(volumeSlider);
addRenderableWidget(Button.builder(Component.literal("Cancel"), addRenderableWidget(Button.builder(Component.literal("Cancel"),
(b) -> Minecraft.getInstance().setScreen(this.parentScreen)) (b) -> Minecraft.getInstance().setScreen(null))
.bounds(this.width / 2 - widget_width + widget_x_offset, .bounds(this.width / 2 - widget_width + widget_x_offset,
this.height - widget_height, widget_width, widget_height).build()); this.height - widget_height, widget_width, widget_height).build());
addRenderableWidget(Button.builder(Component.literal("Accept"), (b) -> { addRenderableWidget(Button.builder(Component.literal("Accept"), (b) -> {
@ -228,7 +225,7 @@ public class ClientConfigGui extends net.minecraft.client.gui.screens.Screen {
public void render(GuiGraphics pGuiGraphics, int pMouseX, int pMouseY, float pPartialTick) { public void render(GuiGraphics pGuiGraphics, int pMouseX, int pMouseY, float pPartialTick) {
if (accepted) { if (accepted) {
doAccepted(); doAccepted();
Minecraft.getInstance().setScreen(this.parentScreen); Minecraft.getInstance().setScreen(null);
return; return;
} }
if (dirtyFlag) { if (dirtyFlag) {

View file

@ -481,27 +481,22 @@ public class ClientProxy extends CommonProxy {
MutableComponent text = Component.literal("Edit what value? "); MutableComponent text = Component.literal("Edit what value? ");
text.setStyle(text.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)).withBold(false)); text.setStyle(text.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)).withBold(false));
MutableComponent option; MutableComponent option = Component.literal("IgB");
MutableComponent value; // HoverEvent.Action.SHOW_TEXT is probably SHOW_TEXT
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit ignoreBattle"))
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("IgnoreBattle"))));
MutableComponent value = Component.literal("(" + pkt.getEntityInfo().ignoreBattle + ") ");
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
option.getSiblings().add(value);
text.getSiblings().add(option);
if (pkt.getEntityInfo().playerName.isEmpty()) { option = Component.literal("AP");
option = Component.literal("IgB"); option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackPower"))
// HoverEvent.Action.SHOW_TEXT is probably SHOW_TEXT .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("AttackPower"))));
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit ignoreBattle")) value = Component.literal("(" + pkt.getEntityInfo().attackPower + ") ");
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("IgnoreBattle")))); value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
value = Component.literal("(" + pkt.getEntityInfo().ignoreBattle + ") "); option.getSiblings().add(value);
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF))); text.getSiblings().add(option);
option.getSiblings().add(value);
text.getSiblings().add(option);
option = Component.literal("AP");
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackPower"))
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("AttackPower"))));
value = Component.literal("(" + pkt.getEntityInfo().attackPower + ") ");
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
option.getSiblings().add(value);
text.getSiblings().add(option);
}
option = Component.literal("APr"); option = Component.literal("APr");
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackProbability")) option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackProbability"))
@ -511,15 +506,13 @@ public class ClientProxy extends CommonProxy {
option.getSiblings().add(value); option.getSiblings().add(value);
text.getSiblings().add(option); text.getSiblings().add(option);
if (pkt.getEntityInfo().playerName.isEmpty()) { option = Component.literal("AV");
option = Component.literal("AV"); option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackVariance"))
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackVariance")) .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("AttackVariance"))));
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("AttackVariance")))); value = Component.literal("(" + pkt.getEntityInfo().attackVariance + ") ");
value = Component.literal("(" + pkt.getEntityInfo().attackVariance + ") "); value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF))); option.getSiblings().add(value);
option.getSiblings().add(value); text.getSiblings().add(option);
text.getSiblings().add(option);
}
option = Component.literal("AE"); option = Component.literal("AE");
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackEffect")) option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackEffect"))
@ -537,23 +530,21 @@ public class ClientProxy extends CommonProxy {
option.getSiblings().add(value); option.getSiblings().add(value);
text.getSiblings().add(option); text.getSiblings().add(option);
if (pkt.getEntityInfo().playerName.isEmpty()) { option = Component.literal("DD");
option = Component.literal("DD"); option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit defenseDamage"))
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit defenseDamage")) .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DefenseDamage"))));
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DefenseDamage")))); value = Component.literal("(" + pkt.getEntityInfo().defenseDamage + ") ");
value = Component.literal("(" + pkt.getEntityInfo().defenseDamage + ") "); value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF))); option.getSiblings().add(value);
option.getSiblings().add(value); text.getSiblings().add(option);
text.getSiblings().add(option);
option = Component.literal("DDPr"); option = Component.literal("DDPr");
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit defenseDamageProbability")) option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit defenseDamageProbability"))
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DefenseDamageProbability")))); .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DefenseDamageProbability"))));
value = Component.literal("(" + pkt.getEntityInfo().defenseDamageProbability + "%) "); value = Component.literal("(" + pkt.getEntityInfo().defenseDamageProbability + "%) ");
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF))); value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
option.getSiblings().add(value); option.getSiblings().add(value);
text.getSiblings().add(option); text.getSiblings().add(option);
}
option = Component.literal("E"); option = Component.literal("E");
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit evasion")) option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit evasion"))
@ -571,55 +562,37 @@ public class ClientProxy extends CommonProxy {
option.getSiblings().add(value); option.getSiblings().add(value);
text.getSiblings().add(option); text.getSiblings().add(option);
option = Component.literal("HS"); option = Component.literal("C");
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit hasteSpeed")) option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit category"))
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("HasteSpeed")))); .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("Category"))));
value = Component.literal("(" + pkt.getEntityInfo().hasteSpeed + ") "); value = Component.literal("(" + pkt.getEntityInfo().category + ") ");
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF))); value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
option.getSiblings().add(value); option.getSiblings().add(value);
text.getSiblings().add(option); text.getSiblings().add(option);
option = Component.literal("SS"); option = Component.literal("DecA");
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit slowSpeed")) option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit decisionAttack"))
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("SlowSpeed")))); .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DecisionAttack"))));
value = Component.literal("(" + pkt.getEntityInfo().slowSpeed + ") "); value = Component.literal("(" + pkt.getEntityInfo().decisionAttack + "%) ");
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF))); value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
option.getSiblings().add(value); option.getSiblings().add(value);
text.getSiblings().add(option); text.getSiblings().add(option);
if (pkt.getEntityInfo().playerName.isEmpty()) { option = Component.literal("DecD");
option = Component.literal("C"); option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit decisionDefend"))
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit category")) .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DecisionDefend"))));
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("Category")))); value = Component.literal("(" + pkt.getEntityInfo().decisionDefend + "%) ");
value = Component.literal("(" + pkt.getEntityInfo().category + ") "); value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF))); option.getSiblings().add(value);
option.getSiblings().add(value); text.getSiblings().add(option);
text.getSiblings().add(option);
option = Component.literal("DecA"); option = Component.literal("DecF");
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit decisionAttack")) option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit decisionFlee"))
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DecisionAttack")))); .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DecisionFlee"))));
value = Component.literal("(" + pkt.getEntityInfo().decisionAttack + "%) "); value = Component.literal("(" + pkt.getEntityInfo().decisionFlee + "%) ");
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF))); value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
option.getSiblings().add(value); option.getSiblings().add(value);
text.getSiblings().add(option); text.getSiblings().add(option);
option = Component.literal("DecD");
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit decisionDefend"))
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DecisionDefend"))));
value = Component.literal("(" + pkt.getEntityInfo().decisionDefend + "%) ");
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
option.getSiblings().add(value);
text.getSiblings().add(option);
option = Component.literal("DecF");
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit decisionFlee"))
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DecisionFlee"))));
value = Component.literal("(" + pkt.getEntityInfo().decisionFlee + "%) ");
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
option.getSiblings().add(value);
text.getSiblings().add(option);
}
option = Component.literal("Finished Editing"); option = Component.literal("Finished Editing");
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFF00FF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit finish"))); option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFF00FF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit finish")));
@ -1329,44 +1302,6 @@ public class ClientProxy extends CommonProxy {
TurnBasedMinecraftMod.proxy.displayComponent(parentComponent); TurnBasedMinecraftMod.proxy.displayComponent(parentComponent);
break; break;
} }
case EDIT_HASTE_SPEED: {
MutableComponent text = Component.literal("haste speed: ");
text.setStyle(text.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)).withBold(false));
for (int i = 0; i <= 100; i += 10) {
MutableComponent option = Component.literal(Integer.toString(i));
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit hasteSpeed " + Integer.toString(i))));
text.getSiblings().add(option);
if (i < 100) {
text.getSiblings().add(Component.literal(", "));
}
}
text.getSiblings().add(Component.literal(" (or use command \"/tbm-edit edit hasteSpeed <integer>\")"));
parentComponent.getSiblings().add(text);
TurnBasedMinecraftMod.proxy.displayComponent(parentComponent);
break;
}
case EDIT_SLOW_SPEED: {
MutableComponent text = Component.literal("slow speed: ");
text.setStyle(text.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)).withBold(false));
for (int i = 0; i <= 100; i += 10) {
MutableComponent option = Component.literal(Integer.toString(i));
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit slowSpeed " + Integer.toString(i))));
text.getSiblings().add(option);
if (i < 100) {
text.getSiblings().add(Component.literal(", "));
}
}
text.getSiblings().add(Component.literal(" (or use command \"/tbm-edit edit slowSpeed <integer>\")"));
parentComponent.getSiblings().add(text);
TurnBasedMinecraftMod.proxy.displayComponent(parentComponent);
break;
}
case EDIT_CATEGORY: { case EDIT_CATEGORY: {
MutableComponent text = Component.literal("category: "); MutableComponent text = Component.literal("category: ");
text.setStyle(text.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)).withBold(false)); text.setStyle(text.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)).withBold(false));
@ -1537,10 +1472,6 @@ public class ClientProxy extends CommonProxy {
TurnBasedMinecraftMod.proxy.displayComponent(parentComponent); TurnBasedMinecraftMod.proxy.displayComponent(parentComponent);
break; break;
} }
case PICK_PLAYER: {
TurnBasedMinecraftMod.proxy.displayString("Use \"/tbm-edit player <player_name>\"");
break;
}
default: default:
break; break;
} }

View file

@ -135,9 +135,6 @@ public class Battle {
} catch (NullPointerException exception) { } catch (NullPointerException exception) {
entityInfo = null; entityInfo = null;
} }
if (entityInfo == null) {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getPlayerInfo(e.getName().getString());
}
if (entityInfo == null) { if (entityInfo == null) {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e); entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
} }
@ -170,9 +167,6 @@ public class Battle {
} catch (NullPointerException exception) { } catch (NullPointerException exception) {
entityInfo = null; entityInfo = null;
} }
if (entityInfo == null) {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getPlayerInfo(e.getName().getString());
}
if (entityInfo == null) { if (entityInfo == null) {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e); entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
} }
@ -275,9 +269,6 @@ public class Battle {
} catch (NullPointerException exception) { } catch (NullPointerException exception) {
entityInfo = null; entityInfo = null;
} }
if (entityInfo == null) {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getPlayerInfo(e.getName().getString());
}
if (entityInfo == null) { if (entityInfo == null) {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e); entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
} }
@ -326,9 +317,6 @@ public class Battle {
} catch (NullPointerException exception) { } catch (NullPointerException exception) {
entityInfo = null; entityInfo = null;
} }
if (entityInfo == null) {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getPlayerInfo(e.getName().getString());
}
if (entityInfo == null) { if (entityInfo == null) {
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e); entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
} }
@ -794,7 +782,7 @@ public class Battle {
case ATTACK: case ATTACK:
debugLog += " attack"; debugLog += " attack";
Combatant target = null; Combatant target = null;
if (next.entity instanceof Player player) { if (next.entity instanceof Player) {
debugLog += " as player"; debugLog += " as player";
target = sideA.get(next.targetEntityID); target = sideA.get(next.targetEntityID);
if (target == null) { if (target == null) {
@ -803,15 +791,15 @@ public class Battle {
if (target == null || !target.entity.isAlive() || target == next) { if (target == null || !target.entity.isAlive() || target == next) {
continue; continue;
} }
ItemStack heldItemStack = player.getMainHandItem(); ItemStack heldItemStack = ((Player) next.entity).getMainHandItem();
if (heldItemStack.getItem() instanceof BowItem) { if (heldItemStack.getItem() instanceof BowItem) {
debugLog += " with bow"; debugLog += " with bow";
if (Utility.doesPlayerHaveArrows(player)) { if (Utility.doesPlayerHaveArrows((Player) next.entity)) {
final Entity nextEntity = next.entity; final Entity nextEntity = next.entity;
final Entity targetEntity = target.entity; final Entity targetEntity = target.entity;
final float yawDirection = Utility.yawDirection(next.entity.getX(), next.entity.getZ(), target.entity.getX(), target.entity.getZ()); final float yawDirection = Utility.yawDirection(next.entity.getX(), next.entity.getZ(), target.entity.getX(), target.entity.getZ());
final float pitchDirection = Utility.pitchDirection(next.entity.getX(), next.entity.getY(), next.entity.getZ(), target.entity.getX(), target.entity.getY(), target.entity.getZ()); final float pitchDirection = Utility.pitchDirection(next.entity.getX(), next.entity.getY(), next.entity.getZ(), target.entity.getX(), target.entity.getY(), target.entity.getZ());
final int randomTimeLeft = random.nextInt(heldItemStack.getItem().getUseDuration(heldItemStack, player) / 3); final int randomTimeLeft = random.nextInt(heldItemStack.getItem().getUseDuration(heldItemStack, (LivingEntity)next.entity) / 3);
if (TurnBasedMinecraftMod.proxy.getConfig().isFreezeCombatantsEnabled()) { if (TurnBasedMinecraftMod.proxy.getConfig().isFreezeCombatantsEnabled()) {
next.yaw = yawDirection; next.yaw = yawDirection;
next.pitch = pitchDirection; next.pitch = pitchDirection;
@ -828,7 +816,7 @@ public class Battle {
continue; continue;
} else if (heldItemStack.getItem() instanceof CrossbowItem) { } else if (heldItemStack.getItem() instanceof CrossbowItem) {
debugLog += " with crossbow"; debugLog += " with crossbow";
if (Utility.doesPlayerHaveArrows(player)) { if (Utility.doesPlayerHaveArrows((Player) next.entity)) {
final Entity nextEntity = next.entity; final Entity nextEntity = next.entity;
final Entity targetEntity = target.entity; final Entity targetEntity = target.entity;
final float yawDirection = Utility.yawDirection(next.entity.getX(), next.entity.getZ(), target.entity.getX(), target.entity.getZ()); final float yawDirection = Utility.yawDirection(next.entity.getX(), next.entity.getZ(), target.entity.getX(), target.entity.getZ());
@ -850,18 +838,9 @@ public class Battle {
continue; continue;
} }
debugLog += " without bow"; debugLog += " without bow";
int hitChance; int hitChance = TurnBasedMinecraftMod.proxy.getConfig().getPlayerAttackProbability();
if (next.entityInfo != null && !next.entityInfo.playerName.isEmpty()) {
hitChance = next.entityInfo.attackProbability;
} else {
hitChance = TurnBasedMinecraftMod.proxy.getConfig().getPlayerAttackProbability();
}
if (target.entity instanceof Player) { if (target.entity instanceof Player) {
if (target.entityInfo != null && !target.entityInfo.playerName.isEmpty()) { hitChance = hitChance * (100 - TurnBasedMinecraftMod.proxy.getConfig().getPlayerEvasion()) / 100;
hitChance = hitChance * (100 - target.entityInfo.evasion) / 100;
} else {
hitChance = hitChance * (100 - TurnBasedMinecraftMod.proxy.getConfig().getPlayerEvasion()) / 100;
}
} else { } else {
hitChance = hitChance * (100 - target.entityInfo.evasion) / 100; hitChance = hitChance * (100 - target.entityInfo.evasion) / 100;
} }
@ -898,13 +877,6 @@ public class Battle {
((Player) nextEntity).attack(targetEntity); ((Player) nextEntity).attack(targetEntity);
TurnBasedMinecraftMod.proxy.setAttackingEntity(null); TurnBasedMinecraftMod.proxy.setAttackingEntity(null);
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ATTACK, nextEntity.getId(), targetEntity.getId(), TurnBasedMinecraftMod.proxy.getAttackingDamage()); sendMessageToAllPlayers(PacketBattleMessage.MessageType.ATTACK, nextEntity.getId(), targetEntity.getId(), TurnBasedMinecraftMod.proxy.getAttackingDamage());
// Attack effect
if (next.entityInfo != null && next.entityInfo.attackEffect != EntityInfo.Effect.UNKNOWN && next.entityInfo.attackEffectProbability > 0) {
if (random.nextInt(100) < next.entityInfo.attackEffectProbability) {
next.entityInfo.attackEffect.applyEffectToEntity((LivingEntity)targetEntity);
sendMessageToAllPlayers(PacketBattleMessage.MessageType.WAS_AFFECTED, nextEntity.getId(), targetEntity.getId(), 0, next.entityInfo.attackEffect.getAffectedString());
}
}
if (defenseDamageTriggered) { if (defenseDamageTriggered) {
// defense damage // defense damage
DamageSource defenseDamageSource = targetEntity.damageSources().mobAttack((LivingEntity) targetEntity); DamageSource defenseDamageSource = targetEntity.damageSources().mobAttack((LivingEntity) targetEntity);
@ -1049,111 +1021,48 @@ public class Battle {
int fastestEnemySpeed = 0; int fastestEnemySpeed = 0;
if (next.isSideA) { if (next.isSideA) {
for (Combatant c : sideB.values()) { for (Combatant c : sideB.values()) {
if (c.entity instanceof Player player) { if (c.entity instanceof Player) {
int playerSpeed; int playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
if (c.entityInfo != null && !c.entityInfo.playerName.isEmpty()) { if (((Player) c.entity).hasEffect(MobEffects.MOVEMENT_SPEED)) {
playerSpeed = c.entityInfo.speed; playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerHasteSpeed();
} else { } else if (((Player) c.entity).hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed(); playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSlowSpeed();
}
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
if (c.entityInfo != null && !c.entityInfo.playerName.isEmpty()) {
playerSpeed = c.entityInfo.hasteSpeed;
} else {
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerHasteSpeed();
}
} else if (player.hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
if (c.entityInfo != null && !c.entityInfo.playerName.isEmpty()) {
playerSpeed = c.entityInfo.slowSpeed;
} else {
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSlowSpeed();
}
} }
if (playerSpeed > fastestEnemySpeed) { if (playerSpeed > fastestEnemySpeed) {
fastestEnemySpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed(); fastestEnemySpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
} }
} else { } else {
if (c.entity instanceof LivingEntity livingEntity) { if (c.entityInfo.speed > fastestEnemySpeed) {
if (livingEntity.hasEffect(MobEffects.MOVEMENT_SPEED)) {
if (c.entityInfo.hasteSpeed > fastestEnemySpeed) {
fastestEnemySpeed = c.entityInfo.hasteSpeed;
}
} else if (livingEntity.hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
if (c.entityInfo.slowSpeed > fastestEnemySpeed) {
fastestEnemySpeed = c.entityInfo.slowSpeed;
}
} else if (c.entityInfo.speed > fastestEnemySpeed) {
fastestEnemySpeed = c.entityInfo.speed;
}
} else if (c.entityInfo.speed > fastestEnemySpeed) {
fastestEnemySpeed = c.entityInfo.speed; fastestEnemySpeed = c.entityInfo.speed;
} }
} }
} }
} else { } else {
for (Combatant c : sideA.values()) { for (Combatant c : sideA.values()) {
if (c.entity instanceof Player player) { if (c.entity instanceof Player) {
int playerSpeed; int playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
if (c.entityInfo != null && !c.entityInfo.playerName.isEmpty()) { if (((Player) c.entity).hasEffect(MobEffects.MOVEMENT_SPEED)) {
playerSpeed = c.entityInfo.speed; playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerHasteSpeed();
} else { } else if (((Player) c.entity).hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed(); playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSlowSpeed();
}
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
if (c.entityInfo != null && !c.entityInfo.playerName.isEmpty()) {
playerSpeed = c.entityInfo.hasteSpeed;
} else {
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerHasteSpeed();
}
} else if (player.hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
if (c.entityInfo != null && !c.entityInfo.playerName.isEmpty()) {
playerSpeed = c.entityInfo.slowSpeed;
} else {
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSlowSpeed();
}
} }
if (playerSpeed > fastestEnemySpeed) { if (playerSpeed > fastestEnemySpeed) {
fastestEnemySpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed(); fastestEnemySpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
} }
} else { } else {
if (c.entity instanceof LivingEntity livingEntity) { if (c.entityInfo.speed > fastestEnemySpeed) {
if (livingEntity.hasEffect(MobEffects.MOVEMENT_SPEED)) {
if (c.entityInfo.hasteSpeed > fastestEnemySpeed) {
fastestEnemySpeed = c.entityInfo.hasteSpeed;
}
} else if (livingEntity.hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
if (c.entityInfo.slowSpeed > fastestEnemySpeed) {
fastestEnemySpeed = c.entityInfo.slowSpeed;
}
} else if (c.entityInfo.speed > fastestEnemySpeed) {
fastestEnemySpeed = c.entityInfo.speed;
}
} else if (c.entityInfo.speed > fastestEnemySpeed) {
fastestEnemySpeed = c.entityInfo.speed; fastestEnemySpeed = c.entityInfo.speed;
} }
} }
} }
} }
int fleeProbability = 0; int fleeProbability = 0;
if (next.entity instanceof Player player) { if (next.entity instanceof Player) {
int playerSpeed; int playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
if (next.entityInfo != null && !next.entityInfo.playerName.isEmpty()) { if (((Player) next.entity).hasEffect(MobEffects.MOVEMENT_SPEED)) {
playerSpeed = next.entityInfo.speed; playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerHasteSpeed();
} else { } else if (((Player) next.entity).hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed(); playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSlowSpeed();
}
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
if (next.entityInfo != null && !next.entityInfo.playerName.isEmpty()) {
playerSpeed = next.entityInfo.hasteSpeed;
} else {
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerHasteSpeed();
}
} else if (player.hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
if (next.entityInfo != null && !next.entityInfo.playerName.isEmpty()) {
playerSpeed = next.entityInfo.slowSpeed;
} else {
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSlowSpeed();
}
} }
if (fastestEnemySpeed >= playerSpeed) { if (fastestEnemySpeed >= playerSpeed) {
fleeProbability = TurnBasedMinecraftMod.proxy.getConfig().getFleeBadProbability(); fleeProbability = TurnBasedMinecraftMod.proxy.getConfig().getFleeBadProbability();

View file

@ -8,7 +8,6 @@ public class EditingInfo
public EntityInfo entityInfo; public EntityInfo entityInfo;
public boolean isPendingEntitySelection; public boolean isPendingEntitySelection;
public boolean isEditingCustomName; public boolean isEditingCustomName;
public boolean isEditingPlayer;
public EditingInfo() public EditingInfo()
{ {
@ -16,7 +15,6 @@ public class EditingInfo
entityInfo = null; entityInfo = null;
isPendingEntitySelection = true; isPendingEntitySelection = true;
isEditingCustomName = false; isEditingCustomName = false;
isEditingPlayer = false;
} }
public EditingInfo(Player player) public EditingInfo(Player player)
@ -25,6 +23,5 @@ public class EditingInfo
entityInfo = null; entityInfo = null;
isPendingEntitySelection = true; isPendingEntitySelection = true;
isEditingCustomName = false; isEditingCustomName = false;
isEditingPlayer = false;
} }
} }

View file

@ -20,14 +20,11 @@ public class EntityInfo
public int defenseDamageProbability; public int defenseDamageProbability;
public int evasion; public int evasion;
public int speed; public int speed;
public int hasteSpeed;
public int slowSpeed;
public String category; public String category;
public int decisionAttack; public int decisionAttack;
public int decisionDefend; public int decisionDefend;
public int decisionFlee; public int decisionFlee;
public String customName; public String customName;
public String playerName;
public enum Effect public enum Effect
{ {
@ -372,20 +369,17 @@ public class EntityInfo
defenseDamageProbability = 0; defenseDamageProbability = 0;
evasion = 15; evasion = 15;
speed = 50; speed = 50;
hasteSpeed = 80;
slowSpeed = 20;
category = "unknown"; category = "unknown";
decisionAttack = 70; decisionAttack = 70;
decisionDefend = 20; decisionDefend = 20;
decisionFlee = 10; decisionFlee = 10;
customName = new String(); customName = new String();
playerName = new String();
} }
public EntityInfo(Class classType, boolean ignoreBattle, int attackPower, int attackProbability, int attackVariance, public EntityInfo(Class classType, boolean ignoreBattle, int attackPower, int attackProbability, int attackVariance,
Effect attackEffect, int attackEffectProbability, int defenseDamage, int defenseDamageProbability, Effect attackEffect, int attackEffectProbability, int defenseDamage, int defenseDamageProbability,
int evasion, int speed, int hasteSpeed, int slowSpeed, String category, int decisionAttack, int decisionDefend, int decisionFlee, int evasion, int speed, String category, int decisionAttack, int decisionDefend, int decisionFlee,
String customName, String playerName) { String customName) {
this.classType = classType; this.classType = classType;
this.ignoreBattle = ignoreBattle; this.ignoreBattle = ignoreBattle;
this.attackPower = attackPower; this.attackPower = attackPower;
@ -397,14 +391,11 @@ public class EntityInfo
this.defenseDamageProbability = defenseDamageProbability; this.defenseDamageProbability = defenseDamageProbability;
this.evasion = evasion; this.evasion = evasion;
this.speed = speed; this.speed = speed;
this.hasteSpeed = hasteSpeed;
this.slowSpeed = slowSpeed;
this.category = category; this.category = category;
this.decisionAttack = decisionAttack; this.decisionAttack = decisionAttack;
this.decisionDefend = decisionDefend; this.decisionDefend = decisionDefend;
this.decisionFlee = decisionFlee; this.decisionFlee = decisionFlee;
this.customName = customName; this.customName = customName;
this.playerName = playerName;
} }
public EntityInfo clone() public EntityInfo clone()
@ -421,14 +412,11 @@ public class EntityInfo
newEntityInfo.defenseDamageProbability = defenseDamageProbability; newEntityInfo.defenseDamageProbability = defenseDamageProbability;
newEntityInfo.evasion = evasion; newEntityInfo.evasion = evasion;
newEntityInfo.speed = speed; newEntityInfo.speed = speed;
newEntityInfo.hasteSpeed = hasteSpeed;
newEntityInfo.slowSpeed = slowSpeed;
newEntityInfo.category = category; newEntityInfo.category = category;
newEntityInfo.decisionAttack = decisionAttack; newEntityInfo.decisionAttack = decisionAttack;
newEntityInfo.decisionDefend = decisionDefend; newEntityInfo.decisionDefend = decisionDefend;
newEntityInfo.decisionFlee = decisionFlee; newEntityInfo.decisionFlee = decisionFlee;
newEntityInfo.customName = customName; newEntityInfo.customName = new String(customName);
newEntityInfo.playerName = playerName;
return newEntityInfo; return newEntityInfo;
} }
@ -460,8 +448,6 @@ public class EntityInfo
defenseDamageProbability = buffer.readInt(); defenseDamageProbability = buffer.readInt();
evasion = buffer.readInt(); evasion = buffer.readInt();
speed = buffer.readInt(); speed = buffer.readInt();
hasteSpeed = buffer.readInt();
slowSpeed = buffer.readInt();
int category_len = buffer.readInt(); int category_len = buffer.readInt();
ByteBuf category_bytes = buffer.readBytes(category_len); ByteBuf category_bytes = buffer.readBytes(category_len);
@ -478,14 +464,6 @@ public class EntityInfo
} else { } else {
customName = ""; customName = "";
} }
int player_len = buffer.readInt();
if (player_len > 0) {
ByteBuf player_bytes = buffer.readBytes(player_len);
playerName = player_bytes.toString(StandardCharsets.UTF_8);
} else {
playerName = "";
}
} }
public void encode(ByteBuf buffer) { public void encode(ByteBuf buffer) {
@ -513,8 +491,6 @@ public class EntityInfo
buffer.writeInt(defenseDamageProbability); buffer.writeInt(defenseDamageProbability);
buffer.writeInt(evasion); buffer.writeInt(evasion);
buffer.writeInt(speed); buffer.writeInt(speed);
buffer.writeInt(hasteSpeed);
buffer.writeInt(slowSpeed);
byte[] category_bytes = category.getBytes(StandardCharsets.UTF_8); byte[] category_bytes = category.getBytes(StandardCharsets.UTF_8);
buffer.writeInt(category_bytes.length); buffer.writeInt(category_bytes.length);
@ -531,13 +507,5 @@ public class EntityInfo
buffer.writeInt(custom_bytes.length); buffer.writeInt(custom_bytes.length);
buffer.writeBytes(custom_bytes); buffer.writeBytes(custom_bytes);
} }
if (playerName.isEmpty()) {
buffer.writeInt(0);
} else {
byte[] player_bytes = playerName.getBytes(StandardCharsets.UTF_8);
buffer.writeInt(player_bytes.length);
buffer.writeBytes(player_bytes);
}
} }
} }

View file

@ -41,7 +41,7 @@ import org.apache.logging.log4j.Logger;
public class TurnBasedMinecraftMod { public class TurnBasedMinecraftMod {
public static final String MODID = "com_burnedkirby_turnbasedminecraft"; public static final String MODID = "com_burnedkirby_turnbasedminecraft";
public static final String NAME = "Turn Based Minecraft Mod"; public static final String NAME = "Turn Based Minecraft Mod";
public static final String VERSION = "1.26.5"; public static final String VERSION = "1.26.3";
public static final String CONFIG_FILENAME = "TBM_Config.toml"; public static final String CONFIG_FILENAME = "TBM_Config.toml";
public static final String DEFAULT_CONFIG_FILENAME = "TBM_Config_DEFAULT.toml"; public static final String DEFAULT_CONFIG_FILENAME = "TBM_Config_DEFAULT.toml";
public static final String CONFIG_DIRECTORY = "config/TurnBasedMinecraft/"; public static final String CONFIG_DIRECTORY = "config/TurnBasedMinecraft/";
@ -153,6 +153,7 @@ public class TurnBasedMinecraftMod {
for (ServerPlayer player : c.getSource().getServer().getPlayerList().getPlayers()) { for (ServerPlayer player : c.getSource().getServer().getPlayerList().getPlayers()) {
proxy.getConfig().addBattleIgnoringPlayer(player.getId()); proxy.getConfig().addBattleIgnoringPlayer(player.getId());
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("OP disabled turn-based-combat for everyone")); PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("OP disabled turn-based-combat for everyone"));
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("OP disabled turn-based-combat for everyone"));
} }
return 1; return 1;
})); }));
@ -266,30 +267,6 @@ public class TurnBasedMinecraftMod {
} }
return 1; return 1;
})) }))
.then(Commands.literal("player")
.executes(c -> {
ServerPlayer player = c.getSource().getPlayerOrException();
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_PLAYER));
return 1;
})
.then(Commands.argument("playerName", StringArgumentType.greedyString()).executes(c -> {
String name = StringArgumentType.getString(c, "playerName");
ServerPlayer player = c.getSource().getPlayerOrException();
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("Editing player \"" + name + "\""));
TurnBasedMinecraftMod.logger.info("Begin editing player \"" + name + "\"");
proxy.setEditingPlayer(player);
EditingInfo editInfo = proxy.getEditingInfo(player.getId());
editInfo.isEditingPlayer = true;
editInfo.entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getPlayerInfo(name);
if (editInfo.entityInfo == null) {
editInfo.entityInfo = new EntityInfo();
}
editInfo.entityInfo.playerName = name;
editInfo.isPendingEntitySelection = false;
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editInfo.entityInfo));
return 1;
}))
)
.then(Commands.literal("edit") .then(Commands.literal("edit")
.executes(c -> { .executes(c -> {
ServerPlayer player = c.getSource().getPlayerOrException(); ServerPlayer player = c.getSource().getPlayerOrException();
@ -613,45 +590,11 @@ public class TurnBasedMinecraftMod {
})) }))
) )
.then(Commands.literal("speed") .then(Commands.literal("speed")
.executes(c -> {
ServerPlayer player = c.getSource().getPlayerOrException();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_SPEED));
} else if (editingInfo != null) {
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("speed", IntegerArgumentType.integer())
.executes(c -> {
ServerPlayer player = c.getSource().getPlayerOrException();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
int speed = IntegerArgumentType.getInteger(c, "speed");
if (speed < 0) {
speed = 0;
}
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.speed = speed;
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if (editingInfo != null) {
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("hasteSpeed")
.executes(c -> { .executes(c -> {
ServerPlayer player = c.getSource().getPlayerOrException(); ServerPlayer player = c.getSource().getPlayerOrException();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
if (editingInfo != null && !editingInfo.isPendingEntitySelection) { if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_HASTE_SPEED)); PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_SPEED));
} else if (editingInfo != null) { } else if (editingInfo != null) {
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY)); PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else { } else {
@ -660,16 +603,16 @@ public class TurnBasedMinecraftMod {
} }
return 1; return 1;
}) })
.then(Commands.argument("hasteSpeed", IntegerArgumentType.integer()) .then(Commands.argument("speed", IntegerArgumentType.integer())
.executes(c -> { .executes(c -> {
ServerPlayer player = c.getSource().getPlayerOrException(); ServerPlayer player = c.getSource().getPlayerOrException();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
int hasteSpeed = IntegerArgumentType.getInteger(c, "hasteSpeed"); int speed = IntegerArgumentType.getInteger(c, "speed");
if (hasteSpeed < 0) { if (speed < 0) {
hasteSpeed = 0; speed = 0;
} }
if (editingInfo != null && !editingInfo.isPendingEntitySelection) { if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.hasteSpeed = hasteSpeed; editingInfo.entityInfo.speed = speed;
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if (editingInfo != null) { } else if (editingInfo != null) {
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY)); PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
@ -680,40 +623,6 @@ public class TurnBasedMinecraftMod {
return 1; return 1;
})) }))
) )
.then(Commands.literal("slowSpeed")
.executes(c -> {
ServerPlayer player = c.getSource().getPlayerOrException();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_SLOW_SPEED));
} else if (editingInfo != null) {
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
})
.then(Commands.argument("slowSpeed", IntegerArgumentType.integer())
.executes(c -> {
ServerPlayer player = c.getSource().getPlayerOrException();
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
int slowSpeed = IntegerArgumentType.getInteger(c, "slowSpeed");
if (slowSpeed < 0) {
slowSpeed = 0;
}
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
editingInfo.entityInfo.slowSpeed = slowSpeed;
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
} else if (editingInfo != null) {
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
} else {
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
}
return 1;
}))
)
.then(Commands.literal("category") .then(Commands.literal("category")
.executes(c -> { .executes(c -> {
ServerPlayer player = c.getSource().getPlayerOrException(); ServerPlayer player = c.getSource().getPlayerOrException();

View file

@ -48,14 +48,11 @@ public class PacketEditingMessage implements CustomPacketPayload
EDIT_DEFENSE_DAMAGE_PROBABILITY(9), EDIT_DEFENSE_DAMAGE_PROBABILITY(9),
EDIT_EVASION(10), EDIT_EVASION(10),
EDIT_SPEED(11), EDIT_SPEED(11),
EDIT_HASTE_SPEED(18),
EDIT_SLOW_SPEED(19),
EDIT_CATEGORY(12), EDIT_CATEGORY(12),
EDIT_DECISION_ATTACK(13), EDIT_DECISION_ATTACK(13),
EDIT_DECISION_DEFEND(14), EDIT_DECISION_DEFEND(14),
EDIT_DECISION_FLEE(15), EDIT_DECISION_FLEE(15),
SERVER_EDIT(16), SERVER_EDIT(16);
PICK_PLAYER(17);
Type(int value) Type(int value)
{ {

View file

@ -125,8 +125,6 @@ defense_damage = 0
evasion = 5 evasion = 5
category = "monster" category = "monster"
speed = 45 speed = 45
haste_speed = 65
slow_speed = 25
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -143,8 +141,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "monster" category = "monster"
speed = 20 speed = 20
haste_speed = 40
slow_speed = 5
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -160,8 +156,6 @@ defense_damage = 0
evasion = 45 evasion = 45
category = "monster" category = "monster"
speed = 45 speed = 45
haste_speed = 80
slow_speed = 25
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -178,8 +172,6 @@ defense_damage = 0
evasion = 35 evasion = 35
category = "monster" category = "monster"
speed = 75 speed = 75
haste_speed = 90
slow_speed = 55
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -196,8 +188,6 @@ defense_damage = 0
evasion = 5 evasion = 5
category = "monster" category = "monster"
speed = 25 speed = 25
haste_speed = 45
slow_speed = 5
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -212,8 +202,6 @@ defense_damage = 0
evasion = 5 evasion = 5
category = "monster" category = "monster"
speed = 25 speed = 25
haste_speed = 35
slow_speed = 5
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -230,8 +218,6 @@ defense_damage_probability = 35
evasion = 25 evasion = 25
category = "monster" category = "monster"
speed = 45 speed = 45
haste_speed = 65
slow_speed = 25
decision_attack_probability = 80 decision_attack_probability = 80
decision_defend_probability = 20 decision_defend_probability = 20
decision_flee_probability = 0 decision_flee_probability = 0
@ -247,8 +233,6 @@ defense_damage = 0
evasion = 40 evasion = 40
category = "monster" category = "monster"
speed = 70 speed = 70
haste_speed = 90
slow_speed = 50
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -264,8 +248,6 @@ defense_damage = 0
evasion = 40 evasion = 40
category = "monster" category = "monster"
speed = 35 speed = 35
haste_speed = 55
slow_speed = 15
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -281,8 +263,6 @@ defense_damage = 0
evasion = 35 evasion = 35
category = "monster" category = "monster"
speed = 35 speed = 35
haste_speed = 55
slow_speed = 15
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -299,8 +279,6 @@ defense_damage = 0
evasion = 35 evasion = 35
category = "monster" category = "monster"
speed = 60 speed = 60
haste_speed = 80
slow_speed = 40
decision_attack_probability = 75 decision_attack_probability = 75
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 25 decision_flee_probability = 25
@ -315,8 +293,6 @@ defense_damage = 0
evasion = 2 evasion = 2
category = "monster" category = "monster"
speed = 45 speed = 45
haste_speed = 65
slow_speed = 25
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -333,8 +309,6 @@ defense_damage_probability = 30
evasion = 25 evasion = 25
category = "monster" category = "monster"
speed = 50 speed = 50
haste_speed = 70
slow_speed = 30
decision_attack_probability = 80 decision_attack_probability = 80
decision_defend_probability = 20 decision_defend_probability = 20
decision_flee_probability = 0 decision_flee_probability = 0
@ -350,8 +324,6 @@ defense_damage = 0
evasion = 20 evasion = 20
category = "monster" category = "monster"
speed = 40 speed = 40
haste_speed = 60
slow_speed = 20
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -368,8 +340,6 @@ defense_damage = 0
evasion = 5 evasion = 5
category = "monster" category = "monster"
speed = 25 speed = 25
haste_speed = 55
slow_speed = 5
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -385,8 +355,6 @@ defense_damage = 0
evasion = 5 evasion = 5
category = "monster" category = "monster"
speed = 35 speed = 35
haste_speed = 55
slow_speed = 15
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -402,8 +370,6 @@ defense_damage = 0
evasion = 5 evasion = 5
category = "monster" category = "monster"
speed = 45 speed = 45
haste_speed = 65
slow_speed = 25
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -419,8 +385,6 @@ defense_damage = 0
evasion = 12 evasion = 12
category = "monster" category = "monster"
speed = 35 speed = 35
haste_speed = 55
slow_speed = 15
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -436,8 +400,6 @@ defense_damage = 0
evasion = 20 evasion = 20
category = "monster" category = "monster"
speed = 25 speed = 25
haste_speed = 45
slow_speed = 10
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -453,8 +415,6 @@ defense_damage = 0
evasion = 20 evasion = 20
category = "monster" category = "monster"
speed = 28 speed = 28
haste_speed = 48
slow_speed = 10
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -470,8 +430,6 @@ defense_damage = 0
evasion = 35 evasion = 35
category = "monster" category = "monster"
speed = 65 speed = 65
haste_speed = 85
slow_speed = 45
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -487,8 +445,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "monster" category = "monster"
speed = 30 speed = 30
haste_speed = 50
slow_speed = 10
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -504,8 +460,6 @@ defense_damage = 0
evasion = 4 evasion = 4
category = "monster" category = "monster"
speed = 35 speed = 35
haste_speed = 55
slow_speed = 15
decision_attack_probability = 90 decision_attack_probability = 90
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -521,8 +475,6 @@ defense_damage = 0
evasion = 15 evasion = 15
category = "monster" category = "monster"
speed = 10 speed = 10
haste_speed = 30
slow_speed = 5
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -538,8 +490,6 @@ defense_damage = 0
evasion = 37 evasion = 37
category = "monster" category = "monster"
speed = 35 speed = 35
haste_speed = 55
slow_speed = 15
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -555,8 +505,6 @@ defense_damage = 0
evasion = 13 evasion = 13
category = "monster" category = "monster"
speed = 30 speed = 30
haste_speed = 50
slow_speed = 10
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -572,8 +520,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "monster" category = "monster"
speed = 30 speed = 30
haste_speed = 50
slow_speed = 10
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -589,8 +535,6 @@ defense_damage = 0
evasion = 25 evasion = 25
category = "monster" category = "monster"
speed = 70 speed = 70
haste_speed = 90
slow_speed = 50
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -607,8 +551,6 @@ defense_damage = 0
evasion = 13 evasion = 13
category = "monster" category = "monster"
speed = 30 speed = 30
haste_speed = 50
slow_speed = 10
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -624,8 +566,6 @@ defense_damage = 0
evasion = 30 evasion = 30
category = "monster" category = "monster"
speed = 80 speed = 80
haste_speed = 90
slow_speed = 50
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -641,8 +581,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "monster" category = "monster"
speed = 35 speed = 35
haste_speed = 55
slow_speed = 15
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -658,8 +596,6 @@ defense_damage = 0
evasion = 7 evasion = 7
category = "monster" category = "monster"
speed = 50 speed = 50
haste_speed = 70
slow_speed = 20
decision_attack_probability = 95 decision_attack_probability = 95
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -675,8 +611,6 @@ defense_damage = 0
evasion = 8 evasion = 8
category = "monster" category = "monster"
speed = 35 speed = 35
haste_speed = 55
slow_speed = 15
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -693,8 +627,6 @@ defense_damage = 0
evasion = 7 evasion = 7
category = "monster" category = "monster"
speed = 65 speed = 65
haste_speed = 85
slow_speed = 40
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -710,8 +642,6 @@ defense_damage = 0
evasion = 20 evasion = 20
category = "monster" category = "monster"
speed = 40 speed = 40
haste_speed = 60
slow_speed = 20
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -727,8 +657,6 @@ defense_damage = 0
evasion = 5 evasion = 5
category = "monster" category = "monster"
speed = 25 speed = 25
haste_speed = 45
slow_speed = 10
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -744,8 +672,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "monster" category = "monster"
speed = 50 speed = 50
haste_speed = 65
slow_speed = 20
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -761,8 +687,6 @@ defense_damage = 0
evasion = 5 evasion = 5
category = "monster" category = "monster"
speed = 25 speed = 25
haste_speed = 45
slow_speed = 10
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -778,8 +702,6 @@ defense_damage = 0
evasion = 40 evasion = 40
category = "passive" category = "passive"
speed = 50 speed = 50
haste_speed = 80
slow_speed = 30
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 100 decision_flee_probability = 100
@ -795,8 +717,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "passive" category = "passive"
speed = 20 speed = 20
haste_speed = 40
slow_speed = 10
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 50 decision_defend_probability = 50
decision_flee_probability = 50 decision_flee_probability = 50
@ -812,8 +732,6 @@ defense_damage = 0
evasion = 25 evasion = 25
category = "passive" category = "passive"
speed = 65 speed = 65
haste_speed = 85
slow_speed = 45
decision_attack_probability = 70 decision_attack_probability = 70
decision_defend_probability = 20 decision_defend_probability = 20
decision_flee_probability = 10 decision_flee_probability = 10
@ -829,8 +747,6 @@ defense_damage = 0
evasion = 35 evasion = 35
category = "passive" category = "passive"
speed = 75 speed = 75
haste_speed = 95
slow_speed = 50
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
@ -845,8 +761,6 @@ defense_damage = 0
evasion = 30 evasion = 30
category = "animal" category = "animal"
speed = 20 speed = 20
haste_speed = 50
slow_speed = 10
decision_attack_probability = 90 decision_attack_probability = 90
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -864,8 +778,6 @@ defense_damage = 0
evasion = 30 evasion = 30
category = "passive" category = "passive"
speed = 75 speed = 75
haste_speed = 90
slow_speed = 30
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
@ -881,8 +793,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "passive" category = "passive"
speed = 35 speed = 35
haste_speed = 45
slow_speed = 10
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
@ -898,8 +808,6 @@ defense_damage = 0
evasion = 1 evasion = 1
category = "passive" category = "passive"
speed = 20 speed = 20
haste_speed = 40
slow_speed = 10
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 10 decision_defend_probability = 10
decision_flee_probability = 80 decision_flee_probability = 80
@ -915,8 +823,6 @@ defense_damage = 0
evasion = 45 evasion = 45
category = "passive" category = "passive"
speed = 75 speed = 75
haste_speed = 90
slow_speed = 55
decision_attack_probability = 70 decision_attack_probability = 70
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 30 decision_flee_probability = 30
@ -932,8 +838,6 @@ defense_damage = 0
evasion = 65 evasion = 65
category = "animal" category = "animal"
speed = 65 speed = 65
haste_speed = 85
slow_speed = 30
decision_attack_probability = 70 decision_attack_probability = 70
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 25 decision_flee_probability = 25
@ -949,8 +853,6 @@ defense_damage = 0
evasion = 60 evasion = 60
category = "animal" category = "animal"
speed = 70 speed = 70
haste_speed = 80
slow_speed = 20
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 100 decision_flee_probability = 100
@ -966,8 +868,6 @@ defense_damage = 0
evasion = 45 evasion = 45
category = "animal" category = "animal"
speed = 50 speed = 50
haste_speed = 60
slow_speed = 15
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 100 decision_flee_probability = 100
@ -983,8 +883,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "passive" category = "passive"
speed = 65 speed = 65
haste_speed = 80
slow_speed = 20
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
@ -1000,8 +898,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "passive" category = "passive"
speed = 65 speed = 65
haste_speed = 85
slow_speed = 45
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
@ -1017,8 +913,6 @@ defense_damage = 0
evasion = 30 evasion = 30
category = "passive" category = "passive"
speed = 60 speed = 60
haste_speed = 80
slow_speed = 40
decision_attack_probability = 75 decision_attack_probability = 75
decision_defend_probability = 20 decision_defend_probability = 20
decision_flee_probability = 5 decision_flee_probability = 5
@ -1034,8 +928,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "passive" category = "passive"
speed = 50 speed = 50
haste_speed = 70
slow_speed = 30
decision_attack_probability = 65 decision_attack_probability = 65
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 25 decision_flee_probability = 25
@ -1051,8 +943,6 @@ defense_damage = 0
evasion = 1 evasion = 1
category = "passive" category = "passive"
speed = 20 speed = 20
haste_speed = 40
slow_speed = 10
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 10 decision_defend_probability = 10
decision_flee_probability = 80 decision_flee_probability = 80
@ -1068,8 +958,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "passive" category = "passive"
speed = 50 speed = 50
haste_speed = 70
slow_speed = 30
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
@ -1085,8 +973,6 @@ defense_damage = 0
evasion = 30 evasion = 30
category = "passive" category = "passive"
speed = 75 speed = 75
haste_speed = 90
slow_speed = 55
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
@ -1102,8 +988,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "passive" category = "passive"
speed = 30 speed = 30
haste_speed = 50
slow_speed = 10
decision_attack_probability = 45 decision_attack_probability = 45
decision_defend_probability = 25 decision_defend_probability = 25
decision_flee_probability = 30 decision_flee_probability = 30
@ -1119,8 +1003,6 @@ defense_damage = 0
evasion = 35 evasion = 35
category = "passive" category = "passive"
speed = 70 speed = 70
haste_speed = 90
slow_speed = 40
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
@ -1136,8 +1018,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "passive" category = "passive"
speed = 30 speed = 30
haste_speed = 50
slow_speed = 10
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 5 decision_defend_probability = 5
decision_flee_probability = 85 decision_flee_probability = 85
@ -1153,8 +1033,6 @@ defense_damage = 0
evasion = 5 evasion = 5
category = "animal" category = "animal"
speed = 35 speed = 35
haste_speed = 70
slow_speed = 20
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -1170,8 +1048,6 @@ defense_damage = 0
evasion = 40 evasion = 40
category = "passive" category = "passive"
speed = 75 speed = 75
haste_speed = 90
slow_speed = 35
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 100 decision_flee_probability = 100
@ -1187,8 +1063,6 @@ defense_damage = 0
evasion = 5 evasion = 5
category = "passive" category = "passive"
speed = 30 speed = 30
haste_speed = 40
slow_speed = 20
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
@ -1204,8 +1078,6 @@ defense_damage = 0
evasion = 5 evasion = 5
category = "passive" category = "passive"
speed = 65 speed = 65
haste_speed = 85
slow_speed = 35
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
@ -1221,8 +1093,6 @@ defense_damage = 0
evasion = 5 evasion = 5
category = "passive" category = "passive"
speed = 60 speed = 60
haste_speed = 70
slow_speed = 45
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -1238,8 +1108,6 @@ defense_damage = 0
evasion = 15 evasion = 15
category = "passive" category = "passive"
speed = 40 speed = 40
haste_speed = 70
slow_speed = 25
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
@ -1255,8 +1123,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "passive" category = "passive"
speed = 50 speed = 50
haste_speed = 70
slow_speed = 35
decision_attack_probability = 65 decision_attack_probability = 65
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 25 decision_flee_probability = 25
@ -1272,8 +1138,6 @@ defense_damage = 0
evasion = 5 evasion = 5
category = "passive" category = "passive"
speed = 35 speed = 35
haste_speed = 50
slow_speed = 20
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 10 decision_defend_probability = 10
decision_flee_probability = 80 decision_flee_probability = 80
@ -1289,8 +1153,6 @@ defense_damage = 0
evasion = 20 evasion = 20
category = "animal" category = "animal"
speed = 70 speed = 70
haste_speed = 85
slow_speed = 45
decision_attack_probability = 80 decision_attack_probability = 80
decision_defend_probability = 15 decision_defend_probability = 15
decision_flee_probability = 5 decision_flee_probability = 5
@ -1306,8 +1168,6 @@ defense_damage = 0
evasion = 8 evasion = 8
category = "passive" category = "passive"
speed = 65 speed = 65
haste_speed = 80
slow_speed = 35
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
@ -1323,8 +1183,6 @@ defense_damage = 0
evasion = 50 evasion = 50
category = "passive" category = "passive"
speed = 75 speed = 75
haste_speed = 90
slow_speed = 40
decision_attack_probability = 25 decision_attack_probability = 25
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 75 decision_flee_probability = 75
@ -1341,8 +1199,6 @@ defense_damage_probability = 75
evasion = 25 evasion = 25
category = "passive" category = "passive"
speed = 45 speed = 45
haste_speed = 55
slow_speed = 25
decision_attack_probability = 35 decision_attack_probability = 35
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 65 decision_flee_probability = 65
@ -1358,8 +1214,6 @@ defense_damage = 0
evasion = 50 evasion = 50
category = "passive" category = "passive"
speed = 75 speed = 75
haste_speed = 90
slow_speed = 40
decision_attack_probability = 25 decision_attack_probability = 25
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 75 decision_flee_probability = 75
@ -1375,8 +1229,6 @@ defense_damage = 0
evasion = 35 evasion = 35
category = "passive" category = "passive"
speed = 45 speed = 45
haste_speed = 65
slow_speed = 25
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 10 decision_defend_probability = 10
decision_flee_probability = 90 decision_flee_probability = 90
@ -1392,8 +1244,6 @@ defense_damage = 0
evasion = 50 evasion = 50
category = "passive" category = "passive"
speed = 75 speed = 75
haste_speed = 90
slow_speed = 40
decision_attack_probability = 25 decision_attack_probability = 25
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 75 decision_flee_probability = 75
@ -1409,8 +1259,6 @@ defense_damage = 0
evasion = 35 evasion = 35
category = "passive" category = "passive"
speed = 50 speed = 50
haste_speed = 60
slow_speed = 30
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 40 decision_defend_probability = 40
decision_flee_probability = 60 decision_flee_probability = 60
@ -1426,8 +1274,6 @@ defense_damage = 0
evasion = 5 evasion = 5
category = "passive" category = "passive"
speed = 35 speed = 35
haste_speed = 50
slow_speed = 25
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 10 decision_defend_probability = 10
decision_flee_probability = 80 decision_flee_probability = 80
@ -1443,8 +1289,6 @@ defense_damage = 0
evasion = 27 evasion = 27
category = "boss" category = "boss"
speed = 63 speed = 63
haste_speed = 85
slow_speed = 53
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -1461,8 +1305,6 @@ defense_damage = 0
evasion = 20 evasion = 20
category = "boss" category = "boss"
speed = 68 speed = 68
haste_speed = 88
slow_speed = 48
decision_attack_probability = 100 decision_attack_probability = 100
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 0 decision_flee_probability = 0
@ -1478,8 +1320,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "passive" category = "passive"
speed = 55 speed = 55
haste_speed = 75
slow_speed = 35
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90
@ -1495,8 +1335,6 @@ defense_damage = 0
evasion = 10 evasion = 10
category = "passive" category = "passive"
speed = 15 speed = 15
haste_speed = 20
slow_speed = 10
decision_attack_probability = 0 decision_attack_probability = 0
decision_defend_probability = 0 decision_defend_probability = 0
decision_flee_probability = 90 decision_flee_probability = 90

View file

@ -1,22 +1,12 @@
{ {
"homepage": "https://github.com/Stephen-Seo/TurnBasedMinecraftMod", "homepage": "https://github.com/Stephen-Seo/TurnBasedMinecraftMod",
"1.21.3": {
"1.26.5": "Config improvements, NeoForge 21.3.11-beta.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md",
"1.26.4": "Add player-specific config, NeoForge 21.3.6-beta.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md",
"1.26.3": "Ported to NeoForge 21.3.2-beta (MC 1.21.3), minor tweak to packet.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md"
},
"1.21.1": { "1.21.1": {
"1.26.5-MC-1.21.1": "Config improvements, NeoForge 21.1.74.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md",
"1.26.4-MC-1.21.1": "Add player-specific config, NeoForge 21.1.73.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md",
"1.26.3-MC-1.21.1": "Minor tweak to packet.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md",
"1.26.2": "Display Entities on attack menu in BattleGUI.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md", "1.26.2": "Display Entities on attack menu in BattleGUI.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md",
"1.26.1": "Ported to NeoForge 21.1.72, leave BattleGUI with Escape key, MC music paused in battle properly.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md", "1.26.1": "Ported to NeoForge 21.1.72, leave BattleGUI with Escape key, MC music paused in battle properly.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md",
"1.26.0": "Ported to NeoForge 21.1.69, client config.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md" "1.26.0": "Ported to NeoForge 21.1.69, client config.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md"
}, },
"promos": { "promos": {
"1.21.3-latest": "1.26.5", "1.21.1-latest": "1.26.2",
"1.21.3-recommended": "1.26.5", "1.21.1-recommended": "1.26.2"
"1.21.1-latest": "1.26.5-MC-1.21.1",
"1.21.1-recommended": "1.26.5-MC-1.21.1"
} }
} }