From 1736dacb9883093214f7919a89340bbbd90766de Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Sat, 6 Jul 2024 14:20:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=9A=84=E6=8D=A2=E5=BC=B9=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../target/event/GunEventHandler.java | 115 +++++++++++++++++ .../target/event/LivingEventHandler.java | 13 +- .../mcreator/target/init/TargetModTags.java | 1 + .../mcreator/target/item/gun/AK47Item.java | 116 +++++++++--------- .../net/mcreator/target/item/gun/Abekiri.java | 3 + .../mcreator/target/item/gun/BocekItem.java | 24 ++-- .../mcreator/target/item/gun/Devotion.java | 3 + .../mcreator/target/item/gun/Hk416Item.java | 3 + .../target/item/gun/HuntingRifle.java | 3 + .../net/mcreator/target/item/gun/Kraber.java | 4 + .../net/mcreator/target/item/gun/M4Item.java | 3 + .../net/mcreator/target/item/gun/M60Item.java | 3 + .../net/mcreator/target/item/gun/M79Item.java | 3 + .../mcreator/target/item/gun/M870Item.java | 4 +- .../mcreator/target/item/gun/M98bItem.java | 3 + .../mcreator/target/item/gun/MarlinItem.java | 4 +- .../net/mcreator/target/item/gun/Minigun.java | 3 + .../mcreator/target/item/gun/Mk14Item.java | 3 + .../net/mcreator/target/item/gun/RpgItem.java | 3 + .../net/mcreator/target/item/gun/RpkItem.java | 3 + .../target/item/gun/SentinelItem.java | 3 + .../net/mcreator/target/item/gun/SksItem.java | 3 + .../net/mcreator/target/item/gun/SvdItem.java | 3 + .../net/mcreator/target/item/gun/Taser.java | 7 +- .../mcreator/target/item/gun/Trachelium.java | 8 +- .../mcreator/target/item/gun/VectorItem.java | 83 +++++++------ .../target/network/message/ReloadMessage.java | 36 +++++- .../procedures/PlayerReloadProcedure.java | 34 ++--- .../resources/data/target/guns/ak_47.json | 4 +- .../data/target/tags/items/open_bolt.json | 18 +++ 30 files changed, 381 insertions(+), 135 deletions(-) create mode 100644 src/main/resources/data/target/tags/items/open_bolt.json diff --git a/src/main/java/net/mcreator/target/event/GunEventHandler.java b/src/main/java/net/mcreator/target/event/GunEventHandler.java index 7bde94c48..ca62800a8 100644 --- a/src/main/java/net/mcreator/target/event/GunEventHandler.java +++ b/src/main/java/net/mcreator/target/event/GunEventHandler.java @@ -4,9 +4,12 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.entity.ProjectileEntity; import net.mcreator.target.init.*; import net.mcreator.target.network.TargetModVariables; +import net.mcreator.target.tools.GunInfo; +import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.ParticleTool; import net.mcreator.target.tools.SoundTool; import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -36,6 +39,7 @@ public class GunEventHandler { if (event.phase == TickEvent.Phase.END && stack.is(TargetModTags.Items.GUN)) { handleGunFire(player); handleMiniGunFire(player); + handleGunReload(player); } } @@ -338,4 +342,115 @@ public class GunEventHandler { } } + /** + * 通用的武器换弹流程 + */ + private static void handleGunReload(Player player) { + ItemStack stack = player.getMainHandItem(); + CompoundTag tag = stack.getOrCreateTag(); + + if (player.getPersistentData().getBoolean("start_reload")) { + if (stack.is(TargetModTags.Items.OPEN_BOLT)) { + if(tag.getInt("ammo") == 0) { + player.getPersistentData().putInt("gun_reloading_time",(int)tag.getDouble("empty_reload_time")); + player.getPersistentData().putBoolean("is_empty_reloading",true); + playGunEmptyReloadSounds(player); + player.getPersistentData().putBoolean("start_reload",false); + } else { + player.getPersistentData().putInt("gun_reloading_time",(int)tag.getDouble("normal_reload_time")); + player.getPersistentData().putBoolean("is_reloading",true); + playGunNormalReloadSounds(player); + player.getPersistentData().putBoolean("start_reload",false); + } + } else { + player.getPersistentData().putInt("gun_reloading_time",(int)tag.getDouble("normal_reload_time")); + player.getPersistentData().putBoolean("is_reloading",true); + playGunNormalReloadSounds(player); + player.getPersistentData().putBoolean("start_reload",false); + } + } + + if (player.getPersistentData().getInt("gun_reloading_time") > 0) { + player.getPersistentData().putInt("gun_reloading_time",player.getPersistentData().getInt("gun_reloading_time") - 1); + } + + if (player.getPersistentData().getInt("gun_reloading_time") == 0 && (player.getPersistentData().getBoolean("is_empty_reloading") || player.getPersistentData().getBoolean("is_reloading"))) { + if (stack.is(TargetModTags.Items.OPEN_BOLT)) { + if(tag.getInt("ammo") == 0) { + + if (stack.is(TargetModTags.Items.SHOTGUN)) { + GunsTool.reload(player, GunInfo.Type.SHOTGUN); + } else if (stack.is(TargetModTags.Items.SNIPER_RIFLE)) { + GunsTool.reload(player, GunInfo.Type.SNIPER); + } else if (stack.is(TargetModTags.Items.HANDGUN) || stack.is(TargetModTags.Items.SMG)) { + GunsTool.reload(player, GunInfo.Type.HANDGUN); + } else if (stack.is(TargetModTags.Items.RIFLE)) { + GunsTool.reload(player, GunInfo.Type.RIFLE); + } + player.getPersistentData().putBoolean("is_empty_reloading",false); + + } else { + + if (stack.is(TargetModTags.Items.SHOTGUN)) { + GunsTool.reload(player, GunInfo.Type.SHOTGUN ,true); + } else if (stack.is(TargetModTags.Items.SNIPER_RIFLE)) { + GunsTool.reload(player, GunInfo.Type.SNIPER ,true); + } else if (stack.is(TargetModTags.Items.HANDGUN) || stack.is(TargetModTags.Items.SMG)) { + GunsTool.reload(player, GunInfo.Type.HANDGUN ,true); + } else if (stack.is(TargetModTags.Items.RIFLE)) { + GunsTool.reload(player, GunInfo.Type.RIFLE ,true); + } + player.getPersistentData().putBoolean("is_reloading",false); + + } + } else { + + if (stack.is(TargetModTags.Items.SHOTGUN)) { + GunsTool.reload(player, GunInfo.Type.SHOTGUN); + } else if (stack.is(TargetModTags.Items.SNIPER_RIFLE)) { + GunsTool.reload(player, GunInfo.Type.SNIPER); + } else if (stack.is(TargetModTags.Items.HANDGUN) || stack.is(TargetModTags.Items.SMG)) { + GunsTool.reload(player, GunInfo.Type.HANDGUN); + } else if (stack.is(TargetModTags.Items.RIFLE)) { + GunsTool.reload(player, GunInfo.Type.RIFLE); + } + player.getPersistentData().putBoolean("is_reloading",false); + + } + } + } + + public static void playGunEmptyReloadSounds(Player player) { + ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) { + return; + } + + if (!player.level().isClientSide) { + String origin = stack.getItem().getDescriptionId(); + String name = origin.substring(origin.lastIndexOf(".") + 1); + + SoundEvent sound1p = ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation(TargetMod.MODID, name + "_reload_empty")); + if (sound1p != null && player instanceof ServerPlayer serverPlayer) { + SoundTool.playLocalSound(serverPlayer, sound1p, 2f, 1f); + } + } + } + + public static void playGunNormalReloadSounds(Player player) { + ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) { + return; + } + + if (!player.level().isClientSide) { + String origin = stack.getItem().getDescriptionId(); + String name = origin.substring(origin.lastIndexOf(".") + 1); + + SoundEvent sound1p = ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation(TargetMod.MODID, name + "_reload_normal")); + if (sound1p != null && player instanceof ServerPlayer serverPlayer) { + SoundTool.playLocalSound(serverPlayer, sound1p, 2f, 1f); + } + } + } } diff --git a/src/main/java/net/mcreator/target/event/LivingEventHandler.java b/src/main/java/net/mcreator/target/event/LivingEventHandler.java index 430d38944..baa6fef6c 100644 --- a/src/main/java/net/mcreator/target/event/LivingEventHandler.java +++ b/src/main/java/net/mcreator/target/event/LivingEventHandler.java @@ -144,6 +144,10 @@ public class LivingEventHandler { ItemStack oldStack = event.getFrom(); ItemStack newStack = event.getTo(); + if (!newStack.is(TargetModTags.Items.GUN) ){ + return; + } + if (player instanceof ServerPlayer serverPlayer) { var newTag = newStack.getTag(); var oldTag = oldStack.getTag(); @@ -167,13 +171,18 @@ public class LivingEventHandler { capability.syncPlayerVariables(player); }); - player.getPersistentData().putDouble("zoom_pos", 0); - player.getPersistentData().putDouble("zoom_animation_time", 0); if (newStack.getOrCreateTag().getInt("bolt_action_time") > 0) { newStack.getOrCreateTag().putInt("bolt_action_anim", 0); } } } + + player.getPersistentData().putDouble("zoom_pos", 0); + player.getPersistentData().putDouble("zoom_animation_time", 0); + player.getPersistentData().putBoolean("is_reloading",false); + player.getPersistentData().putBoolean("is_empty_reloading",false); + player.getPersistentData().putInt("gun_reloading_time",0); + } } diff --git a/src/main/java/net/mcreator/target/init/TargetModTags.java b/src/main/java/net/mcreator/target/init/TargetModTags.java index c0e49d292..60d65236f 100644 --- a/src/main/java/net/mcreator/target/init/TargetModTags.java +++ b/src/main/java/net/mcreator/target/init/TargetModTags.java @@ -19,6 +19,7 @@ public class TargetModTags { public static final TagKey NORMAL_GUN = tag("normal_gun"); public static final TagKey LEGENDARY_GUN = tag("legendary_gun"); public static final TagKey SPECIAL_GUN = tag("special_gun"); + public static final TagKey OPEN_BOLT = tag("open_bolt"); private static TagKey tag(String name) { return ItemTags.create(new ResourceLocation(TargetMod.MODID, name)); diff --git a/src/main/java/net/mcreator/target/item/gun/AK47Item.java b/src/main/java/net/mcreator/target/item/gun/AK47Item.java index d12e4518b..a927d5738 100644 --- a/src/main/java/net/mcreator/target/item/gun/AK47Item.java +++ b/src/main/java/net/mcreator/target/item/gun/AK47Item.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.AK47ItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -78,7 +79,9 @@ public class AK47Item extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { @@ -90,11 +93,11 @@ public class AK47Item extends GunItem implements GeoItem, AnimatedItem { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.fire")); } - if (stack.getOrCreateTag().getBoolean("reloading") && stack.getOrCreateTag().getBoolean("empty_reload")) { + if (player.getPersistentData().getBoolean("is_empty_reloading") && player.getPersistentData().getInt("gun_reloading_time") > 0) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.reload_empty")); } - if (stack.getOrCreateTag().getBoolean("reloading") && !stack.getOrCreateTag().getBoolean("empty_reload")) { + if (player.getPersistentData().getBoolean("is_reloading") && player.getPersistentData().getInt("gun_reloading_time") > 0) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.reload_normal")); } @@ -170,61 +173,60 @@ public class AK47Item extends GunItem implements GeoItem, AnimatedItem { return map; } - @Override - public void inventoryTick(ItemStack itemStack, Level world, Entity entity, int slot, boolean selected) { - super.inventoryTick(itemStack, world, entity, slot, selected); - - if (entity instanceof Player player) { - var tag = itemStack.getOrCreateTag(); - double id = tag.getDouble("id"); - if (player.getMainHandItem().getOrCreateTag().getDouble("id") != tag.getDouble("id")) { - tag.putBoolean("empty_reload", false); - tag.putBoolean("reloading", false); - tag.putDouble("reload_time", 0); - } - if (tag.getBoolean("reloading") && tag.getInt("ammo") == 0) { - if (tag.getDouble("reload_time") == 66) { - entity.getPersistentData().putDouble("id", id); - if (!entity.level().isClientSide()) { - SoundTool.playLocalSound(player, TargetModSounds.AK_47_RELOAD_EMPTY.get(), 100, 1); - } - } - if (player.getMainHandItem().getItem() == itemStack.getItem() - && player.getMainHandItem().getOrCreateTag().getDouble("id") == id) { - if (tag.getDouble("reload_time") > 0) { - tag.putDouble("reload_time", (tag.getDouble("reload_time") - 1)); - } - } else { - tag.putBoolean("reloading", false); - tag.putBoolean("empty_reload", false); - tag.putDouble("reload_time", 0); - } - if (tag.getDouble("reload_time") == 1 && player.getMainHandItem().getOrCreateTag().getDouble("id") == id) { - GunsTool.reload(entity, GunInfo.Type.RIFLE); - } - } else if (tag.getBoolean("reloading") && tag.getInt("ammo") > 0) { - if (tag.getDouble("reload_time") == 51) { - entity.getPersistentData().putDouble("id", id); - if (!entity.level().isClientSide()) { - SoundTool.playLocalSound(player, TargetModSounds.AK_47_RELOAD_NORMAL.get(), 100, 1); - } - } - if (player.getMainHandItem().getItem() == itemStack.getItem() - && player.getMainHandItem().getOrCreateTag().getDouble("id") == id) { - if (tag.getDouble("reload_time") > 0) { - tag.putDouble("reload_time", (tag.getDouble("reload_time") - 1)); - } - } else { - tag.putBoolean("reloading", false); - tag.putBoolean("empty_reload", false); - tag.putDouble("reload_time", 0); - } - if (tag.getDouble("reload_time") == 1 && player.getMainHandItem().getOrCreateTag().getDouble("id") == id) { - GunsTool.reload(entity, GunInfo.Type.RIFLE, true); - } - } - } - } +// @Override +// public void inventoryTick(ItemStack itemStack, Level world, Entity entity, int slot, boolean selected) { +// super.inventoryTick(itemStack, world, entity, slot, selected); +// if (entity instanceof Player player) { +// var tag = itemStack.getOrCreateTag(); +// double id = tag.getDouble("id"); +// if (player.getMainHandItem().getOrCreateTag().getDouble("id") != tag.getDouble("id")) { +// tag.putBoolean("empty_reload", false); +// tag.putBoolean("reloading", false); +// tag.putDouble("reload_time", 0); +// } +// if (tag.getBoolean("reloading") && tag.getInt("ammo") == 0) { +// if (tag.getDouble("reload_time") == 66) { +// entity.getPersistentData().putDouble("id", id); +// if (!entity.level().isClientSide()) { +// SoundTool.playLocalSound(player, TargetModSounds.AK_47_RELOAD_EMPTY.get(), 100, 1); +// } +// } +// if (player.getMainHandItem().getItem() == itemStack.getItem() +// && player.getMainHandItem().getOrCreateTag().getDouble("id") == id) { +// if (tag.getDouble("reload_time") > 0) { +// tag.putDouble("reload_time", (tag.getDouble("reload_time") - 1)); +// } +// } else { +// tag.putBoolean("reloading", false); +// tag.putBoolean("empty_reload", false); +// tag.putDouble("reload_time", 0); +// } +// if (tag.getDouble("reload_time") == 1 && player.getMainHandItem().getOrCreateTag().getDouble("id") == id) { +// GunsTool.reload(entity, GunInfo.Type.RIFLE); +// } +// } else if (tag.getBoolean("reloading") && tag.getInt("ammo") > 0) { +// if (tag.getDouble("reload_time") == 51) { +// entity.getPersistentData().putDouble("id", id); +// if (!entity.level().isClientSide()) { +// SoundTool.playLocalSound(player, TargetModSounds.AK_47_RELOAD_NORMAL.get(), 100, 1); +// } +// } +// if (player.getMainHandItem().getItem() == itemStack.getItem() +// && player.getMainHandItem().getOrCreateTag().getDouble("id") == id) { +// if (tag.getDouble("reload_time") > 0) { +// tag.putDouble("reload_time", (tag.getDouble("reload_time") - 1)); +// } +// } else { +// tag.putBoolean("reloading", false); +// tag.putBoolean("empty_reload", false); +// tag.putDouble("reload_time", 0); +// } +// if (tag.getDouble("reload_time") == 1 && player.getMainHandItem().getOrCreateTag().getDouble("id") == id) { +// GunsTool.reload(entity, GunInfo.Type.RIFLE, true); +// } +// } +// } +// } public static ItemStack getGunInstance() { ItemStack stack = new ItemStack(TargetModItems.AK_47.get()); diff --git a/src/main/java/net/mcreator/target/item/gun/Abekiri.java b/src/main/java/net/mcreator/target/item/gun/Abekiri.java index b74086a39..1efcc7989 100644 --- a/src/main/java/net/mcreator/target/item/gun/Abekiri.java +++ b/src/main/java/net/mcreator/target/item/gun/Abekiri.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.AbekiriItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -79,7 +80,9 @@ public class Abekiri extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/BocekItem.java b/src/main/java/net/mcreator/target/item/gun/BocekItem.java index ac743af82..d84252036 100644 --- a/src/main/java/net/mcreator/target/item/gun/BocekItem.java +++ b/src/main/java/net/mcreator/target/item/gun/BocekItem.java @@ -5,6 +5,7 @@ import com.google.common.collect.Multimap; import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.BocekItemRenderer; import net.mcreator.target.init.TargetModItems; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.RarityTool; @@ -72,19 +73,20 @@ public class BocekItem extends GunItem implements GeoItem, AnimatedItem { } private PlayState idlePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - LocalPlayer player = Minecraft.getInstance().player; - ItemStack stack = player.getMainHandItem(); + LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; + ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; - if (stack.getOrCreateTag().getInt("draw_time") < 16) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.bocek.draw")); - } - - if (this.animationProcedure.equals("empty")) { - event.getController().setAnimation(RawAnimation.begin().thenLoop("animation.bocek.idle")); - return PlayState.CONTINUE; - } + if (stack.getOrCreateTag().getInt("draw_time") < 16) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.bocek.draw")); } + + if (this.animationProcedure.equals("empty")) { + event.getController().setAnimation(RawAnimation.begin().thenLoop("animation.bocek.idle")); + return PlayState.CONTINUE; + } + return PlayState.STOP; } diff --git a/src/main/java/net/mcreator/target/item/gun/Devotion.java b/src/main/java/net/mcreator/target/item/gun/Devotion.java index a91a6c2d5..9c9232452 100644 --- a/src/main/java/net/mcreator/target/item/gun/Devotion.java +++ b/src/main/java/net/mcreator/target/item/gun/Devotion.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.DevotionItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -74,7 +75,9 @@ public class Devotion extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/Hk416Item.java b/src/main/java/net/mcreator/target/item/gun/Hk416Item.java index 27fd8de76..f50962012 100644 --- a/src/main/java/net/mcreator/target/item/gun/Hk416Item.java +++ b/src/main/java/net/mcreator/target/item/gun/Hk416Item.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.Hk416ItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -74,7 +75,9 @@ public class Hk416Item extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/HuntingRifle.java b/src/main/java/net/mcreator/target/item/gun/HuntingRifle.java index 6c2cac43c..675348693 100644 --- a/src/main/java/net/mcreator/target/item/gun/HuntingRifle.java +++ b/src/main/java/net/mcreator/target/item/gun/HuntingRifle.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.HuntingRifleItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -78,7 +79,9 @@ public class HuntingRifle extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/Kraber.java b/src/main/java/net/mcreator/target/item/gun/Kraber.java index 43b16cdc8..6e1f26957 100644 --- a/src/main/java/net/mcreator/target/item/gun/Kraber.java +++ b/src/main/java/net/mcreator/target/item/gun/Kraber.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.KraberItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -86,7 +87,10 @@ public class Kraber extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; + if (this.animationProcedure.equals("empty")) { if (stack.getOrCreateTag().getInt("draw_time") < 29) { diff --git a/src/main/java/net/mcreator/target/item/gun/M4Item.java b/src/main/java/net/mcreator/target/item/gun/M4Item.java index d72177193..a3d69e912 100644 --- a/src/main/java/net/mcreator/target/item/gun/M4Item.java +++ b/src/main/java/net/mcreator/target/item/gun/M4Item.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.M4ItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -74,7 +75,9 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/M60Item.java b/src/main/java/net/mcreator/target/item/gun/M60Item.java index 7abe791e8..de9ad6754 100644 --- a/src/main/java/net/mcreator/target/item/gun/M60Item.java +++ b/src/main/java/net/mcreator/target/item/gun/M60Item.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.M60ItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -74,7 +75,9 @@ public class M60Item extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/M79Item.java b/src/main/java/net/mcreator/target/item/gun/M79Item.java index 9fe925033..8d9aaac88 100644 --- a/src/main/java/net/mcreator/target/item/gun/M79Item.java +++ b/src/main/java/net/mcreator/target/item/gun/M79Item.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.M79ItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.SoundTool; @@ -81,7 +82,9 @@ public class M79Item extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/M870Item.java b/src/main/java/net/mcreator/target/item/gun/M870Item.java index c52977b7a..e20ca0871 100644 --- a/src/main/java/net/mcreator/target/item/gun/M870Item.java +++ b/src/main/java/net/mcreator/target/item/gun/M870Item.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.M870ItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.network.TargetModVariables; import net.mcreator.target.tools.GunsTool; @@ -77,9 +78,10 @@ public class M870Item extends GunItem implements GeoItem, AnimatedItem { } private PlayState idlePredicate(AnimationState event) { - LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (transformType != null && transformType.firstPerson()) { if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/M98bItem.java b/src/main/java/net/mcreator/target/item/gun/M98bItem.java index 0f7f5e72f..d2c937928 100644 --- a/src/main/java/net/mcreator/target/item/gun/M98bItem.java +++ b/src/main/java/net/mcreator/target/item/gun/M98bItem.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.M98bItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -74,7 +75,9 @@ public class M98bItem extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/MarlinItem.java b/src/main/java/net/mcreator/target/item/gun/MarlinItem.java index f83ccb6f6..e78e6b812 100644 --- a/src/main/java/net/mcreator/target/item/gun/MarlinItem.java +++ b/src/main/java/net/mcreator/target/item/gun/MarlinItem.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.MarlinItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.network.TargetModVariables; import net.mcreator.target.tools.GunsTool; @@ -76,9 +77,10 @@ public class MarlinItem extends GunItem implements GeoItem, AnimatedItem { } private PlayState idlePredicate(AnimationState event) { - LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (transformType != null && transformType.firstPerson()) { if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/Minigun.java b/src/main/java/net/mcreator/target/item/gun/Minigun.java index 84ffdcb8a..1b16593ff 100644 --- a/src/main/java/net/mcreator/target/item/gun/Minigun.java +++ b/src/main/java/net/mcreator/target/item/gun/Minigun.java @@ -5,6 +5,7 @@ import com.google.common.collect.Multimap; import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.MinigunItemRenderer; import net.mcreator.target.init.TargetModItems; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.ItemNBTTool; @@ -109,7 +110,9 @@ public class Minigun extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/Mk14Item.java b/src/main/java/net/mcreator/target/item/gun/Mk14Item.java index 06a600f54..003dbdc2a 100644 --- a/src/main/java/net/mcreator/target/item/gun/Mk14Item.java +++ b/src/main/java/net/mcreator/target/item/gun/Mk14Item.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.Mk14ItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -74,7 +75,9 @@ public class Mk14Item extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/RpgItem.java b/src/main/java/net/mcreator/target/item/gun/RpgItem.java index 25e651e1e..8dbafbf14 100644 --- a/src/main/java/net/mcreator/target/item/gun/RpgItem.java +++ b/src/main/java/net/mcreator/target/item/gun/RpgItem.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.RpgItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.SoundTool; @@ -75,7 +76,9 @@ public class RpgItem extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { var tag = stack.getOrCreateTag(); diff --git a/src/main/java/net/mcreator/target/item/gun/RpkItem.java b/src/main/java/net/mcreator/target/item/gun/RpkItem.java index 8e14fa9c5..a07e22ab0 100644 --- a/src/main/java/net/mcreator/target/item/gun/RpkItem.java +++ b/src/main/java/net/mcreator/target/item/gun/RpkItem.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.RpkItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -74,7 +75,9 @@ public class RpkItem extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/SentinelItem.java b/src/main/java/net/mcreator/target/item/gun/SentinelItem.java index e95790a37..25d33b63f 100644 --- a/src/main/java/net/mcreator/target/item/gun/SentinelItem.java +++ b/src/main/java/net/mcreator/target/item/gun/SentinelItem.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.SentinelItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -93,7 +94,9 @@ public class SentinelItem extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/SksItem.java b/src/main/java/net/mcreator/target/item/gun/SksItem.java index abb5b7c66..63e0ad73c 100644 --- a/src/main/java/net/mcreator/target/item/gun/SksItem.java +++ b/src/main/java/net/mcreator/target/item/gun/SksItem.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.SksItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -79,7 +80,9 @@ public class SksItem extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { diff --git a/src/main/java/net/mcreator/target/item/gun/SvdItem.java b/src/main/java/net/mcreator/target/item/gun/SvdItem.java index 87c5a9774..945108d8d 100644 --- a/src/main/java/net/mcreator/target/item/gun/SvdItem.java +++ b/src/main/java/net/mcreator/target/item/gun/SvdItem.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.SvdItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -74,7 +75,9 @@ public class SvdItem extends GunItem implements GeoItem, AnimatedItem { private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { var tag = stack.getOrCreateTag(); diff --git a/src/main/java/net/mcreator/target/item/gun/Taser.java b/src/main/java/net/mcreator/target/item/gun/Taser.java index 1d5948919..60720fe51 100644 --- a/src/main/java/net/mcreator/target/item/gun/Taser.java +++ b/src/main/java/net/mcreator/target/item/gun/Taser.java @@ -7,6 +7,7 @@ import net.mcreator.target.client.renderer.item.TaserItemRenderer; import net.mcreator.target.init.TargetModEnchantments; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.client.Minecraft; @@ -97,9 +98,11 @@ public class Taser extends GunItem implements GeoItem, AnimatedItem { transformType = type; } - private PlayState idlePredicate(AnimationState event) { + private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { @@ -124,7 +127,7 @@ public class Taser extends GunItem implements GeoItem, AnimatedItem { return PlayState.STOP; } - private PlayState procedurePredicate(AnimationState event) { + 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)); diff --git a/src/main/java/net/mcreator/target/item/gun/Trachelium.java b/src/main/java/net/mcreator/target/item/gun/Trachelium.java index 34fb20b0a..854ae09c3 100644 --- a/src/main/java/net/mcreator/target/item/gun/Trachelium.java +++ b/src/main/java/net/mcreator/target/item/gun/Trachelium.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.TracheliumItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.*; import net.minecraft.ChatFormatting; @@ -82,9 +83,12 @@ public class Trachelium extends GunItem implements GeoItem, AnimatedItem { transformType = type; } - private PlayState idlePredicate(AnimationState event) { + private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; + if (this.animationProcedure.equals("empty")) { if (stack.getOrCreateTag().getInt("draw_time") < 11) { @@ -108,7 +112,7 @@ public class Trachelium extends GunItem implements GeoItem, AnimatedItem { return PlayState.STOP; } - private PlayState procedurePredicate(AnimationState event) { + 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)); diff --git a/src/main/java/net/mcreator/target/item/gun/VectorItem.java b/src/main/java/net/mcreator/target/item/gun/VectorItem.java index b3dd99ee6..c49add6ae 100644 --- a/src/main/java/net/mcreator/target/item/gun/VectorItem.java +++ b/src/main/java/net/mcreator/target/item/gun/VectorItem.java @@ -6,6 +6,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.client.renderer.item.VectorItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.tools.GunInfo; import net.mcreator.target.tools.GunsTool; @@ -78,48 +79,11 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem { transformType = type; } - 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) { - AnimationController procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); - AnimationController idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); - data.add(idleController); - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return this.cache; - } - - @Override - public void appendHoverText(ItemStack stack, Level world, List list, TooltipFlag flag) { - TooltipTool.addGunTips(list, stack); - } - - public static ItemStack getGunInstance() { - ItemStack stack = new ItemStack(TargetModItems.VECTOR.get()); - GunsTool.initCreativeGun(stack, TargetModItems.VECTOR.getId().getPath()); - return stack; - } - - private PlayState idlePredicate(AnimationState event) { + private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); + if (!stack.is(TargetModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { if (stack.getOrCreateTag().getInt("draw_time") < 11) { @@ -159,6 +123,45 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem { 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) { + AnimationController procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); + data.add(procedureController); + AnimationController idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); + data.add(idleController); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.cache; + } + + @Override + public void appendHoverText(ItemStack stack, Level world, List list, TooltipFlag flag) { + TooltipTool.addGunTips(list, stack); + } + + public static ItemStack getGunInstance() { + ItemStack stack = new ItemStack(TargetModItems.VECTOR.get()); + GunsTool.initCreativeGun(stack, TargetModItems.VECTOR.getId().getPath()); + return stack; + } + @Override public Set getReloadSound() { return Set.of(TargetModSounds.VECTOR_RELOAD_NORMAL.get(), TargetModSounds.VECTOR_RELOAD_EMPTY.get()); diff --git a/src/main/java/net/mcreator/target/network/message/ReloadMessage.java b/src/main/java/net/mcreator/target/network/message/ReloadMessage.java index 3a327b4e9..c9769b865 100644 --- a/src/main/java/net/mcreator/target/network/message/ReloadMessage.java +++ b/src/main/java/net/mcreator/target/network/message/ReloadMessage.java @@ -1,8 +1,13 @@ package net.mcreator.target.network.message; +import net.mcreator.target.init.TargetModItems; +import net.mcreator.target.init.TargetModTags; +import net.mcreator.target.network.TargetModVariables; import net.mcreator.target.procedures.PlayerReloadProcedure; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraftforge.network.NetworkEvent; @@ -39,8 +44,37 @@ public class ReloadMessage { if (!world.hasChunkAt(entity.blockPosition())) return; if (type == 0) { - PlayerReloadProcedure.execute(entity); + + ItemStack stack = entity.getMainHandItem(); + var capability = entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables()); + + if (!entity.isSpectator() + && stack.is(TargetModTags.Items.GUN) + && !capability.zooming + && !(entity.getCooldowns().isOnCooldown(stack.getItem())) + && entity.getPersistentData().getInt("gun_reloading_time") == 0 + ) { + CompoundTag tag = stack.getOrCreateTag(); + + if (stack.is(TargetModTags.Items.SHOTGUN) && capability.shotgunAmmo == 0) { + return; + } else if (stack.is(TargetModTags.Items.SNIPER_RIFLE) && capability.sniperAmmo == 0) { + return; + } else if ((stack.is(TargetModTags.Items.HANDGUN) || stack.is(TargetModTags.Items.SMG)) && capability.handgunAmmo == 0) { + return; + } else if (stack.is(TargetModTags.Items.RIFLE) && capability.rifleAmmo == 0) { + return; + } + + if (stack.is(TargetModTags.Items.OPEN_BOLT) && (tag.getDouble("normal_reload_time") != 0 || tag.getDouble("empty_reload_time") != 0)) { + if(tag.getInt("ammo") < tag.getDouble("mag") + 1) { + entity.getPersistentData().putBoolean("start_reload",true); + } + } else if (tag.getInt("ammo") < tag.getDouble("mag")){ + entity.getPersistentData().putBoolean("start_reload",true); + } + } } } } diff --git a/src/main/java/net/mcreator/target/procedures/PlayerReloadProcedure.java b/src/main/java/net/mcreator/target/procedures/PlayerReloadProcedure.java index 8f62ad9d4..bfbb08750 100644 --- a/src/main/java/net/mcreator/target/procedures/PlayerReloadProcedure.java +++ b/src/main/java/net/mcreator/target/procedures/PlayerReloadProcedure.java @@ -169,23 +169,23 @@ public class PlayerReloadProcedure { tag.putDouble("reload_time", 72); } } - if (player.getMainHandItem().getItem() == TargetModItems.AK_47.get() - && !(player.getCooldowns().isOnCooldown(player.getMainHandItem().getItem())) - && !tag.getBoolean("reloading") - && tag.getInt("ammo") < 31 - && (entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).rifleAmmo > 0) { - if (tag.getInt("ammo") > 0) { - tag.putBoolean("reloading", true); - tag.putBoolean("empty_reload", false); - tag.putDouble("id", (Mth.nextDouble(RandomSource.create(), 1, 1919810))); - tag.putDouble("reload_time", 51); - } else if (tag.getInt("ammo") == 0) { - tag.putBoolean("reloading", true); - tag.putDouble("empty_reload", 1); - tag.putDouble("id", (Mth.nextDouble(RandomSource.create(), 1, 1919810))); - tag.putDouble("reload_time", 66); - } - } +// if (player.getMainHandItem().getItem() == TargetModItems.AK_47.get() +// && !(player.getCooldowns().isOnCooldown(player.getMainHandItem().getItem())) +// && !tag.getBoolean("reloading") +// && tag.getInt("ammo") < 31 +// && (entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).rifleAmmo > 0) { +// if (tag.getInt("ammo") > 0) { +// tag.putBoolean("reloading", true); +// tag.putBoolean("empty_reload", false); +// tag.putDouble("id", (Mth.nextDouble(RandomSource.create(), 1, 1919810))); +// tag.putDouble("reload_time", 51); +// } else if (tag.getInt("ammo") == 0) { +// tag.putBoolean("reloading", true); +// tag.putDouble("empty_reload", 1); +// tag.putDouble("id", (Mth.nextDouble(RandomSource.create(), 1, 1919810))); +// tag.putDouble("reload_time", 66); +// } +// } if ((player.getMainHandItem().getItem() == TargetModItems.M_4.get() || player.getMainHandItem().getItem() == TargetModItems.HK_416.get()) && !(player.getCooldowns().isOnCooldown(player.getMainHandItem().getItem())) diff --git a/src/main/resources/data/target/guns/ak_47.json b/src/main/resources/data/target/guns/ak_47.json index c26fc2181..50d9c508a 100644 --- a/src/main/resources/data/target/guns/ak_47.json +++ b/src/main/resources/data/target/guns/ak_47.json @@ -15,5 +15,7 @@ "semi": 1, "burst": 0, "auto": 1, - "burst_size": 1 + "burst_size": 1, + "normal_reload_time": 51, + "empty_reload_time": 66 } \ No newline at end of file diff --git a/src/main/resources/data/target/tags/items/open_bolt.json b/src/main/resources/data/target/tags/items/open_bolt.json new file mode 100644 index 000000000..55bfbd5ff --- /dev/null +++ b/src/main/resources/data/target/tags/items/open_bolt.json @@ -0,0 +1,18 @@ +{ + "replace": false, + "values": [ + "target:ak_47", + "target:svd", + "target:mk_14", + "target:vector", + "target:sks", + "target:rpk", + "target:hk_416", + "target:aa_12", + "target:m_4", + "target:devotion", + "target:kraber", + "target:m_98b", + "target:sentinel" + ] +} \ No newline at end of file