aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWilliam Hergès <william@herges.fr>2025-10-12 17:45:23 +0200
committerWilliam Hergès <william@herges.fr>2025-10-12 17:45:23 +0200
commite1abd870804719a387e227d6f0eab02270f7a65a (patch)
treef6dc1a1cc616c6377958e2fa8e2f295116aa6b35 /src
parent3e6a27cb7d07bfd30676cd377c7c3ee3f35fd612 (diff)
feat(command): /withdraw
Diffstat (limited to 'src')
-rw-r--r--src/main/java/world/anhgelus/lifesteal/Commands.java36
-rw-r--r--src/main/java/world/anhgelus/lifesteal/LifeSteal.java9
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);