From 963412b8d5ae24da13da089ad305b21d5e27a20c Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Thu, 17 Oct 2024 14:49:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=A1=E5=91=BD=E4=B9=8B?= =?UTF-8?q?=E5=BE=92=E8=B4=B4=E5=9B=BE=EF=BC=8C=E6=B8=85=E7=90=86=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TaserBulletProjectileEntity.java | 7 +- .../event/ClientEventHandler.java | 7 +- .../item/gun/handgun/Glock17Item.java | 53 ++- .../item/gun/handgun/Glock18Item.java | 54 ++- .../item/gun/handgun/M1911Item.java | 51 ++- .../item/gun/handgun/Trachelium.java | 47 +-- .../item/gun/launcher/JavelinItem.java | 50 +-- .../item/gun/launcher/M79Item.java | 57 +-- .../item/gun/launcher/RpgItem.java | 50 +-- .../item/gun/machinegun/DevotionItem.java | 56 +-- .../item/gun/machinegun/M60Item.java | 73 ++-- .../item/gun/machinegun/MinigunItem.java | 20 +- .../item/gun/machinegun/RpkItem.java | 57 +-- .../item/gun/rifle/AK12Item.java | 44 +-- .../item/gun/rifle/AK47Item.java | 44 +-- .../item/gun/rifle/Hk416Item.java | 55 +-- .../superbwarfare/item/gun/rifle/M4Item.java | 53 +-- .../item/gun/rifle/MarlinItem.java | 104 +++--- .../item/gun/rifle/Mk14Item.java | 53 +-- .../item/gun/rifle/Qbz95Item.java | 53 +-- .../superbwarfare/item/gun/rifle/SksItem.java | 53 +-- .../item/gun/shotgun/Aa12Item.java | 3 +- .../item/gun/shotgun/AbekiriItem.java | 53 +-- .../item/gun/shotgun/M870Item.java | 73 ++-- .../item/gun/smg/VectorItem.java | 57 +-- .../item/gun/sniper/HuntingRifleItem.java | 41 +-- .../item/gun/sniper/K98Item.java | 89 ++--- .../item/gun/sniper/M98bItem.java | 57 ++- .../item/gun/sniper/MosinNagantItem.java | 89 ++--- .../item/gun/sniper/Ntw20Item.java | 63 ++-- .../item/gun/sniper/SentinelItem.java | 65 ++-- .../item/gun/sniper/SvdItem.java | 54 +-- .../item/gun/special/BocekItem.java | 37 +- .../item/gun/special/TaserItem.java | 47 +-- .../animations/ak12.animation.json | 336 ++++++++++-------- .../animations/m60.animation.json | 23 -- .../superbwarfare/models/item/desperado.json | 6 + .../superbwarfare/textures/item/ak12.png | Bin 45537 -> 45684 bytes .../textures/item/perk/desperado.png | Bin 0 -> 801 bytes 39 files changed, 800 insertions(+), 1334 deletions(-) create mode 100644 src/main/resources/assets/superbwarfare/models/item/desperado.json create mode 100644 src/main/resources/assets/superbwarfare/textures/item/perk/desperado.png diff --git a/src/main/java/net/mcreator/superbwarfare/entity/projectile/TaserBulletProjectileEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/projectile/TaserBulletProjectileEntity.java index 2d70f575c..08a394010 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/projectile/TaserBulletProjectileEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/projectile/TaserBulletProjectileEntity.java @@ -12,6 +12,7 @@ import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.monster.Creeper; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.entity.projectile.ItemSupplier; @@ -90,7 +91,11 @@ public class TaserBulletProjectileEntity extends AbstractArrow implements ItemSu return; } if (!living.level().isClientSide()) { - living.addEffect(new MobEffectInstance(ModMobEffects.SHOCK.get(), 100 + volt * 30, volt), this.getOwner()); + if (living.getClass() == Creeper.class) { + //TODO 命中苦力怕时转化为闪电苦力怕 + } else { + living.addEffect(new MobEffectInstance(ModMobEffects.SHOCK.get(), 100 + volt * 30, volt), this.getOwner()); + } } } this.discard(); diff --git a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java index c9ca5b999..2be8e376d 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java @@ -491,7 +491,12 @@ public class ClientEventHandler { float times = 5 * Minecraft.getInstance().getDeltaFrameTime(); double speed = stack.getOrCreateTag().getDouble("zoom_speed"); if (GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) == GLFW.GLFW_PRESS && !notInGame() && drawTime < 0.01) { - zoomTime = Mth.clamp(zoomTime + 0.03 * speed * times, 0, 1); + if (Minecraft.getInstance().player != null) { + Minecraft.getInstance().player.getPersistentData().putDouble("noRun", 5); + } + if (cantFireTime <= 10) { + zoomTime = Mth.clamp(zoomTime + 0.03 * speed * times, 0, 1); + } } else { zoomTime = Mth.clamp(zoomTime - 0.04 * speed * times, 0, 1); } diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/Glock17Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/Glock17Item.java index 16988e913..4fc40d959 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/Glock17Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/Glock17Item.java @@ -46,7 +46,6 @@ import java.util.function.Consumer; public class Glock17Item extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public Glock17Item() { @@ -81,23 +80,20 @@ public class Glock17Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_normal")); - } - - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.idle")); + if (stack.getOrCreateTag().getInt("fire_animation") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.fire")); } - return PlayState.STOP; + + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_empty")); + } + + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_normal")); + } + + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.idle")); } private PlayState idlePredicate(AnimationState event) { @@ -106,21 +102,17 @@ public class Glock17Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (player.isSprinting() && player.onGround() - && player.getPersistentData().getDouble("noRun") == 0 - && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.run")); - } + if (player.isSprinting() && player.onGround() + && player.getPersistentData().getDouble("noRun") == 0 + && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.run")); } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.idle")); } - return PlayState.STOP; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.idle")); } @@ -162,7 +154,6 @@ public class Glock17Item extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/Glock18Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/Glock18Item.java index b3553625d..607982ea3 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/Glock18Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/Glock18Item.java @@ -6,6 +6,7 @@ import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.client.renderer.item.Glock18ItemRenderer; import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.init.ModItems; +import net.mcreator.superbwarfare.init.ModPerks; import net.mcreator.superbwarfare.init.ModSounds; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.item.AnimatedItem; @@ -46,7 +47,6 @@ import java.util.function.Consumer; public class Glock18Item extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public Glock18Item() { @@ -81,22 +81,19 @@ public class Glock18Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_normal")); - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.idle")); + if (stack.getOrCreateTag().getInt("fire_animation") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.fire")); } - return PlayState.STOP; + + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_empty")); + } + + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_normal")); + } + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.idle")); } private PlayState idlePredicate(AnimationState event) { @@ -105,21 +102,17 @@ public class Glock18Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (player.isSprinting() && player.onGround() - && player.getPersistentData().getDouble("noRun") == 0 - && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.run")); - } + if (player.isSprinting() && player.onGround() + && player.getPersistentData().getDouble("noRun") == 0 + && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.run")); } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.idle")); } - return PlayState.STOP; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.idle")); } @@ -164,7 +157,6 @@ public class Glock18Item extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override @@ -179,6 +171,6 @@ public class Glock18Item extends GunItem implements GeoItem, AnimatedItem { @Override public boolean canApplyPerk(Perk perk) { - return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk); + return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get(); } } \ No newline at end of file diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/M1911Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/M1911Item.java index 8c2d96f6c..162eac1d9 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/M1911Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/M1911Item.java @@ -46,7 +46,6 @@ import java.util.function.Consumer; public class M1911Item extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public M1911Item() { @@ -81,22 +80,19 @@ public class M1911Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m1911.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_normal")); - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.idle")); + if (stack.getOrCreateTag().getInt("fire_animation") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.fire")); } - return PlayState.STOP; + + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m1911.reload_empty")); + } + + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_normal")); + } + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.idle")); } private PlayState idlePredicate(AnimationState event) { @@ -105,21 +101,17 @@ public class M1911Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (player.isSprinting() && player.onGround() - && player.getPersistentData().getDouble("noRun") == 0 - && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.run")); - } + if (player.isSprinting() && player.onGround() + && player.getPersistentData().getDouble("noRun") == 0 + && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.run")); } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.idle")); } - return PlayState.STOP; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.idle")); } @@ -164,7 +156,6 @@ public class M1911Item extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/Trachelium.java b/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/Trachelium.java index 86e89b1fb..f1c9b54b6 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/Trachelium.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/handgun/Trachelium.java @@ -51,7 +51,6 @@ import java.util.function.Consumer; public class Trachelium extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public Trachelium() { @@ -91,46 +90,27 @@ public class Trachelium extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("fire_animation") > 1) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.trachelium.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.trachelium.reload")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.trachelium.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.trachelium.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.trachelium.idle")); + if (stack.getOrCreateTag().getInt("fire_animation") > 1) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.trachelium.fire")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!(this.animationProcedure.equals("empty")) && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.trachelium.reload")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.trachelium.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.trachelium.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.trachelium.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - AnimationController procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); AnimationController idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); data.add(idleController); } @@ -172,7 +152,6 @@ public class Trachelium extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/JavelinItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/JavelinItem.java index 9f1d1f085..5863d59fd 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/JavelinItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/JavelinItem.java @@ -52,7 +52,6 @@ import java.util.function.Consumer; public class JavelinItem extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public JavelinItem() { @@ -87,49 +86,29 @@ public class JavelinItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - var tag = stack.getOrCreateTag(); + var tag = stack.getOrCreateTag(); - if (tag.getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.javelin.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.javelin.reload")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.javelin.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.javelin.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.javelin.idle")); + if (tag.getInt("fire_animation") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.javelin.fire")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.javelin.reload")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.javelin.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.javelin.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.javelin.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); data.add(idleController); } @@ -220,7 +199,6 @@ public class JavelinItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/M79Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/M79Item.java index d89b88be6..d320499e3 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/M79Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/M79Item.java @@ -50,7 +50,6 @@ import java.util.function.Consumer; public class M79Item extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; @Override @@ -90,48 +89,23 @@ public class M79Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m79.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m79.reload")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m79.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m79.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m79.idle")); + if (stack.getOrCreateTag().getInt("fire_animation") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m79.fire")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!(this.animationProcedure.equals("empty")) && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m79.reload")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m79.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m79.run")); } } - return PlayState.CONTINUE; - } - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); - var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); - data.add(idleController); + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m79.idle")); } @Override @@ -139,6 +113,12 @@ public class M79Item extends GunItem implements GeoItem, AnimatedItem { return this.cache; } + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar data) { + var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); + data.add(idleController); + } + @Override public Multimap getAttributeModifiers(EquipmentSlot slot, ItemStack stack) { Multimap map = super.getAttributeModifiers(slot, stack); @@ -192,7 +172,6 @@ public class M79Item extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/RpgItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/RpgItem.java index 9cf345088..60d8926e3 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/RpgItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/RpgItem.java @@ -50,7 +50,6 @@ import java.util.function.Consumer; public class RpgItem extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public RpgItem() { @@ -85,49 +84,29 @@ public class RpgItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - var tag = stack.getOrCreateTag(); + var tag = stack.getOrCreateTag(); - if (tag.getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.rpg.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.rpg.reload")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.rpg.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.rpg.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.rpg.idle")); + if (tag.getInt("fire_animation") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.rpg.fire")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.rpg.reload")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.rpg.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.rpg.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.rpg.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); data.add(idleController); } @@ -198,7 +177,6 @@ public class RpgItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/DevotionItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/DevotionItem.java index 780ef9121..451a06bac 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/DevotionItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/DevotionItem.java @@ -6,6 +6,7 @@ import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.client.renderer.item.DevotionItemRenderer; import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.init.ModItems; +import net.mcreator.superbwarfare.init.ModPerks; import net.mcreator.superbwarfare.init.ModSounds; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.item.AnimatedItem; @@ -47,7 +48,6 @@ import java.util.function.Consumer; public class DevotionItem extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public DevotionItem() { @@ -82,51 +82,28 @@ public class DevotionItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.devotion.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.devotion.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.devotion.reload_normal")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.devotion.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.devotion.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.devotion.idle")); + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.devotion.reload_empty")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!(this.animationProcedure.equals("empty")) && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.devotion.reload_normal")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.devotion.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.devotion.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.devotion.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); - var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); + var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); data.add(idleController); } @@ -160,7 +137,6 @@ public class DevotionItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override @@ -175,6 +151,6 @@ public class DevotionItem extends GunItem implements GeoItem, AnimatedItem { @Override public boolean canApplyPerk(Perk perk) { - return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk); + return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get(); } } \ No newline at end of file diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/M60Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/M60Item.java index 251852842..be6d86b20 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/M60Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/M60Item.java @@ -6,6 +6,7 @@ import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.client.renderer.item.M60ItemRenderer; import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.init.ModItems; +import net.mcreator.superbwarfare.init.ModPerks; import net.mcreator.superbwarfare.init.ModSounds; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.item.AnimatedItem; @@ -47,7 +48,6 @@ import java.util.function.Consumer; public class M60Item extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public M60Item() { @@ -76,62 +76,50 @@ public class M60Item extends GunItem implements GeoItem, AnimatedItem { transformType = type; } + private PlayState fireAnimPredicate(AnimationState event) { + LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; + ItemStack stack = player.getMainHandItem(); + if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; + + if (stack.getOrCreateTag().getInt("fire_animation") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m60.fire")); + } + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m60.idle")); + } + private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m60.fire")); - } - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m60.fire2")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m60.reload")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m60.reload2")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m60.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m60.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m60.idle")); + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m60.reload")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m60.reload2")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m60.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m60.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m60.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); + var fireAnimController = new AnimationController<>(this, "fireAnimController", 0, this::fireAnimPredicate); + data.add(fireAnimController); var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); data.add(idleController); } @@ -166,7 +154,6 @@ public class M60Item extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override @@ -181,6 +168,6 @@ public class M60Item extends GunItem implements GeoItem, AnimatedItem { @Override public boolean canApplyPerk(Perk perk) { - return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk); + return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get(); } } \ No newline at end of file diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/MinigunItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/MinigunItem.java index 1307d4d96..3872982ee 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/MinigunItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/MinigunItem.java @@ -55,7 +55,6 @@ import java.util.function.Consumer; public class MinigunItem extends GunItem implements GeoItem, AnimatedItem { private static final String TAG_HEAT = "heat"; private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public MinigunItem() { @@ -120,18 +119,14 @@ public class MinigunItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.minigun.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.minigun.run")); - } + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.minigun.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.minigun.run")); } - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.minigun.idle")); } - return PlayState.STOP; + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.minigun.idle")); } @Override @@ -216,7 +211,6 @@ public class MinigunItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override @@ -233,7 +227,7 @@ public class MinigunItem extends GunItem implements GeoItem, AnimatedItem { public boolean canApplyPerk(Perk perk) { return switch (perk.type) { case AMMO -> true; - case FUNCTIONAL -> false; + case FUNCTIONAL -> perk == ModPerks.FIELD_DOCTOR.get(); case DAMAGE -> perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.KILLING_TALLY.get(); }; } diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/RpkItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/RpkItem.java index 2744e5312..29b3d074b 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/RpkItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/RpkItem.java @@ -6,6 +6,7 @@ import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.client.renderer.item.RpkItemRenderer; import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.init.ModItems; +import net.mcreator.superbwarfare.init.ModPerks; import net.mcreator.superbwarfare.init.ModSounds; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.item.AnimatedItem; @@ -82,52 +83,27 @@ public class RpkItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.reload_normal")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.idle")); + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.reload_empty")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.reload_normal")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.idle")); } @Override - public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); + public void registerControllers(AnimatableManager.ControllerRegistrar data) {; var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); data.add(idleController); } @@ -162,7 +138,6 @@ public class RpkItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override @@ -177,6 +152,6 @@ public class RpkItem extends GunItem implements GeoItem, AnimatedItem { @Override public boolean canApplyPerk(Perk perk) { - return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk); + return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get(); } } \ No newline at end of file diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/AK12Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/AK12Item.java index bff96750f..f94121eaa 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/AK12Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/AK12Item.java @@ -46,7 +46,6 @@ import java.util.function.Consumer; public class AK12Item extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; @Override @@ -86,36 +85,28 @@ public class AK12Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak12.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak12.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak12.reload_normal")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak12.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak12.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak12.idle")); + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak12.reload_empty")); } - return PlayState.STOP; + + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak12.reload_normal")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak12.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak12.run")); + } + } + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak12.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); + var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); data.add(idleController); } @@ -144,7 +135,6 @@ public class AK12Item extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/AK47Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/AK47Item.java index dccd656f5..4b44755ab 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/AK47Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/AK47Item.java @@ -47,7 +47,6 @@ import java.util.function.Consumer; public class AK47Item extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; @Override @@ -87,36 +86,28 @@ public class AK47Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.reload_normal")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.idle")); + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.reload_empty")); } - return PlayState.STOP; + + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.reload_normal")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.run")); + } + } + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); + var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); data.add(idleController); } @@ -145,7 +136,6 @@ public class AK47Item extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/Hk416Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/Hk416Item.java index 3ec794250..3a37aade1 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/Hk416Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/Hk416Item.java @@ -47,7 +47,6 @@ import java.util.function.Consumer; public class Hk416Item extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public Hk416Item() { @@ -82,53 +81,28 @@ public class Hk416Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload_normal")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m4.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m4.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m4.idle")); + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload_empty")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload_normal")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m4.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m4.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m4.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); - var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); + var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); data.add(idleController); } @@ -162,7 +136,6 @@ public class Hk416Item extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/M4Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/M4Item.java index cc412275c..db8a935f4 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/M4Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/M4Item.java @@ -47,7 +47,6 @@ import java.util.function.Consumer; public class M4Item extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public M4Item() { @@ -82,52 +81,27 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload_normal")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m4.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m4.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m4.idle")); + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload_empty")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload_normal")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m4.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m4.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m4.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); data.add(idleController); } @@ -162,7 +136,6 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/MarlinItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/MarlinItem.java index f76530f93..b8f174ca2 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/MarlinItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/MarlinItem.java @@ -49,7 +49,6 @@ import java.util.function.Consumer; public class MarlinItem extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public MarlinItem() { @@ -85,74 +84,54 @@ public class MarlinItem extends GunItem implements GeoItem, AnimatedItem { if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (transformType != null && transformType.firstPerson()) { - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("flash_time") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.fire")); - } - - if (stack.getOrCreateTag().getInt("flash_time") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.fire2")); - } - - if (stack.getOrCreateTag().getDouble("marlin_animation_time") > 0 && !stack.getOrCreateTag().getBoolean("fastfiring")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.shift")); - } - - if (stack.getOrCreateTag().getDouble("marlin_animation_time") > 0 && stack.getOrCreateTag().getBoolean("fastfiring")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.shift2")); - } - - if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getDouble("prepare") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.prepare")); - } - - if (stack.getOrCreateTag().getDouble("load_index") == 0 && stack.getOrCreateTag().getInt("reload_stage") == 2) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.iterativeload")); - } - - if (stack.getOrCreateTag().getDouble("load_index") == 1 && stack.getOrCreateTag().getInt("reload_stage") == 2) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.iterativeload2")); - } - - if (stack.getOrCreateTag().getInt("reload_stage") == 3) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.finish")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.marlin.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.marlin.run")); - } - } - - event.getController().setAnimation(RawAnimation.begin().thenLoop("animation.marlin.idle")); - return PlayState.CONTINUE; + if (stack.getOrCreateTag().getInt("flash_time") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.fire")); } + + if (stack.getOrCreateTag().getInt("flash_time") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.fire2")); + } + + if (stack.getOrCreateTag().getDouble("marlin_animation_time") > 0 && !stack.getOrCreateTag().getBoolean("fastfiring")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.shift")); + } + + if (stack.getOrCreateTag().getDouble("marlin_animation_time") > 0 && stack.getOrCreateTag().getBoolean("fastfiring")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.shift2")); + } + + if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getDouble("prepare") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.prepare")); + } + + if (stack.getOrCreateTag().getDouble("load_index") == 0 && stack.getOrCreateTag().getInt("reload_stage") == 2) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.iterativeload")); + } + + if (stack.getOrCreateTag().getDouble("load_index") == 1 && stack.getOrCreateTag().getInt("reload_stage") == 2) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.iterativeload2")); + } + + if (stack.getOrCreateTag().getInt("reload_stage") == 3) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.finish")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.marlin.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.marlin.run")); + } + } + + event.getController().setAnimation(RawAnimation.begin().thenLoop("animation.marlin.idle")); + return PlayState.CONTINUE; } return PlayState.STOP; } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; - } - } - return PlayState.CONTINUE; - } - @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); data.add(idleController); } @@ -196,7 +175,6 @@ public class MarlinItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/Mk14Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/Mk14Item.java index 346629813..7cb49d566 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/Mk14Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/Mk14Item.java @@ -47,7 +47,6 @@ import java.util.function.Consumer; public class Mk14Item extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public Mk14Item() { @@ -82,52 +81,27 @@ public class Mk14Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m14.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m14.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m14.reload_normal")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m14.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m14.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m14.idle")); + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m14.reload_empty")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m14.reload_normal")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m14.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m14.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m14.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); data.add(idleController); } @@ -162,7 +136,6 @@ public class Mk14Item extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/Qbz95Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/Qbz95Item.java index 3ba5f522d..0bf0be794 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/Qbz95Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/Qbz95Item.java @@ -46,7 +46,6 @@ import java.util.function.Consumer; public class Qbz95Item extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public Qbz95Item() { @@ -81,52 +80,27 @@ public class Qbz95Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.qbz95.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.qbz95.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.qbz95.reload_normal")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.qbz95.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.qbz95.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.qbz95.idle")); + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.qbz95.reload_empty")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.qbz95.reload_normal")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.qbz95.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.qbz95.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.qbz95.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); data.add(idleController); } @@ -161,7 +135,6 @@ public class Qbz95Item extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/SksItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/SksItem.java index 861920071..9e9d98455 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/SksItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/rifle/SksItem.java @@ -47,7 +47,6 @@ import java.util.function.Consumer; public class SksItem extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; @Override @@ -87,52 +86,27 @@ public class SksItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sks.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sks.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sks.reload_normal")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sks.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sks.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sks.idle")); + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sks.reload_empty")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sks.reload_normal")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sks.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sks.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sks.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); data.add(idleController); } @@ -162,7 +136,6 @@ public class SksItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/shotgun/Aa12Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/shotgun/Aa12Item.java index 9c36478c7..46d3bdc0a 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/shotgun/Aa12Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/shotgun/Aa12Item.java @@ -6,6 +6,7 @@ import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.client.renderer.item.Aa12ItemRenderer; import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.init.ModItems; +import net.mcreator.superbwarfare.init.ModPerks; import net.mcreator.superbwarfare.init.ModSounds; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.item.AnimatedItem; @@ -188,6 +189,6 @@ public class Aa12Item extends GunItem implements GeoItem, AnimatedItem { @Override public boolean canApplyPerk(Perk perk) { - return PerkHelper.SHOTGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk); + return PerkHelper.SHOTGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get(); } } \ No newline at end of file diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/shotgun/AbekiriItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/shotgun/AbekiriItem.java index b157e2300..dc8a9e99e 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/shotgun/AbekiriItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/shotgun/AbekiriItem.java @@ -49,7 +49,6 @@ import java.util.function.Consumer; public class AbekiriItem extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; @Override @@ -89,51 +88,28 @@ public class AbekiriItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ab.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ab.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ab.reload_normal")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ab.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ab.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ab.idle")); + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ab.reload_empty")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null) { - if (!(this.animationProcedure.equals("empty")) && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ab.reload_normal")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ab.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ab.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ab.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); - var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); + var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); data.add(idleController); } @@ -167,7 +143,6 @@ public class AbekiriItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/shotgun/M870Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/shotgun/M870Item.java index 41af9f60f..572c3691a 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/shotgun/M870Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/shotgun/M870Item.java @@ -49,7 +49,6 @@ import java.util.function.Consumer; public class M870Item extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public M870Item() { @@ -84,67 +83,44 @@ public class M870Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (transformType != null && transformType.firstPerson()) { - if (this.animationProcedure.equals("empty")) { + if (stack.getOrCreateTag().getDouble("fire_animation") > 0 && stack.getOrCreateTag().getDouble("fire_animation") < 15) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.shift")); + } - if (stack.getOrCreateTag().getDouble("fire_animation") > 0 && stack.getOrCreateTag().getDouble("fire_animation") < 15) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.shift")); - } + if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getDouble("prepare_load") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.preparealt")); + } - if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getDouble("prepare_load") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.preparealt")); - } + if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getDouble("prepare") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.prepare")); + } - if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getDouble("prepare") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.prepare")); - } + if (stack.getOrCreateTag().getDouble("load_index") == 0 && stack.getOrCreateTag().getInt("reload_stage") == 2) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.iterativeload")); + } - if (stack.getOrCreateTag().getDouble("load_index") == 0 && stack.getOrCreateTag().getInt("reload_stage") == 2) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.iterativeload")); - } + if (stack.getOrCreateTag().getDouble("load_index") == 1 && stack.getOrCreateTag().getInt("reload_stage") == 2) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.iterativeload2")); + } - if (stack.getOrCreateTag().getDouble("load_index") == 1 && stack.getOrCreateTag().getInt("reload_stage") == 2) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.iterativeload2")); - } + if (stack.getOrCreateTag().getInt("reload_stage") == 3) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.finish")); + } - if (stack.getOrCreateTag().getInt("reload_stage") == 3) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.finish")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m870.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m870.run")); - } - } - - event.getController().setAnimation(RawAnimation.begin().thenLoop("animation.m870.idle")); - return PlayState.CONTINUE; + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m870.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m870.run")); } } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; - } - } + event.getController().setAnimation(RawAnimation.begin().thenLoop("animation.m870.idle")); return PlayState.CONTINUE; } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); data.add(idleController); } @@ -184,7 +160,6 @@ public class M870Item extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/smg/VectorItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/smg/VectorItem.java index 05b0f58f0..c380e1e27 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/smg/VectorItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/smg/VectorItem.java @@ -6,6 +6,7 @@ import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.client.renderer.item.VectorItemRenderer; import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.init.ModItems; +import net.mcreator.superbwarfare.init.ModPerks; import net.mcreator.superbwarfare.init.ModSounds; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.item.AnimatedItem; @@ -47,7 +48,6 @@ import java.util.function.Consumer; public class VectorItem extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public VectorItem() { @@ -82,53 +82,29 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.vec.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.vec.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.vec.reload_normal")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.vec.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.vec.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.vec.idle")); + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.vec.reload_empty")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.vec.reload_normal")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.vec.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.vec.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.vec.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - AnimationController procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); - AnimationController idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); + AnimationController idleController = new AnimationController<>(this, "idleController", 2, this::idlePredicate); data.add(idleController); } @@ -162,7 +138,6 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override @@ -177,6 +152,6 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem { @Override public boolean canApplyPerk(Perk perk) { - return PerkHelper.SMG_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk); + return PerkHelper.SMG_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get(); } } \ No newline at end of file diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/HuntingRifleItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/HuntingRifleItem.java index 7a0370095..59150de7d 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/HuntingRifleItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/HuntingRifleItem.java @@ -47,7 +47,6 @@ import java.util.function.Consumer; public class HuntingRifleItem extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public HuntingRifleItem() { @@ -87,45 +86,22 @@ public class HuntingRifleItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.hunting_rifle.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.hunting_rifle.reload")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.hunting_rifle.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.hunting_rifle.run")); - } - } - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.hunting_rifle.idle")); + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.hunting_rifle.reload")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!(this.animationProcedure.equals("empty")) && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.hunting_rifle.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.hunting_rifle.run")); } } - return PlayState.CONTINUE; + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.hunting_rifle.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); data.add(idleController); } @@ -156,7 +132,6 @@ public class HuntingRifleItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/K98Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/K98Item.java index fba32b97b..3a746b926 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/K98Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/K98Item.java @@ -46,7 +46,6 @@ import java.util.function.Consumer; public class K98Item extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public K98Item() { @@ -81,38 +80,31 @@ public class K98Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.shift")); - } - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.reload_empty")); - } - - if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getDouble("prepare") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.prepare")); - } - - if (stack.getOrCreateTag().getDouble("load_index") == 0 && stack.getOrCreateTag().getInt("reload_stage") == 2) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.iterativeload")); - } - - if (stack.getOrCreateTag().getDouble("load_index") == 1 && stack.getOrCreateTag().getInt("reload_stage") == 2) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.iterativeload2")); - } - - if (stack.getOrCreateTag().getInt("reload_stage") == 3) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.finish")); - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.k98.idle")); + if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.shift")); } - return PlayState.STOP; + + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.reload_empty")); + } + + if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getDouble("prepare") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.prepare")); + } + + if (stack.getOrCreateTag().getDouble("load_index") == 0 && stack.getOrCreateTag().getInt("reload_stage") == 2) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.iterativeload")); + } + + if (stack.getOrCreateTag().getDouble("load_index") == 1 && stack.getOrCreateTag().getInt("reload_stage") == 2) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.iterativeload2")); + } + + if (stack.getOrCreateTag().getInt("reload_stage") == 3) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.finish")); + } + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.k98.idle")); } private PlayState idlePredicate(AnimationState event) { @@ -121,32 +113,28 @@ public class K98Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (player.isSprinting() && player.onGround() - && player.getPersistentData().getDouble("noRun") == 0 - && !(stack.getOrCreateTag().getBoolean("is_empty_reloading")) - && stack.getOrCreateTag().getInt("reload_stage") != 1 - && stack.getOrCreateTag().getInt("reload_stage") != 2 - && stack.getOrCreateTag().getInt("reload_stage") != 3 - && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.k98.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.k98.run")); - } + if (player.isSprinting() && player.onGround() + && player.getPersistentData().getDouble("noRun") == 0 + && !(stack.getOrCreateTag().getBoolean("is_empty_reloading")) + && stack.getOrCreateTag().getInt("reload_stage") != 1 + && stack.getOrCreateTag().getInt("reload_stage") != 2 + && stack.getOrCreateTag().getInt("reload_stage") != 3 + && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.k98.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.k98.run")); } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.k98.idle")); } - return PlayState.STOP; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.k98.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { var fireAnimController = new AnimationController<>(this, "fireAnimController", 1, this::fireAnimPredicate); data.add(fireAnimController); - var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); + var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); data.add(idleController); } @@ -186,7 +174,6 @@ public class K98Item extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/M98bItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/M98bItem.java index e579e38d5..bead421c5 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/M98bItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/M98bItem.java @@ -47,7 +47,6 @@ import java.util.function.Consumer; public class M98bItem extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public M98bItem() { @@ -82,26 +81,19 @@ public class M98bItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.shift")); - } - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.reload_normal")); - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.idle")); + if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.shift")); } - return PlayState.STOP; + + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.reload_empty")); + } + + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.reload_normal")); + } + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.idle")); } private PlayState idlePredicate(AnimationState event) { @@ -110,28 +102,24 @@ public class M98bItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (player.isSprinting() && player.onGround() - && player.getPersistentData().getDouble("noRun") == 0 - && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.run")); - } + if (player.isSprinting() && player.onGround() + && player.getPersistentData().getDouble("noRun") == 0 + && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.run")); } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.idle")); } - return PlayState.STOP; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { var fireAnimController = new AnimationController<>(this, "fireAnimController", 1, this::fireAnimPredicate); data.add(fireAnimController); - var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); + var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); data.add(idleController); } @@ -165,7 +153,6 @@ public class M98bItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/MosinNagantItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/MosinNagantItem.java index b75431cf9..68e90994e 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/MosinNagantItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/MosinNagantItem.java @@ -46,7 +46,6 @@ import java.util.function.Consumer; public class MosinNagantItem extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public MosinNagantItem() { @@ -81,38 +80,31 @@ public class MosinNagantItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.shift")); - } - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.fire")); - } - - if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getInt("ammo") == 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare_empty")); - } - - if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getInt("ammo") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare")); - } - - if (stack.getOrCreateTag().getDouble("load_index") == 0 && stack.getOrCreateTag().getInt("reload_stage") == 2) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.iterativeload")); - } - - if (stack.getOrCreateTag().getDouble("load_index") == 1 && stack.getOrCreateTag().getInt("reload_stage") == 2) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.iterativeload2")); - } - - if (stack.getOrCreateTag().getInt("reload_stage") == 3) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.finish")); - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mosin.idle")); + if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.shift")); } - return PlayState.STOP; + + if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getInt("ammo") == 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare_empty")); + } + + if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getInt("ammo") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare")); + } + + if (stack.getOrCreateTag().getDouble("load_index") == 0 && stack.getOrCreateTag().getInt("reload_stage") == 2) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.iterativeload")); + } + + if (stack.getOrCreateTag().getDouble("load_index") == 1 && stack.getOrCreateTag().getInt("reload_stage") == 2) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.iterativeload2")); + } + + if (stack.getOrCreateTag().getInt("reload_stage") == 3) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.finish")); + } + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mosin.idle")); } private PlayState idlePredicate(AnimationState event) { @@ -121,32 +113,28 @@ public class MosinNagantItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (player.isSprinting() && player.onGround() - && player.getPersistentData().getDouble("noRun") == 0 - && !(stack.getOrCreateTag().getBoolean("is_empty_reloading")) - && stack.getOrCreateTag().getInt("reload_stage") != 1 - && stack.getOrCreateTag().getInt("reload_stage") != 2 - && stack.getOrCreateTag().getInt("reload_stage") != 3 - && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mosin.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mosin.run")); - } + if (player.isSprinting() && player.onGround() + && player.getPersistentData().getDouble("noRun") == 0 + && !(stack.getOrCreateTag().getBoolean("is_empty_reloading")) + && stack.getOrCreateTag().getInt("reload_stage") != 1 + && stack.getOrCreateTag().getInt("reload_stage") != 2 + && stack.getOrCreateTag().getInt("reload_stage") != 3 + && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mosin.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mosin.run")); } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mosin.idle")); } - return PlayState.STOP; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mosin.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { var fireAnimController = new AnimationController<>(this, "fireAnimController", 1, this::fireAnimPredicate); data.add(fireAnimController); - var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); + var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); data.add(idleController); } @@ -186,7 +174,6 @@ public class MosinNagantItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/Ntw20Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/Ntw20Item.java index 90d5b55b8..010936cd1 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/Ntw20Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/Ntw20Item.java @@ -47,7 +47,6 @@ import java.util.function.Consumer; public class Ntw20Item extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public Ntw20Item() { @@ -87,26 +86,23 @@ public class Ntw20Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.shift")); - } - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.reload_normal")); - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ntw_20.idle")); + if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.shift")); } - return PlayState.STOP; + + if (stack.getOrCreateTag().getInt("fire_animation") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.fire")); + } + + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.reload_empty")); + } + + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.reload_normal")); + } + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ntw_20.idle")); } private PlayState idlePredicate(AnimationState event) { @@ -115,27 +111,23 @@ public class Ntw20Item extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (player.isSprinting() && player.onGround() - && player.getPersistentData().getDouble("noRun") == 0 - && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) - && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ntw_20.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ntw_20.run")); - } + if (player.isSprinting() && player.onGround() + && player.getPersistentData().getDouble("noRun") == 0 + && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) + && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ntw_20.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ntw_20.run")); } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ntw_20.idle")); } - return PlayState.STOP; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ntw_20.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var fireAnimController = new AnimationController<>(this, "fireAnimController", 1, this::fireAnimPredicate); + var fireAnimController = new AnimationController<>(this, "fireAnimController", 0, this::fireAnimPredicate); data.add(fireAnimController); var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); data.add(idleController); @@ -166,7 +158,6 @@ public class Ntw20Item extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SentinelItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SentinelItem.java index 438f2ed98..d635affa6 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SentinelItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SentinelItem.java @@ -61,7 +61,6 @@ public class SentinelItem extends GunItem implements GeoItem, AnimatedItem { private final Supplier energyCapacity; private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public SentinelItem() { @@ -131,30 +130,23 @@ public class SentinelItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.shift")); - } - - if (stack.getOrCreateTag().getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.reload_normal")); - } - - if (stack.getOrCreateTag().getBoolean("sentinel_is_charging")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.charge")); - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sentinel.idle")); + if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.shift")); } - return PlayState.STOP; + + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.reload_empty")); + } + + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.reload_normal")); + } + + if (stack.getOrCreateTag().getBoolean("sentinel_is_charging")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.charge")); + } + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sentinel.idle")); } private PlayState idlePredicate(AnimationState event) { @@ -163,22 +155,18 @@ public class SentinelItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (player.isSprinting() && player.onGround() - && player.getPersistentData().getDouble("noRun") == 0 - && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) - && !stack.getOrCreateTag().getBoolean("sentinel_is_charging") && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sentinel.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sentinel.run")); - } + if (player.isSprinting() && player.onGround() + && player.getPersistentData().getDouble("noRun") == 0 + && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) + && !stack.getOrCreateTag().getBoolean("sentinel_is_charging") && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sentinel.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sentinel.run")); } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sentinel.idle")); } - return PlayState.STOP; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sentinel.idle")); } @Override @@ -251,7 +239,6 @@ public class SentinelItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SvdItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SvdItem.java index ef39d7072..c773bfb18 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SvdItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SvdItem.java @@ -47,7 +47,6 @@ import java.util.function.Consumer; public class SvdItem extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public SvdItem() { @@ -82,53 +81,27 @@ public class SvdItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - var tag = stack.getOrCreateTag(); - - if (tag.getInt("fire_animation") > 0) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.svd.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.svd.reload_empty")); - } - - if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.svd.reload_normal")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.svd.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.svd.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.svd.idle")); + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.svd.reload_empty")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; + if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.svd.reload_normal")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.svd.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.svd.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.svd.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); data.add(idleController); } @@ -163,7 +136,6 @@ public class SvdItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/special/BocekItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/special/BocekItem.java index 052065411..7b339c0c6 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/special/BocekItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/special/BocekItem.java @@ -6,9 +6,11 @@ import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.client.renderer.item.BocekItemRenderer; import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.init.ModItems; +import net.mcreator.superbwarfare.init.ModPerks; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.item.AnimatedItem; import net.mcreator.superbwarfare.item.gun.GunItem; +import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.TooltipTool; import net.minecraft.client.Minecraft; @@ -45,7 +47,6 @@ import java.util.function.Consumer; public class BocekItem extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; public BocekItem() { @@ -88,33 +89,11 @@ public class BocekItem extends GunItem implements GeoItem, AnimatedItem { } } - if (this.animationProcedure.equals("empty")) { - event.getController().setAnimation(RawAnimation.begin().thenLoop("animation.bocek.idle")); - return PlayState.CONTINUE; - } - - return PlayState.STOP; - } - - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; - } - } - return PlayState.CONTINUE; + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.bocek.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); data.add(idleController); } @@ -187,7 +166,6 @@ public class BocekItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override @@ -199,4 +177,13 @@ public class BocekItem extends GunItem implements GeoItem, AnimatedItem { public String getGunDisplayName() { return " Bocek"; } + + @Override + public boolean canApplyPerk(Perk perk) { + return switch (perk.type) { + case AMMO -> true; + case FUNCTIONAL -> perk == ModPerks.FIELD_DOCTOR.get(); + case DAMAGE -> perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.KILLING_TALLY.get(); + }; + } } \ No newline at end of file diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/special/TaserItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/special/TaserItem.java index dcb8ac2f9..6adab4623 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/special/TaserItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/special/TaserItem.java @@ -57,7 +57,6 @@ import java.util.function.Supplier; public class TaserItem extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - public String animationProcedure = "empty"; public static ItemDisplayContext transformType; private final Supplier energyCapacity; @@ -132,46 +131,27 @@ public class TaserItem extends GunItem implements GeoItem, AnimatedItem { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - if (this.animationProcedure.equals("empty")) { - - if (stack.getOrCreateTag().getInt("fire_animation") > 1) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.taser.fire")); - } - - if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.taser.reload")); - } - - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { - if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.taser.run_fast")); - } else { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.taser.run")); - } - } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.taser.idle")); + if (stack.getOrCreateTag().getInt("fire_animation") > 1) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.taser.fire")); } - return PlayState.STOP; - } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!(this.animationProcedure.equals("empty")) && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.taser.reload")); + } + + if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { + if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.taser.run_fast")); + } else { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.taser.run")); } } - return PlayState.CONTINUE; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.taser.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - AnimationController procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); AnimationController idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); data.add(idleController); } @@ -247,7 +227,6 @@ public class TaserItem extends GunItem implements GeoItem, AnimatedItem { @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; } @Override diff --git a/src/main/resources/assets/superbwarfare/animations/ak12.animation.json b/src/main/resources/assets/superbwarfare/animations/ak12.animation.json index 22e2ebcdd..71073ee52 100644 --- a/src/main/resources/assets/superbwarfare/animations/ak12.animation.json +++ b/src/main/resources/assets/superbwarfare/animations/ak12.animation.json @@ -173,118 +173,122 @@ "bones": { "0": { "rotation": { - "0.1167": { + "0.0": { "vector": [0, 0, 0] }, - "0.2167": { - "vector": [6.22824, 1.18826, 5.97426] + "0.1": { + "vector": [3.4, 1.25, 4.95] }, - "0.4": { - "vector": [-13.30086, 5.34654, 0.37241] - }, - "0.4667": { - "vector": [-13.59467, 1.59889, -16.0597] - }, - "0.5333": { - "vector": [-14.32523, -1.08564, -26.90473] - }, - "0.7333": { - "vector": [-14.30348, -1.33052, -27.87588] - }, - "0.8": { - "vector": [-6.36856, -0.15301, -22.00875], + "0.35": { + "vector": [-13.59467, 1.59889, -0.0597], "easing": "easeInElastic" }, - "1.05": { - "vector": [-11.32739, -0.93021, -26.94156], - "easing": "easeInOutSine" + "0.5167": { + "vector": [-13.59467, 1.59889, -16.0597] }, - "1.4": { - "vector": [-11.26067, 1.08, -16.88997] + "0.6333": { + "vector": [-14.32523, -1.08564, -11.90473] }, - "1.5167": { - "vector": [-11.24975, 1.6251, -14.19388] + "0.7333": { + "vector": [-14.30348, -1.33052, -12.87588] }, - "1.6333": { + "0.8": { + "vector": [-4.36856, -0.15301, -17.00875], + "easing": "easeInElastic" + }, + "0.9333": { + "vector": [-11.32739, -0.93021, -6.94156], + "easing": "easeOutSine" + }, + "1.1333": { + "vector": [-11.24975, 1.6251, -6.69388] + }, + "1.3": { "vector": [-9.97469, 3.02705, -17.6383] }, "1.7333": { "vector": [-9.86643, 3.67788, -17.84913] }, "1.8": { - "vector": [-10.03014, 2.69913, -17.54102] - }, - "1.8667": { "vector": [-17.05451, 6.16944, -16.87618] }, - "1.95": { - "vector": [-16.50231, 2.86329, -17.58898] + "1.8667": { + "vector": [-8.03014, 2.69913, -17.54102] }, "2.05": { "vector": [0.1, 1.74, -4.02] }, - "2.1833": { - "vector": [4, 0, 0], - "easing": "easeInOutSine" + "2.25": { + "vector": [2, 0, 2.25] }, - "2.4667": { + "2.4333": { "vector": [0, 0, 0], "easing": "easeInElastic" } }, "position": { - "0.1167": { + "0.0": { "vector": [0, 0, 0] }, + "0.1": { + "vector": [-0.1, 0.1, -0.1], + "easing": "easeInElastic" + }, + "0.2": { + "vector": [-0.1, 0.52, 0.9], + "easing": "easeInElastic" + }, "0.4": { - "vector": [-1.1, 0.3, -0.1], - "easing": "easeInQuad" + "vector": [-0.1, 0.7, -0.1], + "easing": "easeOutQuad" }, "0.5333": { - "vector": [-1.1, 0, -0.6] + "vector": [-0.1, 0.5, -0.6] + }, + "0.6333": { + "vector": [-0.1, 0.25, -0.6] }, "0.7333": { - "vector": [-1.1, 0, -0.6] + "vector": [-0.1, 0.25, -0.6] }, "0.8": { - "vector": [-0.63505, -0.5511, -0.70059] + "vector": [0.36495, -0.3011, -0.70059] }, - "0.95": { - "vector": [-1.04863, 0.13019, -0.57971] + "1.05": { + "vector": [-0.04863, 0.13019, -0.57971] }, - "1.4333": { - "vector": [-0.89683, -0.10129, -0.60415] + "1.2": { + "vector": [0.10317, -0.10129, -0.60415] }, - "1.5667": { - "vector": [-0.85675, 0.06078, -0.58657] + "1.45": { + "vector": [0.14325, 0.06078, -0.58657] }, "1.7333": { - "vector": [-0.88732, 0.11258, -0.78102] + "vector": [0.11268, 0.11258, -0.78102] }, "1.8": { - "vector": [-0.85209, 0.0351, -0.49198] + "vector": [0.14791, 0.0351, -0.49198] }, "1.8667": { - "vector": [-1.5395, 0.79301, -0.39434] + "vector": [-0.5395, 0.29301, -0.39434] }, "1.95": { - "vector": [-0.85209, 0.0351, -0.49198] + "vector": [0.14791, 0.0351, -0.49198] }, "2.0167": { - "vector": [-0.59166, -0.35741, -0.73343], + "vector": [0.40834, -0.35741, -0.73343], "easing": "easeInSine" }, "2.0833": { - "vector": [-0.06, -0.17, -0.42] + "vector": [0.44, -0.17, -0.42] }, - "2.2167": { - "vector": [0.2, -0.2, -0.2] + "2.1667": { + "vector": [0, 0.06, 0.14844] }, - "2.2833": { - "vector": [0.14, -0.14, 0.5], - "easing": "easeInSine" + "2.2667": { + "vector": [0, 0.02, 0.8986] }, - "2.4667": { + "2.4167": { "vector": [0, 0, 0], "easing": "easeInElastic" } @@ -295,32 +299,38 @@ "0.7167": { "vector": [0, 0, 0] }, - "0.8667": { + "0.9167": { "vector": [22.5, 0, 0] }, - "0.9167": { + "0.9667": { "vector": [0, 0, 0] }, "1.1": { "vector": [-12.5, -70, -130] }, - "1.2167": { + "1.1667": { "vector": [-12.5, -70, -130] }, - "1.3167": { + "1.2333": { "vector": [1.51, -72.16, -135.34] }, - "1.3667": { + "1.2833": { "vector": [-0.58781, -40.02039, -106.56534] }, - "1.5": { + "1.4333": { "vector": [-14.72777, -7.86614, -33.43033], "easing": "easeInOutSine" }, - "1.6333": { - "vector": [-14.63843, -5.6156, -7.36216], + "1.5333": { + "vector": [-22.63843, -5.6156, -7.36216], "easing": "easeInOutSine" }, + "1.65": { + "vector": [-12, 0, 0] + }, + "1.7167": { + "vector": [-11.39, 0, 0] + }, "1.8333": { "vector": [0, 0, 0] }, @@ -332,36 +342,40 @@ "0.7167": { "vector": [0, 0, 0] }, - "0.8667": { + "0.9167": { "vector": [0, -10, 3], "easing": "easeInSine" }, - "0.9167": { + "0.9667": { "vector": [0, -10, 0], "easing": "easeInSine" }, "1.1": { "vector": [3.05, -7.25, 7.56] }, - "1.2167": { + "1.1667": { "vector": [4.08351, -1.47888, 4.9022], "easing": "easeInOutSine" }, - "1.3333": { + "1.25": { "vector": [5.1, 0.44, 3.5] }, - "1.4667": { + "1.4": { "vector": [2.86, -1.65, -0.74] }, - "1.6333": { - "vector": [0.39786, -0.49924, -1.91536], + "1.5333": { + "vector": [0.39786, 0.10076, -1.31536], "easing": "easeInOutSine" }, - "1.7333": { - "vector": [0.31674, 0.15258, -1.47242] + "1.6333": { + "vector": [0, -0.26562, -0.6] + }, + "1.7167": { + "vector": [0, -0.23203, -0.53359] }, "1.8333": { - "vector": [0, 0, 0] + "vector": [0, 0, 0], + "easing": "easeInElastic" }, "1.8833": { "vector": [0, 0, 0] @@ -446,115 +460,127 @@ }, "Lefthand": { "rotation": { - "0.45": { + "0.4167": { "vector": [0, 0, 0] }, - "0.65": { + "0.5833": { + "vector": [-10.83774, -11.3082, 26.01338], + "easing": "easeInElastic" + }, + "0.6667": { "vector": [-10.83774, -11.3082, 26.01338], "easing": "easeInOutSine" }, "0.7167": { - "vector": [-10.83774, -11.3082, 26.01338], - "easing": "easeInOutSine" + "vector": [-10.84, -11.31, 26.01] }, - "0.8667": { + "0.9167": { "vector": [-12.84863, -4.82913, 20.93756], "easing": "easeOutSine" }, - "0.9167": { + "0.9667": { "vector": [10.233, 10.2596, 3.51854], "easing": "easeOutSine" }, "1.1": { "vector": [-49.77006, 64.26495, -91.19885] }, - "1.2167": { + "1.1667": { "vector": [-47.55314, 65.39596, -103.44208] }, - "1.3333": { + "1.25": { "vector": [-46.07222, 70.25928, -87.18593] }, - "1.4167": { + "1.35": { "vector": [-16.54273, 37.67935, -40.57865] }, - "1.4667": { + "1.4": { "vector": [-13.14801, 19.23814, -10.56439] }, - "1.6333": { - "vector": [-20.25269, -1.46265, 34.2655], + "1.5333": { + "vector": [-10.79618, 6.21927, 22.54367], "easing": "linear" }, + "1.6333": { + "vector": [-27.96238, -13.84396, 58.89893] + }, "1.7333": { - "vector": [-19.79877, 2.91654, 27.55355], + "vector": [-23.9632, -12.39386, 52.59974], "easing": "linear" }, "1.8333": { - "vector": [-20.25269, -1.46265, 34.2655], + "vector": [-23.9632, -12.39386, 52.59974], "easing": "linear" }, - "1.9667": { - "vector": [-20.25269, -1.46265, 34.2655], + "1.9167": { + "vector": [-23.9632, -12.39386, 52.59974], "easing": "linear" }, - "2.15": { + "2.0833": { "vector": [0, 0, 0] } }, "position": { - "0.45": { + "0.4167": { "vector": [0, 0, 0] }, - "0.65": { + "0.5833": { + "vector": [-2.59069, -0.63326, 6.31688], + "easing": "easeInElastic" + }, + "0.6667": { "vector": [-2.59069, -0.63326, 6.31688], "easing": "easeInOutSine" }, "0.7167": { - "vector": [-2.59, -1.63, 5.67], - "easing": "easeInOutSine" + "vector": [-2.59, -1.29, 5.89] }, - "0.8667": { + "0.9167": { "vector": [-2.69069, -12.23326, 9.61688], "easing": "easeInSine" }, - "0.9167": { + "0.9667": { "vector": [-1.09069, -13.13326, 3.41688], "easing": "easeInSine" }, "1.1": { "vector": [3.78778, -5.55218, 11.79434] }, - "1.2167": { + "1.1667": { "vector": [6.50262, 0.9929, 8.56821] }, - "1.3333": { + "1.25": { "vector": [6.51159, 0.43131, 6.5098] }, - "1.4167": { + "1.35": { "vector": [5.08812, -0.82527, 5.37621] }, - "1.4667": { + "1.4": { "vector": [1.61237, -3.02671, 4.36969] }, - "1.5333": { + "1.4667": { "vector": [-0.78777, -2.78872, 4.5296] }, - "1.6333": { + "1.5333": { "vector": [-3.9135, -3.08305, 4.31438], "easing": "linear" }, + "1.6333": { + "vector": [-5.03219, -1.54203, 6.77] + }, "1.7333": { - "vector": [-4.15934, -1.43666, 5.42372], + "vector": [-4.22575, -1.43666, 6.09951], "easing": "linear" }, "1.8333": { - "vector": [-4.67327, -2.9611, 6.66323], + "vector": [-4.22575, -1.43666, 6.09951], "easing": "linear" }, - "1.9667": { - "vector": [-4.67327, -2.9611, 6.66323], + "1.9167": { + "vector": [-4.22575, -1.43666, 6.09951], "easing": "linear" }, - "2.15": { + "2.0833": { "vector": [0, 0, 0] } } @@ -615,6 +641,11 @@ } } } + }, + "sound_effects": { + "0.0": { + "effect": "ak_12_reload_normal" + } } }, "animation.ak12.reload_empty": { @@ -753,24 +784,30 @@ "1.2167": { "vector": [-12.5, -70, -130] }, - "1.3167": { + "1.3": { "vector": [1.51, -72.16, -135.34] }, - "1.3667": { + "1.35": { "vector": [-0.58781, -40.02039, -106.56534] }, - "1.4667": { + "1.5": { "vector": [-14.72777, -7.86614, -33.43033], "easing": "easeInOutSine" }, - "1.6333": { - "vector": [-14.63843, -5.6156, -7.36216], + "1.6": { + "vector": [-22.63843, -5.6156, -7.36216], "easing": "easeInOutSine" }, - "1.8333": { + "1.7167": { + "vector": [-12, 0, 0] + }, + "1.7833": { + "vector": [-11.39, 0, 0] + }, + "1.9": { "vector": [0, 0, 0] }, - "1.8833": { + "1.95": { "vector": [0, 0, 0] } }, @@ -810,23 +847,27 @@ "vector": [4.08351, -1.47888, 4.9022], "easing": "easeInOutSine" }, - "1.3333": { + "1.3167": { "vector": [5.1, 0.44, 3.5] }, "1.4667": { "vector": [2.86, -1.65, -0.74] }, - "1.6333": { - "vector": [0.39786, -0.49924, -1.91536], + "1.6": { + "vector": [0.39786, 0.10076, -1.31536], "easing": "easeInOutSine" }, - "1.7333": { - "vector": [0.31674, 0.15258, -1.47242] + "1.7": { + "vector": [0, -0.26562, -0.6] }, - "1.8333": { - "vector": [0, 0, 0] + "1.7833": { + "vector": [0, -0.23203, -0.53359] }, - "1.8833": { + "1.9": { + "vector": [0, 0, 0], + "easing": "easeInElastic" + }, + "1.95": { "vector": [0, 0, 0] } }, @@ -950,7 +991,7 @@ "1.2167": { "vector": [-47.55314, 65.39596, -103.44208] }, - "1.3333": { + "1.3167": { "vector": [-46.07222, 70.25928, -87.18593] }, "1.4167": { @@ -959,20 +1000,23 @@ "1.4667": { "vector": [-13.14801, 19.23814, -10.56439] }, - "1.6333": { - "vector": [-20.25269, -1.46265, 34.2655], + "1.6": { + "vector": [-10.79618, 6.21927, 22.54367], "easing": "linear" }, - "1.7333": { - "vector": [-19.79877, 2.91654, 27.55355], + "1.7": { + "vector": [-27.96238, -13.84396, 58.89893] + }, + "1.8": { + "vector": [-23.9632, -12.39386, 52.59974], "easing": "linear" }, - "1.8333": { - "vector": [-20.25269, -1.46265, 34.2655], + "1.9": { + "vector": [-23.9632, -12.39386, 52.59974], "easing": "linear" }, - "1.9667": { - "vector": [-20.25269, -1.46265, 34.2655], + "1.9833": { + "vector": [-23.9632, -12.39386, 52.59974], "easing": "linear" }, "2.15": { @@ -1011,7 +1055,7 @@ "1.2167": { "vector": [6.50262, 0.9929, 8.56821] }, - "1.3333": { + "1.3167": { "vector": [6.51159, 0.43131, 6.5098] }, "1.4167": { @@ -1023,20 +1067,23 @@ "1.5333": { "vector": [-0.78777, -2.78872, 4.5296] }, - "1.6333": { + "1.6": { "vector": [-3.9135, -3.08305, 4.31438], "easing": "linear" }, - "1.7333": { - "vector": [-4.15934, -1.43666, 5.42372], + "1.7": { + "vector": [-5.03219, -1.54203, 6.77] + }, + "1.8": { + "vector": [-4.22575, -1.43666, 6.09951], "easing": "linear" }, - "1.8333": { - "vector": [-4.67327, -2.9611, 6.66323], + "1.9": { + "vector": [-4.22575, -1.43666, 6.09951], "easing": "linear" }, - "1.9667": { - "vector": [-4.67327, -2.9611, 6.66323], + "1.9833": { + "vector": [-4.22575, -1.43666, 6.09951], "easing": "linear" }, "2.15": { @@ -1186,6 +1233,11 @@ } } } + }, + "sound_effects": { + "0.0": { + "effect": "ak_12_reload_empty" + } } } }, diff --git a/src/main/resources/assets/superbwarfare/animations/m60.animation.json b/src/main/resources/assets/superbwarfare/animations/m60.animation.json index d1a718489..79e9b9614 100644 --- a/src/main/resources/assets/superbwarfare/animations/m60.animation.json +++ b/src/main/resources/assets/superbwarfare/animations/m60.animation.json @@ -204,29 +204,6 @@ } } }, - "animation.m60.fire2": { - "animation_length": 0.0833, - "bones": { - "m60_bullet_chain": { - "rotation": { - "0.0": { - "vector": [0, 0, 19.25] - }, - "0.0833": { - "vector": [0, 0, 0] - } - }, - "position": { - "0.0": { - "vector": [0.57813, -0.37109, 0] - }, - "0.0833": { - "vector": [0, 0, 0] - } - } - } - } - }, "animation.m60.reload": { "animation_length": 6.375, "bones": { diff --git a/src/main/resources/assets/superbwarfare/models/item/desperado.json b/src/main/resources/assets/superbwarfare/models/item/desperado.json new file mode 100644 index 000000000..f1542a66e --- /dev/null +++ b/src/main/resources/assets/superbwarfare/models/item/desperado.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "superbwarfare:item/perk/desperado" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/textures/item/ak12.png b/src/main/resources/assets/superbwarfare/textures/item/ak12.png index d6854fe66cfde5e3008a62fd3fcb230edd2ec5dc..b66ac3d3a49675d4e88feb5c89621bcd30b6b1c3 100644 GIT binary patch literal 45684 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�KYmIlQ&6h}F#^%f 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 literal 45537 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 z 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 S?_wu&aNm)=j8Fga^?w7Y<;?8> diff --git a/src/main/resources/assets/superbwarfare/textures/item/perk/desperado.png b/src/main/resources/assets/superbwarfare/textures/item/perk/desperado.png new file mode 100644 index 0000000000000000000000000000000000000000..e41b7130b6dc65e588c119663308fc1f6906a89c GIT binary patch literal 801 zcmV++1K#|JP)(vKf;-~;%wOSoY8&U$>?Y5dXH+5a(aG0JB zH_gQq$pb*^0aaB206uSTSsmPceYMy7{ockZM=TbLqx*T}ITE_$AD=#cH2s|d?{5#Y z@LnvyC6WjJJ-xwAXe;zQz?*!E0Hu#c1S_$79v~#2ZS(qapB+8QGk?El<_V(NAn;FK ziuGpKex&U!L=XuOlBbS-h%V{wJ(ZY+2IEqQX5l9?`r-FUV^boe$anwlUI3UYrCuuf*K4w}iaa3{m9)nr$kp#HI~7^=pvo36xzR z>Q0g6PP9o5;CO=7TB6(Ls1&CtlReHLxYYrcMix0CB8A{sOLTLUv;8iG+hoY-jF9`u zw3Gm&JQml*Xf{TqxC&6(fYP`MP}+df=)DELKc7{nzs?=Y