A server-side config option was added to enable "player_only_battles" where mobs
cannot enter battle. (I haven't actually tested this fully since I am only 1
person, so there may be bugs.) This can be edited via the config, or via the
`/tbm-server-edit` command.
Version bumped to 1.21.3 .
# Upcoming changes
+# Version 1.21.3
+
+Implemented "player-only" battles, which can be enabled in the server-side
+config or set using `/tbm-server-edit`. (Somewhat untested because I am only 1
+person.)
+
# Version 1.21.2
Refactored checking-if-in-battle code from `O(n)` to `O(1)` complexity.
//apply plugin: 'eclipse'
//apply plugin: 'maven-publish'
-version = "1.21.2"
+version = "1.21.3"
group = "com.burnedkirby.TurnBasedMinecraft"
archivesBaseName = "TurnBasedMinecraft"
.withBold(true));
parent.getSiblings().add(sub);
+ sub = Component.literal("player_only_battles ");
+ sub.setStyle(sub.getStyle()
+ .withColor(ChatFormatting.YELLOW)
+ .withBold(true)
+ .withHoverEvent(new HoverEvent(
+ HoverEvent.Action.SHOW_TEXT,
+ Component.literal("Disables battle for non-player entities")
+ )));
+ parent.getSiblings().add(sub);
+
+ sub = Component.literal("enable ");
+ sub.setStyle(sub.getStyle()
+ .withColor(ChatFormatting.GREEN)
+ .withClickEvent(new ClickEvent(
+ ClickEvent.Action.RUN_COMMAND,
+ "/tbm-server-edit player_only_battles true"
+ )));
+ parent.getSiblings().add(sub);
+
+ sub = Component.literal("disable ");
+ sub.setStyle(sub.getStyle()
+ .withColor(ChatFormatting.GREEN)
+ .withClickEvent(new ClickEvent(
+ ClickEvent.Action.RUN_COMMAND,
+ "/tbm-server-edit player_only_battles false"
+ )));
+ parent.getSiblings().add(sub);
+
TurnBasedMinecraftMod.proxy.displayComponent(parent);
break;
}
attackerCustomName = null;
}
- // verify that both entities are EntityPlayer and not in creative or has a corresponding EntityInfo
+ // Verify that both entities are EntityPlayer and not in creative or has a corresponding EntityInfo.
+ // Also check if "player_only_battles" is enabled and both entities are players.
if(!((event.getEntity() instanceof Player && !((Player)event.getEntity()).isCreative())
|| (config.getEntityInfoReference(receiverClassName) != null || config.getCustomEntityInfoReference(receiverCustomName) != null))
|| !((event.getSource().getEntity() instanceof Player && !((Player)event.getSource().getEntity()).isCreative())
- || (config.getEntityInfoReference(attackerClassName) != null || config.getCustomEntityInfoReference(attackerCustomName) != null)))
+ || (config.getEntityInfoReference(attackerClassName) != null || config.getCustomEntityInfoReference(attackerCustomName) != null))
+ || (TurnBasedMinecraftMod.proxy.getConfig().isPlayerOnlyBattlesEnabled() &&
+ (!(event.getEntity() instanceof Player) || !(event.getSource().getEntity() instanceof Player))))
{
// logger.debug("BattleManager: Failed first check, attacker is \"" + attackerClassName + "\", defender is \"" + receiverClassName + "\"");
return false;
public void checkTargeted(LivingSetAttackTargetEvent event)
{
+ // Check if "player_only_battles" is enabled and if both entities are players.
+ if (TurnBasedMinecraftMod.proxy.getConfig().isPlayerOnlyBattlesEnabled() &&
+ (!(event.getEntity() instanceof Player) || !(event.getTarget() instanceof Player))) {
+ return;
+ }
+
String targetedCustomName;
try {
targetedCustomName = event.getTarget().getCustomName().getString();
private Set<String> possibleIgnoreHurtDamageSources;
private Set<String> ignoreHurtDamageSources;
+ private boolean playerOnlyBattles = false;
+
public Config(Logger logger)
{
entityInfoMap = new HashMap<String, EntityInfo>();
logTOMLInvalidValue("server_config.ignore_damage_sources");
}
+ try {
+ Boolean is_only_player_battles_enabled = conf.get("server_config.player_only_battles");
+ if (is_only_player_battles_enabled != null) {
+ playerOnlyBattles = is_only_player_battles_enabled;
+ } else {
+ playerOnlyBattles = false;
+ logNotFound("server_config.player_only_battles", "false");
+ }
+ } catch (ClassCastException e) {
+ playerOnlyBattles = false;
+ logTOMLInvalidValue("server_config.player_only_battles", "false");
+ }
+
Collection<com.electronwill.nightconfig.core.Config> entities = null;
try {
entities = conf.get("server_config.entity");
public boolean removeIgnoreHurtDamageSource(String source) {
return ignoreHurtDamageSources.remove(source);
}
+
+ public boolean isPlayerOnlyBattlesEnabled() {
+ return playerOnlyBattles;
+ }
+
+ public void setIsPlayerOnlyBattles(boolean enabled) {
+ playerOnlyBattles = enabled;
+ }
}
\ No newline at end of file
public class TurnBasedMinecraftMod {
public static final String MODID = "com_burnedkirby_turnbasedminecraft";
public static final String NAME = "Turn Based Minecraft Mod";
- public static final String VERSION = "1.21.2";
+ public static final String VERSION = "1.21.3";
public static final String CONFIG_FILENAME = "TBM_Config.toml";
public static final String DEFAULT_CONFIG_FILENAME = "TBM_Config_DEFAULT.toml";
public static final String CONFIG_DIRECTORY = "config/TurnBasedMinecraft/";
c.getSource().sendFailure(Component.literal("Failed to remove type \"" + type + "\" from ignore_damage_sources"));
return 1;
}))))
+ .then(Commands.literal("player_only_battles").executes(c -> {
+ MutableComponent parent = Component.literal("Use ");
+ MutableComponent sub = Component.literal("/tbm-server-edit player_only_battles <true/false>");
+ sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW));
+ parent.getSiblings().add(sub);
+
+ c.getSource().sendSuccess(parent, false);
+ return 1;
+ })
+ .then(Commands.argument("player_only_battles", BoolArgumentType.bool()).executes(c -> {
+ boolean player_only_battles = BoolArgumentType.getBool(c, "player_only_battles");
+ TurnBasedMinecraftMod.proxy.getConfig().setIsPlayerOnlyBattles(player_only_battles);
+ if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.player_only_battles", player_only_battles)) {
+ TurnBasedMinecraftMod.logger.warn("Failed to set \"server_config.player_only_battles\" in config file!");
+ c.getSource().sendFailure(Component.literal("Failed to set player_only_battles to \"" + player_only_battles + "\" in config file"));
+ } else {
+ MutableComponent response = Component.literal("Successfully set player_only_battles to: ");
+ MutableComponent sub = Component.literal(String.valueOf(player_only_battles));
+ sub.setStyle(sub.getStyle().withColor(ChatFormatting.GREEN));
+ response.getSiblings().add(sub);
+ c.getSource().sendSuccess(response, true);
+ }
+ return 1;
+ })))
);
}
# The modid of the mod
modId="com_burnedkirby_turnbasedminecraft" #mandatory
# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
-version="1.21.2" #mandatory
+version="1.21.3" #mandatory
# A display name for the mod
displayName="TurnBasedMinecraftMod" #mandatory
# A URL to query for updates for this mod. See the JSON update specification <here>
"sweetBerryBush"
]
+# If this is set to true, only players can enter battle.
+player_only_battles = false
+
# Each "server_config.entity" entry uses the following options:
# name: full class name of the entity, cannot also have option "custom_name"
"modid": "com_burnedkirby_turnbasedminecraft",
"name": "Turn Based Minecraft",
"description": "Changes battles to be turn-based.",
- "version": "1.21.2",
+ "version": "1.21.3",
"mcversion": "1.18.2",
"url": "",
"updateUrl": "",