diff --git a/src/main/java/jesse/keeblarcraft/Commands/CustomCommandManager.java b/src/main/java/jesse/keeblarcraft/Commands/CustomCommandManager.java new file mode 100644 index 0000000..fdde4c1 --- /dev/null +++ b/src/main/java/jesse/keeblarcraft/Commands/CustomCommandManager.java @@ -0,0 +1,50 @@ +/* + * + * CommandManager + * + * This class maintains all custom commands and executions throughout the mod + * +*/ + +package jesse.keeblarcraft.Commands; + +import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; +import net.minecraft.server.command.CommandManager; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.text.Text; +import jesse.keeblarcraft.Commands.ShortcutCommands; + +public class CustomCommandManager { + // Intentionally empty constructor since at object definition time it may not be possible to register commands + public CustomCommandManager() {} + + // Registers all commands for the mod + public void RegisterCustomCommands() { + CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { + dispatcher.register(CommandManager.literal("amogus").executes(ctx -> { + ctx.getSource().sendFeedback(() -> Text.literal("AMOGOOOOOO"), false); + return 0; + })); + }); + + CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { + dispatcher.register(CommandManager.literal("cbtest").executes(ctx -> { + ctx.getSource().sendFeedback(() -> TestCallback(ctx.getSource()), false); + return 0; + })); + }); + + // CUSTOM COMMAND CLASS OBJECTS BELOW + ShortcutCommands shortcuts = new ShortcutCommands(); + + // REGISTER COMMANDS BELOW + System.out.println("REGISTERING CUSTOM COMMAND EXTENSIONS BELOW"); + shortcuts.RegisterShortcutCommands(); + + } + + public Text TestCallback(ServerCommandSource ctx) { + String stuff = ctx.getName(); + return Text.literal("Callback called from " + stuff); + } +} diff --git a/src/main/java/jesse/keeblarcraft/Commands/ShortcutCommands.java b/src/main/java/jesse/keeblarcraft/Commands/ShortcutCommands.java new file mode 100644 index 0000000..b55a42f --- /dev/null +++ b/src/main/java/jesse/keeblarcraft/Commands/ShortcutCommands.java @@ -0,0 +1,78 @@ +/* + * + * ShortcutCommands + * + * A class that simplifies some of the current vanilla commands with shortcut commands in the game +*/ + +package jesse.keeblarcraft.Commands; + +import com.mojang.brigadier.arguments.IntegerArgumentType; +import com.mojang.brigadier.context.CommandContext; + +import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; +import net.minecraft.server.command.CommandManager; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.text.Text; + +public class ShortcutCommands { + public void RegisterShortcutCommands() + { + // Abstract handling "value" to parse gamemodes 0-2 (survival; creative; spectator) + CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { + dispatcher.register(CommandManager.literal("gm") + .then(CommandManager.argument("value", IntegerArgumentType.integer()) + .executes(context -> CreativeShortcut(IntegerArgumentType.getInteger(context, "value"), context)))); + }); + } + + + /// Command handlers below + + private int CreativeShortcut(int value, CommandContext context) + { + int retValue = -1; + context.getSource().sendMessage(Text.literal("You sent value: " + value)); + + if (context.getSource().isExecutedByPlayer()) { + ServerPlayerEntity player = context.getSource().getPlayer(); + + /// todo: change 4 to be OPERATOR level. 4 is DEFAULT operator level in Minecraft + if(player.hasPermissionLevel(4)) { + switch(value) { + case 0: + /// TODO: Add type checking & permission + player.changeGameMode(net.minecraft.world.GameMode.SURVIVAL); + player.sendMessage(Text.literal("Changing your game mode to SURVIVAL")); + retValue = 0; + break; + case 1: + player.changeGameMode(net.minecraft.world.GameMode.CREATIVE); + player.sendMessage(Text.literal("Changing your game mode to CREATIVE")); + retValue = 0; + break; + case 2: + player.changeGameMode(net.minecraft.world.GameMode.SPECTATOR); + player.sendMessage(Text.literal("Changing your game mode to SPECTATOR")); + retValue = 0; + break; + default: + player.sendMessage(Text.literal("Valid entries are 0=SURVIVAL, 1=CREATIVE, 2=SPECTATOR")); + retValue = -1; + break; + } + + } + else { + player.sendMessage(Text.literal("You do not have permissions to run this command!")); + } + } + else { + System.out.println("This command cannot be executed by a non-player entity!"); + } + + return retValue; + } + +} diff --git a/src/main/java/jesse/keeblarcraft/ConfigMgr/ConfigManager.java b/src/main/java/jesse/keeblarcraft/ConfigMgr/ConfigManager.java new file mode 100644 index 0000000..d4d5856 --- /dev/null +++ b/src/main/java/jesse/keeblarcraft/ConfigMgr/ConfigManager.java @@ -0,0 +1,15 @@ +/* + * + * ConfigManager + * + * This class is the central configuration file manager for all other classes and acts as a utility class for other classes to use. + * It is typical to define this class as a general object (not static instance) for each class in single-threaded actions. If you need + * a special function or action from this class; it is recommended to add it to this class and not make your own. + * +*/ + +package jesse.keeblarcraft.ConfigMgr; + +public class ConfigManager { + +} diff --git a/src/main/java/jesse/keeblarcraft/EventMgr/EventManager.java b/src/main/java/jesse/keeblarcraft/EventMgr/EventManager.java new file mode 100644 index 0000000..57a06e4 --- /dev/null +++ b/src/main/java/jesse/keeblarcraft/EventMgr/EventManager.java @@ -0,0 +1,15 @@ +/* + * + * EventManager + * + * This class is responsible for handling the setup and execution of events within the game for the mod. These events can be configured as plugins in this + * directory which are executed in an abstract fashion with handling. If you need a new event (for a story item, or handling a player event, etc) then it + * is preferred to add that as an extension class and called within this manager object + * +*/ + +package jesse.keeblarcraft.EventMgr; + +public class EventManager { + +} diff --git a/src/main/java/jesse/keeblarcraft/FactionMgr/TeamManager.java b/src/main/java/jesse/keeblarcraft/FactionMgr/TeamManager.java new file mode 100644 index 0000000..e63785b --- /dev/null +++ b/src/main/java/jesse/keeblarcraft/FactionMgr/TeamManager.java @@ -0,0 +1,15 @@ +/* + * + * TeamManager + * + * Class is responsible for keeping track of teams/factions chosen by the players in the game and saves to the configuration + * file for persistent data storage. Class handles checks as well for eligibility purposes (making sure players can join, etc) + * +*/ + +package jesse.keeblarcraft.FactionMgr; + +public class TeamManager { + // Class controls managing teams and pulling from configuration file and loading to configuration file + +} diff --git a/src/main/java/jesse/keeblarcraft/Keeblarcraft.java b/src/main/java/jesse/keeblarcraft/Keeblarcraft.java index 22ac501..7e1671d 100644 --- a/src/main/java/jesse/keeblarcraft/Keeblarcraft.java +++ b/src/main/java/jesse/keeblarcraft/Keeblarcraft.java @@ -1,22 +1,45 @@ +/* + * + * Keeblarcraft + * + * This is the primary server side "main" object that is referenced by Fabric. This is where everything is setup for the mod + * and a very important class. Please becareful as you add to it + * +*/ + package jesse.keeblarcraft; import net.fabricmc.api.ModInitializer; +// import net.minecraft.server.command.ServerCommandSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import jesse.keeblarcraft.Commands.CustomCommandManager; + +// import com.mojang.brigadier.Command; + + public class Keeblarcraft implements ModInitializer { - // This logger is used to write text to the console and the log file. - // It is considered best practice to use your mod id as the logger's name. - // That way, it's clear which mod wrote info, warnings, and errors. + // This logger is used to write text to the console and the log file. + // It is considered best practice to use your mod id as the logger's name. + // That way, it's clear which mod wrote info, warnings, and errors. public static final Logger LOGGER = LoggerFactory.getLogger("keeblarcraft"); + CustomCommandManager cmdMgr = new CustomCommandManager(); - @Override - public void onInitialize() { - // This code runs as soon as Minecraft is in a mod-load-ready state. - // However, some things (like resources) may still be uninitialized. - // Proceed with mild caution. + @Override + public void onInitialize() { + // This code runs as soon as Minecraft is in a mod-load-ready state. + // However, some things (like resources) may still be uninitialized. + // Proceed with mild caution. - LOGGER.info("Hello Fabric world!"); - } + LOGGER.info("Hello Fabric world!"); + cmdMgr.RegisterCustomCommands(); + + // I can't tell if this is required or not; and if it is I imagine it comes before I register the custom commands + // Command command = context -> { + // ServerCommandSource source = context.getSource(); + // return 0; + // }; + } } \ No newline at end of file diff --git a/src/main/java/jesse/keeblarcraft/StoryMgr/StoryMgr.java b/src/main/java/jesse/keeblarcraft/StoryMgr/StoryMgr.java new file mode 100644 index 0000000..76116e8 --- /dev/null +++ b/src/main/java/jesse/keeblarcraft/StoryMgr/StoryMgr.java @@ -0,0 +1,17 @@ +/* + * + * Story Manager + * + * Class keeps track of the story/note-taking done by players and saves it automagically to the configuration file for note taking / story tracking for + * the server. + * + * In larger detail, this class will set a timeline for each player and where they are on the story. Depending on where they are in the story, certain + * milestones will be tagged to their account so they may access certain things that are unlockable achievements within this class + * +*/ + +package jesse.keeblarcraft.StoryMgr; + +public class StoryMgr { + +} diff --git a/src/main/java/jesse/keeblarcraft/Utils/ChatUtil.java b/src/main/java/jesse/keeblarcraft/Utils/ChatUtil.java new file mode 100644 index 0000000..1d05215 --- /dev/null +++ b/src/main/java/jesse/keeblarcraft/Utils/ChatUtil.java @@ -0,0 +1,11 @@ +/* + * + * ChatUtil + * + * Helpful utility for pretty printing in chat in the game with different supported functions and levels + * +*/ + +package jesse.keeblarcraft.Utils; + +public class ChatUtil { }