内联部分procedure

This commit is contained in:
17146 2024-07-07 01:46:15 +08:00
parent 0ba2ee83b3
commit e1d43284de
6 changed files with 99 additions and 235 deletions

View file

@ -72,7 +72,7 @@ public class BocekItem extends GunItem implements GeoItem, AnimatedItem {
transformType = type;
}
private PlayState idlePredicate(AnimationState event) {
private PlayState idlePredicate(AnimationState<BocekItem> event) {
LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP;
ItemStack stack = player.getMainHandItem();
@ -90,7 +90,7 @@ public class BocekItem extends GunItem implements GeoItem, AnimatedItem {
return PlayState.STOP;
}
private PlayState procedurePredicate(AnimationState event) {
private PlayState procedurePredicate(AnimationState<BocekItem> 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));
@ -130,7 +130,7 @@ public class BocekItem extends GunItem implements GeoItem, AnimatedItem {
if (slot == EquipmentSlot.MAINHAND) {
map = HashMultimap.create(map);
map.put(Attributes.MOVEMENT_SPEED,
new AttributeModifier(uuid, "henghengaaa", -0.03f, AttributeModifier.Operation.MULTIPLY_BASE));
new AttributeModifier(uuid, TargetMod.ATTRIBUTE_MODIFIER, -0.03f, AttributeModifier.Operation.MULTIPLY_BASE));
}
return map;
}
@ -163,7 +163,6 @@ public class BocekItem extends GunItem implements GeoItem, AnimatedItem {
itemstack.getOrCreateTag().putInt("max_ammo", getAmmoCount(player));
}
// TODO 合并至GunReload
CompoundTag tag = itemstack.getOrCreateTag();
if (tag.getInt("arrow_empty") > 0) {
tag.putInt("arrow_empty", tag.getInt("arrow_empty") - 1);

View file

@ -8,23 +8,16 @@ 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;
import net.mcreator.target.tools.TooltipTool;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
import net.minecraft.core.Holder;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ClientboundSoundPacket;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.attributes.Attribute;
@ -33,7 +26,6 @@ import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.item.*;
import net.minecraft.world.level.Level;
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import net.minecraftforge.registries.ForgeRegistries;
import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager;
@ -79,7 +71,7 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem {
transformType = type;
}
private PlayState idlePredicate(AnimationState event) {
private PlayState idlePredicate(AnimationState<VectorItem> event) {
LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP;
ItemStack stack = player.getMainHandItem();
@ -123,7 +115,7 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem {
return PlayState.STOP;
}
private PlayState procedurePredicate(AnimationState event) {
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));
@ -194,63 +186,6 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem {
this.animationProcedure = procedure;
}
@Override
public void inventoryTick(ItemStack itemStack, Level world, Entity entity, int slot, boolean selected) {
super.inventoryTick(itemStack, world, entity, slot, selected);
CompoundTag tag = itemStack.getOrCreateTag();
double id = tag.getDouble("id");
var mainHandItem = entity instanceof LivingEntity living ? living.getMainHandItem() : ItemStack.EMPTY;
if (mainHandItem.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") == 61) {
entity.getPersistentData().putDouble("id", id);
if (entity instanceof ServerPlayer serverPlayer) {
serverPlayer.connection.send(new ClientboundSoundPacket(new Holder.Direct<>(ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("target:vector_reload_empty"))),
SoundSource.PLAYERS, serverPlayer.getX(), serverPlayer.getY(), serverPlayer.getZ(), 10f, 1f, serverPlayer.level().random.nextLong()));
}
// entity.level().playSound(null, entity.blockPosition(), TargetModSounds.VECTOR_RELOAD_EMPTY.get(), SoundSource.PLAYERS, 100, 1);
}
if (mainHandItem.getItem() == itemStack.getItem()
&& mainHandItem.getOrCreateTag().getDouble("id") == id
&& 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 && mainHandItem.getOrCreateTag().getDouble("id") == id) {
GunsTool.reload(entity, GunInfo.Type.HANDGUN);
}
} else if (tag.getBoolean("reloading") && tag.getInt("ammo") > 0) {
if (tag.getDouble("reload_time") == 43) {
entity.getPersistentData().putDouble("id", id);
if (entity instanceof ServerPlayer serverPlayer) {
serverPlayer.connection.send(new ClientboundSoundPacket(new Holder.Direct<>(ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("target:vector_reload_normal"))),
SoundSource.PLAYERS, serverPlayer.getX(), serverPlayer.getY(), serverPlayer.getZ(), 10f, 1f, serverPlayer.level().random.nextLong()));
}
// entity.level().playSound(null, entity.blockPosition(), TargetModSounds.VECTOR_RELOAD_NORMAL.get(), SoundSource.PLAYERS, 100, 1);
}
if (mainHandItem.getItem() == itemStack.getItem()
&& mainHandItem.getOrCreateTag().getDouble("id") == id
&& 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 && mainHandItem.getOrCreateTag().getDouble("id") == id) {
GunsTool.reload(entity, GunInfo.Type.HANDGUN, true);
}
}
}
@Override
public ResourceLocation getGunIcon() {
return new ResourceLocation(TargetMod.MODID, "textures/gun_icon/vector_icon.png");

View file

@ -2,11 +2,15 @@ package net.mcreator.target.network.message;
import net.mcreator.target.entity.BocekArrowEntity;
import net.mcreator.target.entity.ProjectileEntity;
import net.mcreator.target.event.GunEventHandler;
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.network.TargetModVariables;
import net.mcreator.target.procedures.PressFireProcedure;
import net.mcreator.target.procedures.M79fireProcedure;
import net.mcreator.target.procedures.RpgFireProcedure;
import net.mcreator.target.procedures.TaserfireProcedure;
import net.mcreator.target.tools.SoundTool;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf;
@ -55,7 +59,7 @@ public class FireMessage {
}
if (type == 0) {
PressFireProcedure.execute(player);
handleSpecialShoot(player);
} else if (type == 1) {
player.getPersistentData().putBoolean("firing", false);
player.getPersistentData().putDouble("minigun_firing", 0);
@ -68,6 +72,58 @@ public class FireMessage {
}
}
private static void handleSpecialShoot(Player player) {
var mainHandItem = player.getMainHandItem();
var tag = mainHandItem.getOrCreateTag();
TaserfireProcedure.execute(player);
M79fireProcedure.execute(player);
RpgFireProcedure.execute(player);
if (mainHandItem.is(TargetModTags.Items.GUN)) {
if (tag.getInt("fire_mode") == 1) {
player.getPersistentData().putBoolean("firing", false);
tag.putInt("burst_fire", (int) tag.getDouble("burst_size"));
} else {
player.getPersistentData().putBoolean("firing", true);
}
if (tag.getDouble("force_stop_reloading") == 1 && tag.getBoolean("reloading") && tag.getDouble("prepare") == 0 && tag.getInt("ammo") > 0) {
tag.putDouble("force_stop", 1);
}
}
if (mainHandItem.is(TargetModTags.Items.GUN)
&& !(mainHandItem.getItem() == TargetModItems.BOCEK.get())
&& !(mainHandItem.getItem() == TargetModItems.MINIGUN.get())
&& tag.getInt("ammo") == 0
&& !tag.getBoolean("reloading")) {
if (!player.level().isClientSide()) {
SoundTool.playLocalSound(player, TargetModSounds.TRIGGER_CLICK.get(), 10, 1);
}
}
if (mainHandItem.getItem() == TargetModItems.MINIGUN.get()) {
if ((player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).rifleAmmo == 0) {
if (!player.level().isClientSide()) {
SoundTool.playLocalSound(player, TargetModSounds.TRIGGER_CLICK.get(), 10, 1);
}
}
}
player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
capability.bowPullHold = true;
capability.syncPlayerVariables(player);
});
// 栓动武器左键手动拉栓
if (mainHandItem.is(TargetModTags.Items.GUN) && tag.getInt("bolt_action_time") > 0 && tag.getInt("ammo") > 0 && tag.getInt("bolt_action_anim") == 0) {
if (!player.getCooldowns().isOnCooldown(mainHandItem.getItem()) && mainHandItem.getOrCreateTag().getDouble("need_bolt_action") == 1) {
mainHandItem.getOrCreateTag().putInt("bolt_action_anim", mainHandItem.getOrCreateTag().getInt("bolt_action_time"));
GunEventHandler.playGunBoltSounds(player);
}
}
}
private static void handleBowShoot(Player player) {
ItemStack stack = player.getMainHandItem();

View file

@ -24,43 +24,45 @@ public class M79fireProcedure {
if (entity == null) return;
if (entity instanceof Player player && !player.isSpectator()) {
ItemStack stack = player.getMainHandItem();
if (stack.getItem() == TargetModItems.M_79.get() && !stack.getOrCreateTag().getBoolean("reloading") && !(entity instanceof Player _plrCldCheck4 && _plrCldCheck4.getCooldowns().isOnCooldown(stack.getItem()))
&& stack.getOrCreateTag().getInt("ammo") > 0) {
entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
capability.recoilHorizon = Math.random() < 0.5 ? -1 : 1;
capability.recoil = 0.1;
capability.firing = 1;
capability.syncPlayerVariables(entity);
});
if (stack.getItem() == TargetModItems.M_79.get() && !stack.getOrCreateTag().getBoolean("reloading")) {
Player _plrCldCheck4 = (Player) entity;
if (!_plrCldCheck4.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getInt("ammo") > 0) {
entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
capability.recoilHorizon = Math.random() < 0.5 ? -1 : 1;
capability.recoil = 0.1;
capability.firing = 1;
capability.syncPlayerVariables(entity);
});
Level level = entity.level();
if (!level.isClientSide()) {
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.MONSTER_HUNTER.get(), stack);
GunGrenadeEntity gunGrenadeEntity = new GunGrenadeEntity(player, level, (float) stack.getOrCreateTag().getDouble("damage") * (float) stack.getOrCreateTag().getDouble("damageadd"), monsterMultiple);
Level level = entity.level();
if (!level.isClientSide()) {
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.MONSTER_HUNTER.get(), stack);
GunGrenadeEntity gunGrenadeEntity = new GunGrenadeEntity(player, level, (float) stack.getOrCreateTag().getDouble("damage") * (float) stack.getOrCreateTag().getDouble("damageadd"), monsterMultiple);
gunGrenadeEntity.setPos(entity.getX(), entity.getEyeY() - 0.1, entity.getZ());
gunGrenadeEntity.shoot(entity.getLookAngle().x, entity.getLookAngle().y, entity.getLookAngle().z, (float) stack.getOrCreateTag().getDouble("velocity"),
(float) ((LivingEntity) entity).getAttribute(TargetModAttributes.SPREAD.get()).getBaseValue());
level.addFreshEntity(gunGrenadeEntity);
gunGrenadeEntity.setPos(entity.getX(), entity.getEyeY() - 0.1, entity.getZ());
gunGrenadeEntity.shoot(entity.getLookAngle().x, entity.getLookAngle().y, entity.getLookAngle().z, (float) stack.getOrCreateTag().getDouble("velocity"),
(float) ((LivingEntity) entity).getAttribute(TargetModAttributes.SPREAD.get()).getBaseValue());
level.addFreshEntity(gunGrenadeEntity);
}
if (!entity.level().isClientSide() && entity.getServer() != null) {
entity.getServer().getCommands().performPrefixedCommand(
new CommandSourceStack(CommandSource.NULL, entity.position(), entity.getRotationVector(), (ServerLevel) entity.level(), 4, entity.getName().getString(), entity.getDisplayName(),
entity.getServer(), entity),
("particle minecraft:cloud" + (" " + (entity.getX() + 1.8 * entity.getLookAngle().x)) + (" " + (entity.getY() + entity.getBbHeight() - 0.1 + 1.8 * entity.getLookAngle().y))
+ (" " + (entity.getZ() + 1.8 * entity.getLookAngle().z)) + " 0.1 0.1 0.1 0.002 4 force @s"));
}
player.getCooldowns().addCooldown(stack.getItem(), 2);
if (entity instanceof ServerPlayer) {
SoundTool.playLocalSound(player, TargetModSounds.M_79_FIRE_1P.get(), 2, 1);
SoundTool.playLocalSound(player, TargetModSounds.M_79_FIRE_3P.get(), 4, 1);
SoundTool.playLocalSound(player, TargetModSounds.M_79_FAR.get(), 6, 1);
SoundTool.playLocalSound(player, TargetModSounds.M_79_VERYFAR.get(), 12, 1);
}
stack.getOrCreateTag().putInt("fire_animation", 2);
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
}
if (!entity.level().isClientSide() && entity.getServer() != null) {
entity.getServer().getCommands().performPrefixedCommand(
new CommandSourceStack(CommandSource.NULL, entity.position(), entity.getRotationVector(), (ServerLevel) entity.level(), 4, entity.getName().getString(), entity.getDisplayName(),
entity.getServer(), entity),
("particle minecraft:cloud" + (" " + (entity.getX() + 1.8 * entity.getLookAngle().x)) + (" " + (entity.getY() + entity.getBbHeight() - 0.1 + 1.8 * entity.getLookAngle().y))
+ (" " + (entity.getZ() + 1.8 * entity.getLookAngle().z)) + " 0.1 0.1 0.1 0.002 4 force @s"));
}
player.getCooldowns().addCooldown(stack.getItem(), 2);
if (entity instanceof ServerPlayer) {
SoundTool.playLocalSound(player, TargetModSounds.M_79_FIRE_1P.get(), 2, 1);
SoundTool.playLocalSound(player, TargetModSounds.M_79_FIRE_3P.get(), 4, 1);
SoundTool.playLocalSound(player, TargetModSounds.M_79_FAR.get(), 6, 1);
SoundTool.playLocalSound(player, TargetModSounds.M_79_VERYFAR.get(), 12, 1);
}
stack.getOrCreateTag().putInt("fire_animation", 2);
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
}
}
}

View file

@ -1,60 +0,0 @@
package net.mcreator.target.procedures;
import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModSounds;
import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.tools.SoundTool;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
public class PlayerReloadProcedure {
public static void execute(Entity entity) {
if (entity == null) return;
if (entity instanceof Player player && !player.isSpectator()) {
if (!(entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).zooming) {
CompoundTag tag = player.getMainHandItem().getOrCreateTag();
if (player.getMainHandItem().getItem() == TargetModItems.MARLIN.get()
&& !(player.getCooldowns().isOnCooldown(player.getMainHandItem().getItem()))
&& !tag.getBoolean("reloading")
&& tag.getInt("ammo") < 8
&& (entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).rifleAmmo > 0) {
tag.putBoolean("reloading", true);
tag.putDouble("id", (Mth.nextDouble(RandomSource.create(), 1, 1919810)));
player.getCooldowns().addCooldown(player.getMainHandItem().getItem(), 5);
tag.putDouble("prepare", 5);
if (entity instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, TargetModSounds.MARLIN_START.get(), 100, 1);
}
}
if (player.getMainHandItem().getItem() == TargetModItems.M_870.get()
&& !(player.getCooldowns().isOnCooldown(player.getMainHandItem().getItem()))
&& !tag.getBoolean("reloading")
&& tag.getInt("ammo") < 8
&& (entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).shotgunAmmo > 0) {
if (tag.getInt("ammo") == 0) {
tag.putDouble("empty_reload", 1);
tag.putBoolean("reloading", true);
tag.putDouble("id", (Mth.nextDouble(RandomSource.create(), 1, 1919810)));
player.getCooldowns().addCooldown(player.getMainHandItem().getItem(), 36);
tag.putDouble("prepare", 36);
if (entity instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, TargetModSounds.M_870_PREPARE_ALT.get(), 100, 1);
}
} else {
tag.putBoolean("reloading", true);
tag.putDouble("id", (Mth.nextDouble(RandomSource.create(), 1, 1919810)));
if (entity instanceof Player _player)
_player.getCooldowns().addCooldown(player.getMainHandItem().getItem(), 7);
tag.putDouble("prepare", 7);
}
}
}
}
}
}

View file

@ -1,68 +0,0 @@
package net.mcreator.target.procedures;
import net.mcreator.target.event.GunEventHandler;
import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModSounds;
import net.mcreator.target.init.TargetModTags;
import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.tools.SoundTool;
import net.minecraft.world.entity.player.Player;
public class PressFireProcedure {
public static void execute(Player player) {
var mainHandItem = player.getMainHandItem();
var tag = mainHandItem.getOrCreateTag();
TaserfireProcedure.execute(player);
M79fireProcedure.execute(player);
RpgFireProcedure.execute(player);
if (mainHandItem.is(TargetModTags.Items.GUN)) {
if (tag.getInt("fire_mode") == 1) {
player.getPersistentData().putBoolean("firing", false);
tag.putInt("burst_fire", (int) tag.getDouble("burst_size"));
} else {
player.getPersistentData().putBoolean("firing", true);
}
if (tag.getDouble("force_stop_reloading") == 1 && tag.getBoolean("reloading") && tag.getDouble("prepare") == 0 && tag.getInt("ammo") > 0) {
tag.putDouble("force_stop", 1);
}
}
if (mainHandItem.is(TargetModTags.Items.GUN)
&& !(mainHandItem.getItem() == TargetModItems.BOCEK.get())
&& !(mainHandItem.getItem() == TargetModItems.MINIGUN.get())
&& tag.getInt("ammo") == 0
&& !tag.getBoolean("reloading")) {
if (!player.level().isClientSide()) {
SoundTool.playLocalSound(player, TargetModSounds.TRIGGER_CLICK.get(), 10, 1);
}
}
if (mainHandItem.getItem() == TargetModItems.MINIGUN.get()) {
if ((player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).rifleAmmo == 0) {
if (!player.level().isClientSide()) {
SoundTool.playLocalSound(player, TargetModSounds.TRIGGER_CLICK.get(), 10, 1);
}
}
}
player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
capability.bowPullHold = true;
capability.syncPlayerVariables(player);
});
// if (tag.getInt("ammo") == 0) {
// PlayerReloadProcedure.execute(player);
// }
// 栓动武器左键手动拉栓
if (mainHandItem.is(TargetModTags.Items.GUN) && tag.getInt("bolt_action_time") > 0 && tag.getInt("ammo") > 0 && tag.getInt("bolt_action_anim") == 0) {
if (!player.getCooldowns().isOnCooldown(mainHandItem.getItem()) && mainHandItem.getOrCreateTag().getDouble("need_bolt_action") == 1) {
mainHandItem.getOrCreateTag().putInt("bolt_action_anim", mainHandItem.getOrCreateTag().getInt("bolt_action_time"));
GunEventHandler.playGunBoltSounds(player);
}
}
}
}