Fabric Mod
ArcaneTrialMod
Я хочу мод в котором тебе бросает вызов весь мир но ты сильнейший маг в мире и у тебя разрушительные способности которые ты получаешь в ходе прохождения но в начале у тебя только одна способка. В зависимости от сложности у тебя на сложной сложности отнимется 2 сердца нормальная 1 легко 0 мирно 0 и у тебя есть характеристика с помощью которой ты можешь стать сильнее
src/main/java/eu/codexe/arcane_trial_mod/util/PlayerPowerManager.java
package eu.codexe.arcane_trial_mod.util;
import eu.codexe.arcane_trial_mod.spell.SpellManager;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.server.network.ServerPlayerEntity;
public final class PlayerPowerManager {
private static final String POWER_TAG = "arcane_trial_power";
private static final String SOUL_TAG = "arcane_trial_soul";
private static final String SPELL_UNLOCK_TAG = "arcane_trial_spell_unlock";
private PlayerPowerManager() {
}
public static void registerEvents() {
ServerTickEvents.END_SERVER_TICK.register(server -> server.getPlayerManager().getPlayerList().forEach(PlayerPowerManager::applyPassiveScaling));
}
public static void copyProgress(ServerPlayerEntity oldPlayer, ServerPlayerEntity newPlayer) {
NbtCompound oldData = oldPlayer.getPersistentData();
newPlayer.getPersistentData().putInt(POWER_TAG, oldData.getInt(POWER_TAG));
newPlayer.getPersistentData().putFloat(SOUL_TAG, oldData.getFloat(SOUL_TAG));
newPlayer.getPersistentData().putInt(SPELL_UNLOCK_TAG, oldData.getInt(SPELL_UNLOCK_TAG));
}
public static int getPowerLevel(ServerPlayerEntity player) {
return Math.max(0, player.getPersistentData().getInt(POWER_TAG));
}
public static void addPower(ServerPlayerEntity player, int amount) {
if (amount <= 0) {
return;
}
int newPower = getPowerLevel(player) + amount;
player.getPersistentData().putInt(POWER_TAG, newPower);
syncPlayerState(player);
}
public static float getSoulForce(ServerPlayerEntity player) {
return Math.max(0.0f, player.getPersistentData().getFloat(SOUL_TAG));
}
public static void addSoulForce(ServerPlayerEntity player, float amount) {
if (amount <= 0.0f) {
return;
}
float newSoul = getSoulForce(player) + amount;
player.getPersistentData().putFloat(SOUL_TAG, newSoul);
syncPlayerState(player);
}
public static void unlockSpell(ServerPlayerEntity player) {
int unlocked = player.getPersistentData().getInt(SPELL_UNLOCK_TAG);
player.getPersistentData().putInt(SPELL_UNLOCK_TAG, unlocked + 1);
SpellManager.syncPlayerSpells(player);
}
public static int getUnlockedSpells(ServerPlayerEntity player) {