diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/world/anhgelus/lifesteal/Commands.java | 36 | ||||
| -rw-r--r-- | src/main/java/world/anhgelus/lifesteal/LifeSteal.java | 9 |
2 files changed, 45 insertions, 0 deletions
diff --git a/src/main/java/world/anhgelus/lifesteal/Commands.java b/src/main/java/world/anhgelus/lifesteal/Commands.java new file mode 100644 index 0000000..86aa901 --- /dev/null +++ b/src/main/java/world/anhgelus/lifesteal/Commands.java @@ -0,0 +1,36 @@ +package world.anhgelus.lifesteal; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.arguments.IntegerArgumentType; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.text.Text; + +import static net.minecraft.server.command.CommandManager.argument; +import static net.minecraft.server.command.CommandManager.literal; + +public class Commands { + public static void registerWithdraw(CommandDispatcher<ServerCommandSource> dispatcher) { + final var cmd = literal("withdraw").then(argument("hearts", IntegerArgumentType.integer(1)) + .executes(context -> { + final var source = context.getSource(); + final var hearts = IntegerArgumentType.getInteger(context, "hearts"); + final var p = source.getPlayerOrThrow(); + final var lifeStealer = LifeStealer.Manager.getLifeStealer(p); + // if the amount will ban the LifeStealer, returns + if (lifeStealer.getHealthModifier() - hearts * 2 <= LifeSteal.MIN_HEALTH - 20) { + source.sendError(Text.of("You cannot give that amount.")); + return Command.SINGLE_SUCCESS; + } + for (int i = 0; i < hearts; i++) { + lifeStealer.death(); + p.giveOrDropStack(lifeStealer.getHeart()); + } + source.sendFeedback(() -> Text.of("Hearts given."), false); + return Command.SINGLE_SUCCESS; + }) + ); + + dispatcher.register(cmd); + } +} diff --git a/src/main/java/world/anhgelus/lifesteal/LifeSteal.java b/src/main/java/world/anhgelus/lifesteal/LifeSteal.java index 83d442f..419480c 100644 --- a/src/main/java/world/anhgelus/lifesteal/LifeSteal.java +++ b/src/main/java/world/anhgelus/lifesteal/LifeSteal.java @@ -1,6 +1,8 @@ package world.anhgelus.lifesteal; +import com.mojang.brigadier.CommandDispatcher; import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; @@ -8,9 +10,12 @@ import net.fabricmc.fabric.api.gamerule.v1.GameRuleFactory; import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry; import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; +import net.minecraft.command.CommandRegistryAccess; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.command.CommandManager; +import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.network.ServerPlayNetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.world.GameRules; @@ -36,6 +41,10 @@ public class LifeSteal implements ModInitializer { public void onInitialize() { LOGGER.info("Initializing LifeSteal"); + CommandRegistrationCallback.EVENT.register((CommandDispatcher<ServerCommandSource> dispatcher, CommandRegistryAccess registryAccess, CommandManager.RegistrationEnvironment environment) -> { + Commands.registerWithdraw(dispatcher); + }); + ServerLifecycleEvents.SERVER_STARTED.register(server -> { final var state = StateSaver.getServerState(server); LifeStealer.Manager.loadPlayers(state); |
