package com.burnedkirby.TurnBasedMinecraft.common; import com.burnedkirby.TurnBasedMinecraft.client.ClientProxy; import com.burnedkirby.TurnBasedMinecraft.common.networking.*; import com.mojang.brigadier.LiteralMessage; import com.mojang.brigadier.Message; import com.mojang.brigadier.arguments.BoolArgumentType; import com.mojang.brigadier.arguments.IntegerArgumentType; import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; import net.minecraft.ChatFormatting; import net.minecraft.commands.Commands; import net.minecraft.commands.arguments.EntityArgument; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.RegisterCommandsEvent; import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraftforge.event.server.ServerStoppingEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLDedicatedServerSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.network.simple.SimpleChannel; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @Mod(TurnBasedMinecraftMod.MODID) 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.22.0"; 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/"; public static final String CONFIG_FILE_PATH = CONFIG_DIRECTORY + CONFIG_FILENAME; public static final String DEFAULT_CONFIG_FILE_PATH = CONFIG_DIRECTORY + DEFAULT_CONFIG_FILENAME; public static final String CONFIG_INTERNAL_PATH = "/assets/com_burnedkirby_turnbasedminecraft/" + CONFIG_FILENAME; public static final String MUSIC_ROOT = CONFIG_DIRECTORY + "Music/"; public static final String MUSIC_SILLY = MUSIC_ROOT + "silly/"; public static final String MUSIC_BATTLE = MUSIC_ROOT + "battle/"; private static final String PROTOCOL_VERSION = Integer.toString(2); private static final ResourceLocation HANDLER_ID = new ResourceLocation(MODID, "main_channel"); private static final SimpleChannel HANDLER = NetworkRegistry.ChannelBuilder .named(HANDLER_ID) .clientAcceptedVersions(PROTOCOL_VERSION::equals) .serverAcceptedVersions(PROTOCOL_VERSION::equals) .networkProtocolVersion(() -> PROTOCOL_VERSION) .simpleChannel(); protected static Logger logger = LogManager.getLogger(); public static ResourceLocation getNetResourceLocation() { return HANDLER_ID; } public static SimpleChannel getHandler() { return HANDLER; } public static CommonProxy proxy; public TurnBasedMinecraftMod() { FMLJavaModLoadingContext.get().getModEventBus().addListener(this::firstInit); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::secondInitClient); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::secondInitServer); MinecraftForge.EVENT_BUS.register(this); } private void firstInit(final FMLCommonSetupEvent event) { proxy = DistExecutor.safeRunForDist(() -> ClientProxy::new, () -> CommonProxy::new); proxy.setLogger(logger); proxy.initialize(); // register packets int packetHandlerID = 0; HANDLER.registerMessage( packetHandlerID++, PacketBattleInfo.class, PacketBattleInfo::encode, PacketBattleInfo::decode, PacketBattleInfo::handle); HANDLER.registerMessage( packetHandlerID++, PacketBattleRequestInfo.class, PacketBattleRequestInfo::encode, PacketBattleRequestInfo::decode, PacketBattleRequestInfo::handle); HANDLER.registerMessage( packetHandlerID++, PacketBattleDecision.class, PacketBattleDecision::encode, PacketBattleDecision::decode, PacketBattleDecision::handle); HANDLER.registerMessage( packetHandlerID++, PacketBattleMessage.class, PacketBattleMessage::encode, PacketBattleMessage::decode, PacketBattleMessage::handle); HANDLER.registerMessage( packetHandlerID++, PacketGeneralMessage.class, PacketGeneralMessage::encode, PacketGeneralMessage::decode, PacketGeneralMessage::handle); HANDLER.registerMessage( packetHandlerID++, PacketEditingMessage.class, PacketEditingMessage::encode, PacketEditingMessage::decode, PacketEditingMessage::handle); // register event handler(s) MinecraftForge.EVENT_BUS.register(new AttackEventHandler()); MinecraftForge.EVENT_BUS.register(new PlayerJoinEventHandler()); MinecraftForge.EVENT_BUS.register(new DimensionChangedHandler()); MinecraftForge.EVENT_BUS.register(new HurtEventHandler()); logger.debug("Init com_burnedkirby_turnbasedminecraft"); } private void secondInitClient(final FMLClientSetupEvent event) { proxy.postInit(); } private void secondInitServer(final FMLDedicatedServerSetupEvent event) { proxy.postInit(); } @SubscribeEvent public void serverStarting(ServerStartingEvent event) { logger.debug("About to initialize BattleManager"); if (proxy.initializeBattleManager()) { logger.debug("Initialized BattleManager"); } proxy.getConfig().clearBattleIgnoringPlayers(); } @SubscribeEvent public void registerCommands(RegisterCommandsEvent event) { // tbm-disable event.getDispatcher().register( Commands.literal("tbm-disable") .requires(c -> { return !proxy.getConfig().getIfOnlyOPsCanDisableTurnBasedForSelf() || c.hasPermission(2); }) .executes(c -> { proxy.getConfig().addBattleIgnoringPlayer(c.getSource().getPlayerOrException().getId()); c.getSource().sendSuccess(Component.literal("Disabled turn-based-combat for current player"), true); return 1; })); // tbm-disable-all event.getDispatcher().register( Commands.literal("tbm-disable-all") .requires(c -> { return c.hasPermission(2); }) .executes(c -> { proxy.getConfig().setBattleDisabledForAll(true); for (ServerPlayer player : c.getSource().getServer().getPlayerList().getPlayers()) { proxy.getConfig().addBattleIgnoringPlayer(player.getId()); getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketGeneralMessage("OP disabled turn-based-combat for everyone")); } return 1; })); // tbm-enable event.getDispatcher().register( Commands.literal("tbm-enable") .requires(c -> !proxy.getConfig().getIfOnlyOPsCanDisableTurnBasedForSelf() || c.hasPermission(2)) .executes(c -> { proxy.getConfig().removeBattleIgnoringPlayer(c.getSource().getPlayerOrException().getId()); c.getSource().sendSuccess(Component.literal("Enabled turn-based-combat for current player"), true); return 1; })); // tbm-enable-all event.getDispatcher().register( Commands.literal("tbm-enable-all") .requires(c -> c.hasPermission(2)) .executes(c -> { proxy.getConfig().setBattleDisabledForAll(false); proxy.getConfig().clearBattleIgnoringPlayers(); for (ServerPlayer player : c.getSource().getServer().getPlayerList().getPlayers()) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketGeneralMessage("OP enabled turn-based-combat for everyone")); } return 1; })); // tbm-set-enable event.getDispatcher().register( Commands.literal("tbm-set-enable") .requires(c -> c.hasPermission(2)) .then(Commands.argument("targets", EntityArgument.players()).executes(c -> { for (ServerPlayer player : EntityArgument.getPlayers(c, "targets")) { proxy.getConfig().addBattleIgnoringPlayer(player.getId()); getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketGeneralMessage("OP enabled turn-based-combat for you")); c.getSource().sendSuccess(Component.literal("Enabled turn-based-combat for " + player.getDisplayName().getString()), true); } return 1; }))); // tbm-set-disable event.getDispatcher().register( Commands.literal("tbm-set-disable") .requires(c -> c.hasPermission(2)) .then(Commands.argument("targets", EntityArgument.players()).executes(c -> { for (ServerPlayer player : EntityArgument.getPlayers(c, "targets")) { proxy.getConfig().removeBattleIgnoringPlayer(player.getId()); getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketGeneralMessage("OP disabled turn-based-combat for you")); c.getSource().sendSuccess(Component.literal("Disabled turn-based-combat for " + player.getDisplayName().getString()), true); } return 1; }))); // tbm-edit event.getDispatcher().register( Commands.literal("tbm-edit") .requires(c -> c.hasPermission(2)) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY)); } else { proxy.setEditingPlayer(player); getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY)); logger.info("Begin editing TBM Entity for player \"" + player.getDisplayName().getString() + "\" (\"" + c.getSource().getDisplayName() + "\")"); } return 1; }) .then(Commands.literal("finish") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { if (!proxy.getConfig().editEntityEntry(editingInfo.entityInfo)) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketGeneralMessage("An error occurred while attempting to save an entry to the config")); proxy.removeEditingInfo(player.getId()); } else { proxy.removeEditingInfo(player.getId()); getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketGeneralMessage("Entity info saved in config and loaded.")); } } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("cancel") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null) { proxy.removeEditingInfo(player.getId()); getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketGeneralMessage("Cancelled editing entry.")); } return 1; })) .then(Commands.literal("custom") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { Message exceptionMessage = new LiteralMessage("Invalid action for tbm-edit"); throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY)); } else { proxy.setEditingPlayer(player); proxy.getEditingInfo(player.getId()).isEditingCustomName = true; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY)); logger.info("Begin editing custom TBM Entity for player \"" + player.getDisplayName().getString() + "\" (\"" + c.getSource().getDisplayName() + "\")"); } return 1; })) .then(Commands.literal("edit") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("ignoreBattle") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_IGNORE_BATTLE)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("ignoreBattle", BoolArgumentType.bool()) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); boolean ignoreBattle = BoolArgumentType.getBool(c, "ignoreBattle"); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { editingInfo.entityInfo.ignoreBattle = ignoreBattle; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("attackPower") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_POWER)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("attackPower", IntegerArgumentType.integer()) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); int attackPower = IntegerArgumentType.getInteger(c, "attackPower"); if (attackPower < 0) { attackPower = 0; } if (editingInfo != null && !editingInfo.isPendingEntitySelection) { editingInfo.entityInfo.attackPower = attackPower; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("attackProbability") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_PROBABILITY)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("attackProbability", IntegerArgumentType.integer()) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); int attackProbability = IntegerArgumentType.getInteger(c, "attackProbability"); if (attackProbability < 0) { attackProbability = 0; } else if (attackProbability > 100) { attackProbability = 100; } if (editingInfo != null && !editingInfo.isPendingEntitySelection) { editingInfo.entityInfo.attackProbability = attackProbability; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("attackVariance") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_VARIANCE)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("attackVariance", IntegerArgumentType.integer()) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); int attackVariance = IntegerArgumentType.getInteger(c, "attackVariance"); if (attackVariance < 0) { attackVariance = 0; } if (editingInfo != null && !editingInfo.isPendingEntitySelection) { editingInfo.entityInfo.attackVariance = attackVariance; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("attackEffect") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_EFFECT)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("attackEffect", StringArgumentType.word()) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); EntityInfo.Effect effect = EntityInfo.Effect.fromString(StringArgumentType.getString(c, "attackEffect")); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { editingInfo.entityInfo.attackEffect = effect; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("attackEffectProbability") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_EFFECT_PROBABILITY)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("attackEffectProbability", IntegerArgumentType.integer()) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); int attackEffectProbability = IntegerArgumentType.getInteger(c, "attackEffectProbability"); if (attackEffectProbability < 0) { attackEffectProbability = 0; } else if (attackEffectProbability > 100) { attackEffectProbability = 100; } if (editingInfo != null && !editingInfo.isPendingEntitySelection) { editingInfo.entityInfo.attackEffectProbability = attackEffectProbability; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("defenseDamage") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DEFENSE_DAMAGE)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("defenseDamage", IntegerArgumentType.integer()) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); int defenseDamage = IntegerArgumentType.getInteger(c, "defenseDamage"); if (defenseDamage < 0) { defenseDamage = 0; } if (editingInfo != null && !editingInfo.isPendingEntitySelection) { editingInfo.entityInfo.defenseDamage = defenseDamage; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("defenseDamageProbability") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DEFENSE_DAMAGE_PROBABILITY)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("defenseDamageProbability", IntegerArgumentType.integer()) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); int defenseDamageProbability = IntegerArgumentType.getInteger(c, "defenseDamageProbability"); if (defenseDamageProbability < 0) { defenseDamageProbability = 0; } else if (defenseDamageProbability > 100) { defenseDamageProbability = 100; } if (editingInfo != null && !editingInfo.isPendingEntitySelection) { editingInfo.entityInfo.defenseDamageProbability = defenseDamageProbability; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("evasion") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_EVASION)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("evasion", IntegerArgumentType.integer()) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); int evasion = IntegerArgumentType.getInteger(c, "evasion"); if (evasion < 0) { evasion = 0; } else if (evasion > 100) { evasion = 100; } if (editingInfo != null && !editingInfo.isPendingEntitySelection) { editingInfo.entityInfo.evasion = evasion; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("speed") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_SPEED)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_CATEGORY)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("category", StringArgumentType.word()) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); String category = StringArgumentType.getString(c, "category"); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { editingInfo.entityInfo.category = category; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("decisionAttack") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_ATTACK)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("decisionAttack", IntegerArgumentType.integer()) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); int decisionAttack = IntegerArgumentType.getInteger(c, "decisionAttack"); if (decisionAttack < 0) { decisionAttack = 0; } else if (decisionAttack > 100) { decisionAttack = 100; } if (editingInfo != null && !editingInfo.isPendingEntitySelection) { editingInfo.entityInfo.decisionAttack = decisionAttack; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("decisionDefend") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_DEFEND)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("decisionDefend", IntegerArgumentType.integer()) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); int decisionDefend = IntegerArgumentType.getInteger(c, "decisionDefend"); if (decisionDefend < 0) { decisionDefend = 0; } else if (decisionDefend > 100) { decisionDefend = 100; } if (editingInfo != null && !editingInfo.isPendingEntitySelection) { editingInfo.entityInfo.decisionDefend = decisionDefend; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("decisionFlee") .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_FLEE)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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("decisionFlee", IntegerArgumentType.integer()) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId()); int decisionFlee = IntegerArgumentType.getInteger(c, "decisionFlee"); if (editingInfo != null && !editingInfo.isPendingEntitySelection) { editingInfo.entityInfo.decisionFlee = decisionFlee; getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo)); } else if (editingInfo != null) { getHandler().send(PacketDistributor.PLAYER.with(() -> 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; })) ) ) ); // tbm-server-edit event.getDispatcher().register( Commands.literal("tbm-server-edit") .requires(c -> c.hasPermission(2)) .executes(c -> { ServerPlayer player = c.getSource().getPlayerOrException(); getHandler().send(PacketDistributor.PLAYER.with(() -> player), new PacketEditingMessage(PacketEditingMessage.Type.SERVER_EDIT)); return 1; }) .then(Commands.literal("leave_battle_cooldown").executes(c -> { MutableComponent response = Component.literal("leave_battle_cooldown requires an integer argument. "); MutableComponent subResponse = Component.literal("leave_battle_cooldown is currently: "); response.getSiblings().add(subResponse); subResponse = Component.literal(String.valueOf(TurnBasedMinecraftMod.proxy.getConfig().getLeaveBattleCooldownSeconds())); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, false); return 1; }) .then(Commands.argument("cooldown_seconds", IntegerArgumentType.integer()) .executes(c -> { int cooldown = IntegerArgumentType.getInteger(c, "cooldown_seconds"); // setting cooldown validates the value. Set it, then fetch it again. TurnBasedMinecraftMod.proxy.getConfig().setLeaveBattleCooldownSeconds(cooldown); cooldown = TurnBasedMinecraftMod.proxy.getConfig().getLeaveBattleCooldownSeconds(); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig( "server_config.leave_battle_cooldown", cooldown)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.leave_battle_cooldown\" in config file!"); c.getSource().sendFailure(Component.literal("" + "Failed to set leave_battle_cooldown to \"" + cooldown + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set leave_battle_cooldown to: "); MutableComponent subResponse = Component.literal(String.valueOf(cooldown)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("aggro_start_battle_max_distance").executes(c -> { MutableComponent response = Component.literal("aggro_start_battle_max_distance requires an integer argument. "); MutableComponent subResponse = Component.literal("aggro_start_battle_max_distance is currently: "); response.getSiblings().add(subResponse); subResponse = Component.literal(String.valueOf( TurnBasedMinecraftMod.proxy.getConfig().getAggroStartBattleDistance())); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, false); return 1; }) .then(Commands.argument("aggro_distance", IntegerArgumentType.integer()) .executes(c -> { int distance = IntegerArgumentType.getInteger(c, "aggro_distance"); // setDistance in Config validates the value. Set it, then fetch it again. TurnBasedMinecraftMod.proxy.getConfig().setAggroStartBattleDistance(distance); distance = TurnBasedMinecraftMod.proxy.getConfig().getAggroStartBattleDistance(); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig( "server_config.aggro_start_battle_max_distance", distance)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.aggro_start_battle_max_distance\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set aggro_start_battle_max_distance to \"" + distance + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set aggro_start_battle_max_distance to: "); MutableComponent subResponse = Component.literal(String.valueOf(distance)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("old_battle_behavior").executes(c -> { MutableComponent response = Component.literal("old_battle_behavior requires a boolean argument. "); MutableComponent subResponse = Component.literal("old_battle_behavior is currently: "); response.getSiblings().add(subResponse); subResponse = Component.literal(String.valueOf( TurnBasedMinecraftMod.proxy.getConfig().isOldBattleBehaviorEnabled())); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, false); return 1; }) .then(Commands.argument("old_battle_behavior_enabled", BoolArgumentType.bool()) .executes(c -> { boolean enabled = BoolArgumentType.getBool(c, "old_battle_behavior_enabled"); TurnBasedMinecraftMod.proxy.getConfig().setOldBattleBehavior(enabled); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig( "server_config.old_battle_behavior", enabled)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.old_battle_behavior\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set old_battle_behavior to \"" + enabled + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set old_battle_behavior to: "); MutableComponent subResponse = Component.literal(String.valueOf(enabled)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("anyone_can_disable_tbm_for_self").executes(c -> { MutableComponent response = Component.literal("anyone_can_disable_tbm_for_self requires a boolean argument. "); MutableComponent subResponse = Component.literal("anyone_can_disable_tbm_for_self is currently: "); response.getSiblings().add(subResponse); subResponse = Component.literal(String.valueOf( !TurnBasedMinecraftMod.proxy.getConfig().getIfOnlyOPsCanDisableTurnBasedForSelf())); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, false); return 1; }) .then(Commands.argument("enabled_for_all", BoolArgumentType.bool()) .executes(c -> { boolean enabled_for_all = BoolArgumentType.getBool(c, "enabled_for_all"); TurnBasedMinecraftMod.proxy.getConfig().setIfOnlyOPsCanDisableTurnBasedForSelf(!enabled_for_all); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig( "server_config.anyone_can_disable_tbm_for_self", enabled_for_all )) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.anyone_can_disable_tbm_for_self\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set anyone_can_disable_tbm_for_self to \"" + enabled_for_all + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set anyone_can_disable_tbm_for_self to: "); MutableComponent subResponse = Component.literal(String.valueOf(enabled_for_all)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("max_in_battle").executes(c -> { MutableComponent response = Component.literal("max_in_battle requires an integer argument. "); MutableComponent subResponse = Component.literal("max_in_battle is currently: "); response.getSiblings().add(subResponse); subResponse = Component.literal(String.valueOf( TurnBasedMinecraftMod.proxy.getConfig().getMaxInBattle())); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, false); return 1; }) .then(Commands.argument("max_amount", IntegerArgumentType.integer()) .executes(c -> { int max_amount = IntegerArgumentType.getInteger(c, "max_amount"); // setMaxInBattle in Config validates the value. Set it, then fetch it again. TurnBasedMinecraftMod.proxy.getConfig().setMaxInBattle(max_amount); max_amount = TurnBasedMinecraftMod.proxy.getConfig().getMaxInBattle(); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig( "server_config.max_in_battle", max_amount)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.max_in_battle\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set max_in_battle to \"" + max_amount + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set max_in_battle to: "); MutableComponent subResponse = Component.literal(String.valueOf(max_amount)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("freeze_battle_combatants").executes(c -> { MutableComponent response = Component.literal("freeze_battle_combatants requires a boolean argument. "); MutableComponent subResponse = Component.literal("freeze_battle_combatants is currently: "); response.getSiblings().add(subResponse); subResponse = Component.literal(String.valueOf( !TurnBasedMinecraftMod.proxy.getConfig().isFreezeCombatantsEnabled())); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, false); return 1; }) .then(Commands.argument("freeze_enabled", BoolArgumentType.bool()) .executes(c -> { boolean enabled = BoolArgumentType.getBool(c, "freeze_enabled"); TurnBasedMinecraftMod.proxy.getConfig().setFreezeCombatantsInBattle(enabled); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.freeze_battle_combatants", enabled)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.freeze_battle_combatants\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set freeze_battle_combatants to \"" + enabled + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set freeze_battle_combatants to: "); MutableComponent subResponse = Component.literal(String.valueOf(enabled)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("ignore_battle_types").executes(c -> { MutableComponent response = Component.literal("Use "); MutableComponent subResponse = Component.literal("/tbm-server-edit ignore_battle_types add/remove "); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.YELLOW)); response.getSiblings().add(subResponse); subResponse = Component.literal("ignore_battle_types is currently: ["); response.getSiblings().add(subResponse); boolean isFirst = true; for (String category : TurnBasedMinecraftMod.proxy.getConfig().getIgnoreBattleTypes()) { if (!isFirst) { response.getSiblings().add(Component.literal(", ")); } subResponse = Component.literal(category); subResponse.setStyle(subResponse.getStyle() .withColor(ChatFormatting.GREEN) .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, "/tbm-server-edit ignore_battle_types remove " + category)) .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, Component.literal("Click to remove category")))); response.getSiblings().add(subResponse); isFirst = false; } response.getSiblings().add(Component.literal("] ")); c.getSource().sendSuccess(response, false); return 1; }) .then(Commands.literal("add").executes(c -> { c.getSource().sendFailure(Component.literal("/tbm-server-edit ignore_battle_types add ")); return 1; }) .then(Commands.argument("category", StringArgumentType.greedyString()).executes(c -> { String category = StringArgumentType.getString(c, "category"); if (TurnBasedMinecraftMod.proxy.getConfig().addIgnoreBattleType(category) && TurnBasedMinecraftMod.proxy.getConfig().updateConfigAppendToStringArray("server_config.ignore_battle_types", category)) { MutableComponent response = Component.literal("Successfully appended category \""); MutableComponent sub = Component.literal(category); sub.setStyle(sub.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(sub); sub = Component.literal("\" to ignore_battle_types"); response.getSiblings().add(sub); c.getSource().sendSuccess(response, true); return 1; } c.getSource().sendFailure(Component.literal( "Failed to append category \"" + category + "\" to ignore_battle_types")); return 1; }))) .then(Commands.literal("remove").executes(c -> { c.getSource().sendFailure(Component.literal("/tbm-server-edit ignore_battle_types remove ")); return 1; }) .then(Commands.argument("category", StringArgumentType.greedyString()).executes(c -> { String category = StringArgumentType.getString(c, "category"); if (TurnBasedMinecraftMod.proxy.getConfig().removeIgnoreBattleType(category) && TurnBasedMinecraftMod.proxy.getConfig().updateConfigRemoveFromStringArray("server_config.ignore_battle_types", category)) { MutableComponent response = Component.literal("Successfully removed category \""); MutableComponent sub = Component.literal(category); sub.setStyle(sub.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(sub); sub = Component.literal("\" from ignore_battle_types"); response.getSiblings().add(sub); c.getSource().sendSuccess(response, true); return 1; } c.getSource().sendFailure(Component.literal( "Failed to remove category \"" + category + "\" from ignore_battle_types")); return 1; })))) .then(Commands.literal("player_speed").executes(c -> { MutableComponent parent = Component.literal("Use "); MutableComponent sub = Component.literal("/tbm-server-edit player_speed <0-100>"); sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW)); parent.getSiblings().add(sub); c.getSource().sendSuccess(parent, false); return 1; }) .then(Commands.argument("speed", IntegerArgumentType.integer()).executes(c -> { int speed = IntegerArgumentType.getInteger(c, "speed"); // setPlayerSpeed() in Config validates the value. Set it, then fetch it again. TurnBasedMinecraftMod.proxy.getConfig().setPlayerSpeed(speed); speed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed(); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.player_speed", speed)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.player_speed\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set player_speed to \"" + speed + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set player_speed to: "); MutableComponent subResponse = Component.literal(String.valueOf(speed)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("player_haste_speed").executes(c -> { MutableComponent parent = Component.literal("Use "); MutableComponent sub = Component.literal("/tbm-server-edit player_haste_speed <0-100>"); sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW)); parent.getSiblings().add(sub); c.getSource().sendSuccess(parent, false); return 1; }) .then(Commands.argument("haste_speed", IntegerArgumentType.integer()).executes(c -> { int haste_speed = IntegerArgumentType.getInteger(c, "haste_speed"); // setPlayerHasteSpeed() in Config validates the value. Set it, then fetch it again. TurnBasedMinecraftMod.proxy.getConfig().setPlayerHasteSpeed(haste_speed); haste_speed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerHasteSpeed(); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.player_haste_speed", haste_speed)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.player_haste_speed\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set player_haste_speed to \"" + haste_speed + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set player_haste_speed to: "); MutableComponent subResponse = Component.literal(String.valueOf(haste_speed)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("player_slow_speed").executes(c -> { MutableComponent parent = Component.literal("Use "); MutableComponent sub = Component.literal("/tbm-server-edit player_slow_speed <0-100>"); sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW)); parent.getSiblings().add(sub); c.getSource().sendSuccess(parent, false); return 1; }) .then(Commands.argument("slow_speed", IntegerArgumentType.integer()).executes(c -> { int slow_speed = IntegerArgumentType.getInteger(c, "slow_speed"); // setPlayerSlowSpeed() in Config validates the value. Set it, then fetch it again. TurnBasedMinecraftMod.proxy.getConfig().setPlayerSlowSpeed(slow_speed); slow_speed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSlowSpeed(); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.player_slow_speed", slow_speed)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.player_slow_speed\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set player_slow_speed to \"" + slow_speed + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set player_slow_speed to: "); MutableComponent subResponse = Component.literal(String.valueOf(slow_speed)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("player_attack_probability").executes(c -> { MutableComponent parent = Component.literal("Use "); MutableComponent sub = Component.literal("/tbm-server-edit player_attack_probability <1-100>"); sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW)); parent.getSiblings().add(sub); c.getSource().sendSuccess(parent, false); return 1; }) .then(Commands.argument("probability", IntegerArgumentType.integer()).executes(c -> { int probability = IntegerArgumentType.getInteger(c, "probability"); // setPlayerAttackProbability() in Config validates the value. Set it, then fetch it again. TurnBasedMinecraftMod.proxy.getConfig().setPlayerAttackProbability(probability); probability = TurnBasedMinecraftMod.proxy.getConfig().getPlayerAttackProbability(); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.player_attack_probability", probability)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.player_attack_probability\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set player_attack_probability to \"" + probability + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set player_attack_probability to: "); MutableComponent subResponse = Component.literal(String.valueOf(probability)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("player_evasion").executes(c -> { MutableComponent parent = Component.literal("Use "); MutableComponent sub = Component.literal("/tbm-server-edit player_evasion <0-100>"); sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW)); parent.getSiblings().add(sub); c.getSource().sendSuccess(parent, false); return 1; }) .then(Commands.argument("evasion", IntegerArgumentType.integer()).executes(c -> { int evasion = IntegerArgumentType.getInteger(c, "evasion"); // setPlayerEvasion() in Config validates the value. Set it, then fetch it again. TurnBasedMinecraftMod.proxy.getConfig().setPlayerEvasion(evasion); evasion = TurnBasedMinecraftMod.proxy.getConfig().getPlayerEvasion(); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.player_evasion", evasion)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.player_evasion\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set player_evasion to \"" + evasion + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set player_evasion to: "); MutableComponent subResponse = Component.literal(String.valueOf(evasion)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("defense_duration").executes(c -> { MutableComponent parent = Component.literal("Use "); MutableComponent sub = Component.literal("/tbm-server-edit defense_duration <0-5>"); sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW)); parent.getSiblings().add(sub); c.getSource().sendSuccess(parent, false); return 1; }) .then(Commands.argument("defends", IntegerArgumentType.integer()).executes(c -> { int defends = IntegerArgumentType.getInteger(c, "defends"); // setDefenseDuration() in Config validates the value. Set it, then fetch it again. TurnBasedMinecraftMod.proxy.getConfig().setDefenseDuration(defends); defends = TurnBasedMinecraftMod.proxy.getConfig().getDefenseDuration(); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.defense_duration", defends)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.defense_duration\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set defense_druation to \"" + defends + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set defense_duration to: "); MutableComponent subResponse = Component.literal(String.valueOf(defends)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("flee_good_probability").executes(c -> { MutableComponent parent = Component.literal("Use "); MutableComponent sub = Component.literal("/tbm-server-edit flee_good_probability <1-100>"); sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW)); parent.getSiblings().add(sub); c.getSource().sendSuccess(parent, false); return 1; }) .then(Commands.argument("probability", IntegerArgumentType.integer()).executes(c -> { int probability = IntegerArgumentType.getInteger(c, "probability"); // setFleeGoodProbability() in Config validates the value. Set it, then fetch it again. TurnBasedMinecraftMod.proxy.getConfig().setFleeGoodProbability(probability); probability = TurnBasedMinecraftMod.proxy.getConfig().getFleeGoodProbability(); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.flee_good_probability", probability)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.flee_good_probability\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set flee_good_probability to \"" + probability + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set flee_good_probability to: "); MutableComponent subResponse = Component.literal(String.valueOf(probability)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("flee_bad_probability").executes(c -> { MutableComponent parent = Component.literal("Use "); MutableComponent sub = Component.literal("/tbm-server-edit flee_bad_probability <1-100>"); sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW)); parent.getSiblings().add(sub); c.getSource().sendSuccess(parent, false); return 1; }) .then(Commands.argument("probability", IntegerArgumentType.integer()).executes(c -> { int probability = IntegerArgumentType.getInteger(c, "probability"); // setFleeBadProbability() in Config validates the value. Set it, then fetch it again. TurnBasedMinecraftMod.proxy.getConfig().setFleeBadProbability(probability); probability = TurnBasedMinecraftMod.proxy.getConfig().getFleeBadProbability(); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.flee_bad_probability", probability)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.flee_bad_probability\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set flee_bad_probability to \"" + probability + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set flee_bad_probability to: "); MutableComponent subResponse = Component.literal(String.valueOf(probability)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("minimum_hit_percentage").executes(c -> { MutableComponent parent = Component.literal("Use "); MutableComponent sub = Component.literal("/tbm-server-edit minimum_hit_percentage <1-100>"); sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW)); parent.getSiblings().add(sub); c.getSource().sendSuccess(parent, false); return 1; }) .then(Commands.argument("percentage", IntegerArgumentType.integer()).executes(c -> { int percentage = IntegerArgumentType.getInteger(c, "percentage"); // setMinimumHitPercentage() in Config validates the value. Set it, then fetch it again. TurnBasedMinecraftMod.proxy.getConfig().setMinimumHitPercentage(percentage); percentage = TurnBasedMinecraftMod.proxy.getConfig().getMinimumHitPercentage(); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.minimum_hit_percentage", percentage)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.minimum_hit_percentage\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set minimum_hit_percentage to \"" + percentage + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set minimum_hit_percentage to: "); MutableComponent subResponse = Component.literal(String.valueOf(percentage)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("battle_turn_wait_forever").executes(c -> { MutableComponent parent = Component.literal("Use "); MutableComponent sub = Component.literal("/tbm-server-edit battle_turn_wait_forever "); sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW)); parent.getSiblings().add(sub); c.getSource().sendSuccess(parent, false); return 1; }) .then(Commands.argument("enabled", BoolArgumentType.bool()).executes(c -> { boolean enabled = BoolArgumentType.getBool(c, "enabled"); TurnBasedMinecraftMod.proxy.getConfig().setBattleDecisionDurationForever(enabled); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.battle_turn_wait_forever", enabled)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.battle_turn_wait_forever\" in config file!" ); c.getSource().sendFailure(Component.literal("Failed to set battle_turn_wait_forever to \"" + (enabled ? "true" : "false") + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set battle_turn_wait_forever to: "); MutableComponent subResponse = Component.literal((enabled ? "true" : "false")); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("battle_turn_time_seconds").executes(c -> { MutableComponent parent = Component.literal("Use "); MutableComponent sub = Component.literal("/tbm-server-edit battle_turn_time_seconds <5-60>"); sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW)); parent.getSiblings().add(sub); c.getSource().sendSuccess(parent, false); return 1; }) .then(Commands.argument("seconds", IntegerArgumentType.integer()).executes(c -> { int seconds = IntegerArgumentType.getInteger(c, "seconds"); // setDecisionDurationSeconds() in Config validates the value. Set it, then fetch it again. TurnBasedMinecraftMod.proxy.getConfig().setDecisionDurationSeconds(seconds); seconds = TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationSeconds(); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.battle_turn_time_seconds", seconds)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.battle_turn_time_seconds\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set battle_turn_time_seconds to \"" + seconds + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set battle_turn_time_seconds to: "); MutableComponent subResponse = Component.literal(String.valueOf(seconds)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("creeper_explode_turn").executes(c -> { MutableComponent parent = Component.literal("Use "); MutableComponent sub = Component.literal("/tbm-server-edit creeper_explode_turn <1-10>"); sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW)); parent.getSiblings().add(sub); c.getSource().sendSuccess(parent, false); return 1; }) .then(Commands.argument("turns", IntegerArgumentType.integer()).executes(c -> { int turns = IntegerArgumentType.getInteger(c, "turns"); // setCreeperExplodeTurn() in Config validates the value. Set it, then fetch it again. TurnBasedMinecraftMod.proxy.getConfig().setCreeperExplodeTurn(turns); turns = TurnBasedMinecraftMod.proxy.getConfig().getCreeperExplodeTurn(); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.creeper_explode_turn", turns)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.creeper_explode_turn\" in config file!"); c.getSource().sendFailure(Component.literal( "Failed to set creeper_explode_turn to \"" + turns + "\" in config file!")); } else { MutableComponent response = Component.literal("Successfully set creeper_explode_turn to: "); MutableComponent subResponse = Component.literal(String.valueOf(turns)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("creeper_stop_explode_on_leave_battle").executes(c -> { MutableComponent parent = Component.literal("Use "); MutableComponent sub = Component.literal("/tbm-server-edit creeper_stop_explode_on_leave_battle "); sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW)); parent.getSiblings().add(sub); c.getSource().sendSuccess(parent, false); return 1; }) .then(Commands.argument("stop_explode_on_leave", BoolArgumentType.bool()).executes(c -> { boolean stop_explode_on_leave = BoolArgumentType.getBool(c, "stop_explode_on_leave"); TurnBasedMinecraftMod.proxy.getConfig().setCreeperStopExplodeOnLeaveBattle(stop_explode_on_leave); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.creeper_stop_explode_on_leave_battle", stop_explode_on_leave)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.creeper_stop_explode_on_leave_battle\" in config file!" ); c.getSource().sendFailure(Component.literal( "Failed to set creeper_stop_explode_on_leave_battle to \"" + stop_explode_on_leave + "\" in config file!" )); } else { MutableComponent response = Component.literal("Successfully set creeper_stop_explode_on_leave_battle to: "); MutableComponent subResponse = Component.literal(String.valueOf(stop_explode_on_leave)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("creeper_always_allow_damage").executes(c -> { MutableComponent parent = Component.literal("Use "); MutableComponent sub = Component.literal("/tbm-server-edit creeper_always_allow_damage "); sub.setStyle(sub.getStyle().withColor(ChatFormatting.YELLOW)); parent.getSiblings().add(sub); c.getSource().sendSuccess(parent, false); return 1; }) .then(Commands.argument("allow_damage", BoolArgumentType.bool()).executes(c -> { boolean allow_damage = BoolArgumentType.getBool(c, "allow_damage"); TurnBasedMinecraftMod.proxy.getConfig().setCreeperAlwaysAllowDamage(allow_damage); if (!TurnBasedMinecraftMod.proxy.getConfig().updateConfig("server_config.creeper_always_allow_damage", allow_damage)) { TurnBasedMinecraftMod.logger.warn( "Failed to set \"server_config.creeper_always_allow_damage\" in config file!" ); c.getSource().sendFailure(Component.literal( "Failed to set creeper_always_allow_damage to \"" + allow_damage + "\" in config file!" )); } else { MutableComponent response = Component.literal("Successfully set creeper_always_allow_damage to: "); MutableComponent subResponse = Component.literal(String.valueOf(allow_damage)); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(subResponse); c.getSource().sendSuccess(response, true); } return 1; }))) .then(Commands.literal("ignore_damage_sources").executes(c -> { MutableComponent response = Component.literal("Use "); MutableComponent subResponse = Component.literal("/tbm-server-edit ignore_damage_sources add/remove "); subResponse.setStyle(subResponse.getStyle().withColor(ChatFormatting.YELLOW)); response.getSiblings().add(subResponse); subResponse = Component.literal("ignore_damage_sources is currently: ["); response.getSiblings().add(subResponse); boolean isFirst = true; for (String type : TurnBasedMinecraftMod.proxy.getConfig().getIgnoreHurtDamageSources()) { if (!isFirst) { response.getSiblings().add(Component.literal(", ")); } subResponse = Component.literal(type); subResponse.setStyle(subResponse.getStyle() .withColor(ChatFormatting.GREEN) .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, "/tbm-server-edit ignore_damage_sources remove " + type)) .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, Component.literal("Click to remove type")))); response.getSiblings().add(subResponse); isFirst = false; } response.getSiblings().add(Component.literal("] ")); subResponse = Component.literal("Possible Damage Sources: ["); response.getSiblings().add(subResponse); isFirst = true; for (String type : TurnBasedMinecraftMod.proxy.getConfig().getPossibleIgnoreHurtDamageSources()) { if (!isFirst) { response.getSiblings().add(Component.literal(", ")); } subResponse = Component.literal(type); subResponse.setStyle(subResponse.getStyle() .withColor(ChatFormatting.YELLOW) .withClickEvent(new ClickEvent( ClickEvent.Action.RUN_COMMAND, "/tbm-server-edit ignore_damage_sources add " + type)) .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, Component.literal("Click to add type") ))); response.getSiblings().add(subResponse); isFirst = false; } response.getSiblings().add(Component.literal("] ")); c.getSource().sendSuccess(response, false); return 1; }) .then(Commands.literal("add").executes(c -> { c.getSource().sendFailure(Component.literal("/tbm-server-edit ignore_damage_sources add ")); return 1; }) .then(Commands.argument("type", StringArgumentType.greedyString()).executes(c -> { String type = StringArgumentType.getString(c, "type"); if (TurnBasedMinecraftMod.proxy.getConfig().addIgnoreHurtDamageSource(type) && TurnBasedMinecraftMod.proxy.getConfig().updateConfigAppendToStringArray("server_config.ignore_damage_sources", type)) { MutableComponent response = Component.literal("Successfully appended Damage Source type \""); MutableComponent sub = Component.literal(type); sub.setStyle(sub.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(sub); sub = Component.literal("\" to ignore_damage_sources"); response.getSiblings().add(sub); c.getSource().sendSuccess(response, true); return 1; } c.getSource().sendFailure(Component.literal( "Failed to append type \"" + type + "\" to ignore_damage_sources" )); return 1; }))) .then(Commands.literal("remove").executes(c -> { c.getSource().sendFailure(Component.literal("/tbm-server-edit ignore_damage_sources remove ")); return 1; }) .then(Commands.argument("type", StringArgumentType.greedyString()).executes(c -> { String type = StringArgumentType.getString(c, "type"); if (TurnBasedMinecraftMod.proxy.getConfig().removeIgnoreHurtDamageSource(type) && TurnBasedMinecraftMod.proxy.getConfig().updateConfigRemoveFromStringArray("server_config.ignore_damage_sources", type)) { MutableComponent response = Component.literal("Successfully removed category \""); MutableComponent sub = Component.literal(type); sub.setStyle(sub.getStyle().withColor(ChatFormatting.GREEN)); response.getSiblings().add(sub); sub = Component.literal("\" from ignore_damage_sources"); response.getSiblings().add(sub); c.getSource().sendSuccess(response, true); return 1; } 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 "); 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; }))) ); } @SubscribeEvent public void serverStopping(ServerStoppingEvent ignoredEvent) { logger.debug("About to cleanup BattleManager"); if (proxy.cleanupBattleManager()) { logger.debug("Cleaned up BattleManager"); } } }