新的换弹逻辑

This commit is contained in:
Atsuihsio 2024-07-06 14:20:58 +08:00
parent bfaeb94f8e
commit 1736dacb98
30 changed files with 381 additions and 135 deletions

View file

@ -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);
}
}
}
}

View file

@ -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);
}
}

View file

@ -19,6 +19,7 @@ public class TargetModTags {
public static final TagKey<Item> NORMAL_GUN = tag("normal_gun");
public static final TagKey<Item> LEGENDARY_GUN = tag("legendary_gun");
public static final TagKey<Item> SPECIAL_GUN = tag("special_gun");
public static final TagKey<Item> OPEN_BOLT = tag("open_bolt");
private static TagKey<Item> tag(String name) {
return ItemTags.create(new ResourceLocation(TargetMod.MODID, name));

View file

@ -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());

View file

@ -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")) {

View file

@ -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;
}

View file

@ -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")) {

View file

@ -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")) {

View file

@ -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")) {

View file

@ -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) {

View file

@ -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")) {

View file

@ -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")) {

View file

@ -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")) {

View file

@ -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")) {

View file

@ -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")) {

View file

@ -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")) {

View file

@ -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")) {

View file

@ -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")) {

View file

@ -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();

View file

@ -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")) {

View file

@ -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")) {

View file

@ -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")) {

View file

@ -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();

View file

@ -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<Taser> 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<Taser> 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));

View file

@ -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<Trachelium> 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<Trachelium> 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));

View file

@ -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<VectorItem> 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<VectorItem> procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate);
data.add(procedureController);
AnimationController<VectorItem> 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<Component> 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<VectorItem> 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<VectorItem> procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate);
data.add(procedureController);
AnimationController<VectorItem> 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<Component> 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<SoundEvent> getReloadSound() {
return Set.of(TargetModSounds.VECTOR_RELOAD_NORMAL.get(), TargetModSounds.VECTOR_RELOAD_EMPTY.get());

View file

@ -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);
}
}
}
}
}

View file

@ -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()))

View file

@ -15,5 +15,7 @@
"semi": 1,
"burst": 0,
"auto": 1,
"burst_size": 1
"burst_size": 1,
"normal_reload_time": 51,
"empty_reload_time": 66
}

View file

@ -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"
]
}