From a813057a0d30523427fc6f31a9f310a559b473d5 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Wed, 2 Feb 2022 23:58:12 +0000 Subject: [PATCH] feat: config values and data syncing for substitution count --- .../narutomod/capabilities/INinjaData.java | 4 ++ .../narutomod/capabilities/NinjaData.java | 53 ++++++++++++------ .../sekwah/narutomod/config/NarutoConfig.java | 32 ++++++++++- .../tracker/implemented/BaseSyncTrackers.java | 1 + .../tracker/implemented/ByteSyncTracker.java | 17 ++++++ .../narutomod/models/item/paper_bomb.json | 2 +- .../weapons/{paperbomb.png => paper_bomb.png} | Bin .../textures/jutsu/jutsu_substiutution.png | Bin 0 -> 6172 bytes 8 files changed, 90 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/sekwah/sekclib/capabilitysync/capabilitysync/tracker/implemented/ByteSyncTracker.java rename src/main/resources/assets/narutomod/textures/items/weapons/{paperbomb.png => paper_bomb.png} (100%) create mode 100644 src/main/resources/assets/narutomod/textures/jutsu/jutsu_substiutution.png diff --git a/src/main/java/com/sekwah/narutomod/capabilities/INinjaData.java b/src/main/java/com/sekwah/narutomod/capabilities/INinjaData.java index cb9a436a..cf026177 100644 --- a/src/main/java/com/sekwah/narutomod/capabilities/INinjaData.java +++ b/src/main/java/com/sekwah/narutomod/capabilities/INinjaData.java @@ -14,11 +14,15 @@ public interface INinjaData extends INBTSerializable { float getChakra(); float getMaxChakra(); float getStamina(); + + float getSubstitutionCount(); + float getMaxStamina(); void setChakra(float amount); void setStamina(float amount); void useChakra(float amount, int cooldown); void useStamina(float amount, int cooldown); + void useSubstitution(float amount); void addChakra(float amount); void addStamina(float amount); diff --git a/src/main/java/com/sekwah/narutomod/capabilities/NinjaData.java b/src/main/java/com/sekwah/narutomod/capabilities/NinjaData.java index bf3c85a0..0277b84a 100644 --- a/src/main/java/com/sekwah/narutomod/capabilities/NinjaData.java +++ b/src/main/java/com/sekwah/narutomod/capabilities/NinjaData.java @@ -33,12 +33,18 @@ public class NinjaData implements INinjaData, ICapabilityProvider { @Sync(minTicks = 1) private float stamina; + @Sync + private float substitutions; + @Sync private float maxChakra; @Sync private float maxStamina; + @Sync + private float maxSubstitutions; + /** * If the player can double jump, will be updated by underlying values server side. * @@ -71,19 +77,18 @@ public class NinjaData implements INinjaData, ICapabilityProvider { public NinjaData(boolean isServer) { if (isServer) { - this.maxChakra = this.stamina = NarutoConfig.maxChakra; - this.maxStamina = this.chakra = NarutoConfig.maxStamina; + this.getConfigData(); + this.stamina = this.maxChakra; + this.chakra = this.maxStamina; } this.toggleAbilityData = new ToggleAbilityData(); this.doubleJumpData = new DoubleJumpData(false); } class RegenInfo { - public float regenRate; public int cooldown; - public RegenInfo(float regenRate) { - this.regenRate = regenRate; + public RegenInfo() { } /** @@ -100,8 +105,8 @@ public boolean canRegen() { } } - private RegenInfo chakraRegenInfo = new RegenInfo(0.05f); - private RegenInfo staminaRegenInfo = new RegenInfo(0.4f); + private final RegenInfo chakraRegenInfo = new RegenInfo(); + private final RegenInfo staminaRegenInfo = new RegenInfo(); private static final String CHAKRA_TAG = "chakra"; private static final String STAMINA_TAG = "stamina"; @@ -125,6 +130,11 @@ public float getStamina() { return this.stamina; } + @Override + public float getSubstitutionCount() { + return this.substitutions; + } + @Override public float getMaxStamina() { return this.maxStamina; @@ -152,6 +162,11 @@ public void useStamina(float amount, int cooldown) { this.staminaRegenInfo.cooldown = Math.max(cooldown, this.staminaRegenInfo.cooldown); } + @Override + public void useSubstitution(float amount) { + this.substitutions -= amount; + } + @Override public void addChakra(float amount) { this.chakra = Math.min(Math.max(this.chakra + amount, 0), maxChakra); @@ -213,6 +228,7 @@ public ToggleAbilityData getToggleAbilityData() { @Override public void updateDataServer(Player player) { + this.getConfigData(); Iterator iterator = this.delayedTickEvents.iterator(); while (iterator.hasNext()) { DelayedPlayerTickEvent event = iterator.next(); @@ -224,12 +240,9 @@ public void updateDataServer(Player player) { } // Compile list of keys from cooldown map - ArrayList completeList = new ArrayList<>(); - completeList.addAll(cooldownTickEvents.keySet()); - Iterator completeCooldownIterator = completeList.iterator(); + ArrayList completeList = new ArrayList<>(cooldownTickEvents.keySet()); // loop through to tick and then remove cooldown if complete - while (completeCooldownIterator.hasNext()) { - String name = completeCooldownIterator.next(); + for (String name : completeList) { CooldownTickEvent event = cooldownTickEvents.get(name); event.tick(); if (event.isComplete()) { @@ -238,13 +251,15 @@ public void updateDataServer(Player player) { } if (this.staminaRegenInfo.canRegen()) { - this.stamina += staminaRegenInfo.regenRate; + this.stamina += NarutoConfig.staminaRegen; } if (this.chakraRegenInfo.canRegen()) { - this.chakra += chakraRegenInfo.regenRate; + this.chakra += NarutoConfig.chakraRegen; } - this.stamina = Math.min(Math.max(this.stamina, 0), maxStamina); - this.chakra = Math.min(Math.max(this.chakra, 0), maxChakra); + this.substitutions += NarutoConfig.substitutionRegenRate; + this.substitutions = Math.min(Math.max(this.substitutions, 0), this.maxSubstitutions); + this.stamina = Math.min(Math.max(this.stamina, 0), this.maxStamina); + this.chakra = Math.min(Math.max(this.chakra, 0), this.maxChakra); if (this.currentlyChanneled != null) { Ability ability = NarutoAbilities.ABILITY_REGISTRY.getValue(this.currentlyChanneled); @@ -270,6 +285,12 @@ public void updateDataServer(Player player) { } } + private void getConfigData() { + this.maxChakra = NarutoConfig.maxChakra; + this.maxStamina = NarutoConfig.maxStamina; + this.maxSubstitutions = NarutoConfig.maxSubstitutions; + } + @Override public void scheduleDelayedTickEvent(Consumer consumer, int tickDelay) { this.delayedTickEvents.add(new DelayedPlayerTickEvent(consumer, tickDelay)); diff --git a/src/main/java/com/sekwah/narutomod/config/NarutoConfig.java b/src/main/java/com/sekwah/narutomod/config/NarutoConfig.java index ba4278b5..9735ad6b 100644 --- a/src/main/java/com/sekwah/narutomod/config/NarutoConfig.java +++ b/src/main/java/com/sekwah/narutomod/config/NarutoConfig.java @@ -29,6 +29,18 @@ public class NarutoConfig { private static final ForgeConfigSpec.DoubleValue CONFIG_MAX_STAMINA; public static float maxStamina; + private static final ForgeConfigSpec.DoubleValue CONFIG_CHAKRA_REGEN; + public static float chakraRegen; + + private static final ForgeConfigSpec.DoubleValue CONFIG_STAMINA_REGEN; + public static float staminaRegen; + + private static final ForgeConfigSpec.IntValue CONFIG_MAX_SUBSTITUTIONS; + public static int maxSubstitutions; + + private static final ForgeConfigSpec.IntValue CONFIG_SUBSTITUTION_REGEN_TIME; + public static float substitutionRegenRate; + private static final ForgeConfigSpec.BooleanValue CONFIG_KUNAI_BLOCK_DAMAGE; public static boolean kunaiBlockDamage; @@ -69,10 +81,22 @@ public class NarutoConfig { configBuilder.comment("Stuff such as regen rates and maximum (will likely change with updates, e.g. stats system)").push(ENERGY_BARS); CONFIG_MAX_CHAKRA = configBuilder.comment("Max Chakra") - .defineInRange("maxChakra", 100F , 0d, Integer.MAX_VALUE); + .defineInRange("maxChakra", 100F , 0d, Double.MAX_VALUE); + + CONFIG_CHAKRA_REGEN = configBuilder.comment("Chakra Regen") + .defineInRange("chakraRegen", 0.05d , 0d, Double.MAX_VALUE); CONFIG_MAX_STAMINA = configBuilder.comment("Max Stamina") - .defineInRange("maxStamina", 100F , 0d, Integer.MAX_VALUE); + .defineInRange("maxStamina", 100F , 0d, Double.MAX_VALUE); + + CONFIG_STAMINA_REGEN = configBuilder.comment("Stamina Regen") + .defineInRange("staminaRegen", 0.4d , 0d, Double.MAX_VALUE); + + CONFIG_MAX_SUBSTITUTIONS = configBuilder.comment("Max Substitutions") + .defineInRange("maxSubstitutions", 3 , 0, Integer.MAX_VALUE); + + CONFIG_SUBSTITUTION_REGEN_TIME = configBuilder.comment("Substitution Regen Time (Seconds)") + .defineInRange("substitutionRegenRate", 60 , 0, Integer.MAX_VALUE); configBuilder.pop(); @@ -121,6 +145,10 @@ public class NarutoConfig { public static void loadVariables() { maxChakra = CONFIG_MAX_CHAKRA.get().floatValue(); maxStamina = CONFIG_MAX_STAMINA.get().floatValue(); + staminaRegen = CONFIG_STAMINA_REGEN.get().floatValue(); + chakraRegen = CONFIG_CHAKRA_REGEN.get().floatValue(); + maxSubstitutions = CONFIG_MAX_SUBSTITUTIONS.get(); + substitutionRegenRate = 1f / (CONFIG_SUBSTITUTION_REGEN_TIME.get() * 20f); kunaiBlockDamage = CONFIG_KUNAI_BLOCK_DAMAGE.get(); kunaiBlockDamage = CONFIG_KUNAI_BLOCK_DAMAGE.get(); kunaiExplosionRadius = CONFIG_KUNAI_EXPLOSION_RADIUS.get().floatValue(); diff --git a/src/main/java/com/sekwah/sekclib/capabilitysync/capabilitysync/tracker/implemented/BaseSyncTrackers.java b/src/main/java/com/sekwah/sekclib/capabilitysync/capabilitysync/tracker/implemented/BaseSyncTrackers.java index 1924a519..39dd48dd 100644 --- a/src/main/java/com/sekwah/sekclib/capabilitysync/capabilitysync/tracker/implemented/BaseSyncTrackers.java +++ b/src/main/java/com/sekwah/sekclib/capabilitysync/capabilitysync/tracker/implemented/BaseSyncTrackers.java @@ -15,5 +15,6 @@ public static void registerSyncTrackerEvent(RegisterSyncTrackerTypeEvent event) event.registerSyncTracker(ResourceLocation.class, new ResourceLocationSyncTracker()); event.registerSyncTracker(String.class, new StringSyncTracker()); event.registerSyncTracker(boolean.class, new BoolSyncTracker()); + event.registerSyncTracker(byte.class, new ByteSyncTracker()); } } diff --git a/src/main/java/com/sekwah/sekclib/capabilitysync/capabilitysync/tracker/implemented/ByteSyncTracker.java b/src/main/java/com/sekwah/sekclib/capabilitysync/capabilitysync/tracker/implemented/ByteSyncTracker.java new file mode 100644 index 00000000..e7326772 --- /dev/null +++ b/src/main/java/com/sekwah/sekclib/capabilitysync/capabilitysync/tracker/implemented/ByteSyncTracker.java @@ -0,0 +1,17 @@ +package com.sekwah.sekclib.capabilitysync.capabilitysync.tracker.implemented; + +import com.sekwah.sekclib.capabilitysync.capabilitysync.tracker.SyncTrackerSerializer; +import net.minecraft.network.FriendlyByteBuf; + +public class ByteSyncTracker implements SyncTrackerSerializer { + + @Override + public void encode(Byte objectToSend, FriendlyByteBuf outBuffer) { + outBuffer.writeByte(objectToSend); + } + + @Override + public Byte decode(FriendlyByteBuf inBuffer) { + return inBuffer.readByte(); + } +} diff --git a/src/main/resources/assets/narutomod/models/item/paper_bomb.json b/src/main/resources/assets/narutomod/models/item/paper_bomb.json index 72412988..cc2efcb2 100644 --- a/src/main/resources/assets/narutomod/models/item/paper_bomb.json +++ b/src/main/resources/assets/narutomod/models/item/paper_bomb.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "narutomod:items/weapons/paperbomb" + "layer0": "narutomod:items/weapons/paper_bomb" } } diff --git a/src/main/resources/assets/narutomod/textures/items/weapons/paperbomb.png b/src/main/resources/assets/narutomod/textures/items/weapons/paper_bomb.png similarity index 100% rename from src/main/resources/assets/narutomod/textures/items/weapons/paperbomb.png rename to src/main/resources/assets/narutomod/textures/items/weapons/paper_bomb.png diff --git a/src/main/resources/assets/narutomod/textures/jutsu/jutsu_substiutution.png b/src/main/resources/assets/narutomod/textures/jutsu/jutsu_substiutution.png new file mode 100644 index 0000000000000000000000000000000000000000..979169037040e96d598f34956b491ce5c458e24b GIT binary patch literal 6172 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