修改fire_mode nbt

This commit is contained in:
17146 2024-11-03 21:57:34 +08:00
parent 97e9c2a05f
commit f40472244f
35 changed files with 126 additions and 120 deletions

View file

@ -12,6 +12,7 @@ import net.mcreator.superbwarfare.init.*;
import net.mcreator.superbwarfare.item.common.ammo.CannonShellItem;
import net.mcreator.superbwarfare.network.ModVariables;
import net.mcreator.superbwarfare.network.message.*;
import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.tools.TraceTool;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
@ -100,7 +101,7 @@ public class ClickHandler {
} else {
ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(0));
ClientEventHandler.holdFire = true;
if (stack.getOrCreateTag().getInt("fire_mode") == 1) {
if (GunsTool.getGunIntTag(stack, "FireMode") == 1) {
ClientEventHandler.burstFireSize = (int) stack.getOrCreateTag().getDouble("burst_size");
}
}

View file

@ -45,10 +45,11 @@ public class Glock18ItemModel extends GeoModel<Glock18Item> {
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return;
if (stack.getOrCreateTag().getInt("fire_mode") == 0) {
int mode = GunsTool.getGunIntTag(stack, "FireMode");
if (mode == 0) {
switch_.setRotX(35 * Mth.DEG_TO_RAD);
}
if (stack.getOrCreateTag().getInt("fire_mode") == 2) {
if (mode == 2) {
switch_.setRotX(0);
}

View file

@ -5,6 +5,7 @@ import net.mcreator.superbwarfare.client.AnimationHelper;
import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.item.gun.smg.VectorItem;
import net.mcreator.superbwarfare.tools.GunsTool;
import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
@ -43,13 +44,14 @@ public class VectorItemModel extends GeoModel<VectorItem> {
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return;
if (stack.getOrCreateTag().getInt("fire_mode") == 0) {
int mode = GunsTool.getGunIntTag(stack, "FireMode");
if (mode == 0) {
kmj.setRotX(-120 * Mth.DEG_TO_RAD);
}
if (stack.getOrCreateTag().getInt("fire_mode") == 1) {
if (mode == 1) {
kmj.setRotX(-60 * Mth.DEG_TO_RAD);
}
if (stack.getOrCreateTag().getInt("fire_mode") == 2) {
if (mode == 2) {
kmj.setRotX(0);
}

View file

@ -8,6 +8,7 @@ import net.mcreator.superbwarfare.init.ModKeyMappings;
import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.network.ModVariables;
import net.mcreator.superbwarfare.tools.GunsTool;
import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
@ -168,7 +169,7 @@ public class AmmoBarOverlay {
}
private static ResourceLocation getFireMode(ItemStack stack) {
return switch (stack.getOrCreateTag().getInt("fire_mode")) {
return switch (GunsTool.getGunIntTag(stack, "FireMode")) {
case 1 -> BURST;
case 2 -> AUTO;
default -> SEMI;

View file

@ -54,6 +54,7 @@ import static net.mcreator.superbwarfare.event.PlayerEventHandler.isProne;
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
public class ClientEventHandler {
public static double zoomTime = 0;
public static double zoomPos = 0;
public static double zoomPosZ = 0;
@ -269,8 +270,7 @@ public class ClientEventHandler {
ItemStack stack = player.getMainHandItem();
if (stack.is(ModTags.Items.NORMAL_GUN)) {
if (stack.getOrCreateTag().getInt("ammo") > 0) {
int mode = stack.getOrCreateTag().getInt("fire_mode");
int mode = GunsTool.getGunIntTag(stack, "FireMode");
if (mode != 2) {
holdFire = false;
}
@ -287,7 +287,6 @@ public class ClientEventHandler {
} else if (stack.is(ModItems.MINIGUN.get())) {
var tag = stack.getOrCreateTag();
if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).rifleAmmo > 0
|| player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get()))) {
@ -325,7 +324,6 @@ public class ClientEventHandler {
randomShell[0] = (1 + 0.2 * (Math.random() - 0.5));
randomShell[1] = (0.2 + (Math.random() - 0.5));
randomShell[2] = (0.7 + (Math.random() - 0.5));
}
public static void playGunClientSounds(Player player) {
@ -739,7 +737,6 @@ public class ClientEventHandler {
double sinRes = 0;
// 竖直后座
if (0 < recoilTime && recoilTime < 0.5) {
float newPitch = (float) (player.getXRot() - 0.02f * gunRecoilX * times * recoil * (1 - 0.06 * cusWeight) * gripRecoilY);
player.setXRot(newPitch);
@ -769,7 +766,7 @@ public class ClientEventHandler {
float times = (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8);
boolean breath = (entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).breath;
breathTime = Mth.lerp(0.08f * times, breathTime, breath? 1 : 0);
breathTime = Mth.lerp(0.08f * times, breathTime, breath ? 1 : 0);
}
private static void handleShockCamera(ViewportEvent.ComputeCameraAngles event, LivingEntity entity) {
@ -934,14 +931,11 @@ public class ClientEventHandler {
float times = Minecraft.getInstance().getDeltaFrameTime();
ItemStack stack = entity.getMainHandItem();
double weight = stack.getOrCreateTag().getDouble("weight") + stack.getOrCreateTag().getDouble("CustomWeight");
double speed = 3.2 - (0.13 * weight);
drawTime = Math.max(drawTime - Math.max(0.2 * speed * times * drawTime, 0.0008), 0);
}
public static void handleShells(float x, float y, CoreGeoBone... shells) {
for (int i = 0; i < shells.length; i++) {
if (i >= 5) break;

View file

@ -17,6 +17,7 @@ import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
public class FireModeMessage {
private final int type;
public FireModeMessage(int type) {
@ -47,80 +48,85 @@ public class FireModeMessage {
}
}
private static void setFireMode(Player player, CompoundTag tag) {
public static void changeFireMode(Player player) {
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return;
CompoundTag data = stack.getOrCreateTag().getCompound("GunData");
int fireMode = data.getInt("FireMode");
CompoundTag tag = stack.getOrCreateTag();
if (fireMode == 0) {
if (tag.getBoolean("burst")) {
GunsTool.setGunIntTag(stack, "FireMode", 1);
playChangeModeSound(player);
return;
}
if (tag.getBoolean("auto")) {
GunsTool.setGunIntTag(stack, "FireMode", 2);
playChangeModeSound(player);
return;
}
}
if (fireMode == 1) {
if (tag.getBoolean("auto")) {
GunsTool.setGunIntTag(stack, "FireMode", 2);
playChangeModeSound(player);
return;
}
if (tag.getBoolean("semi")) {
GunsTool.setGunIntTag(stack, "FireMode", 0);
playChangeModeSound(player);
return;
}
}
if (fireMode == 2) {
if (tag.getBoolean("semi")) {
GunsTool.setGunIntTag(stack, "FireMode", 0);
playChangeModeSound(player);
return;
}
if (tag.getBoolean("burst")) {
GunsTool.setGunIntTag(stack, "FireMode", 1);
playChangeModeSound(player);
return;
}
}
if (stack.getItem() == ModItems.SENTINEL.get()
&& !player.isSpectator()
&& !(player.getCooldowns().isOnCooldown(stack.getItem()))
&& GunsTool.getGunIntTag(stack, "ReloadTime") == 0
&& !stack.getOrCreateTag().getBoolean("sentinel_is_charging")) {
int count = 0;
for (var inv : player.getInventory().items) {
if (inv.is(ModItems.SHIELD_CELL.get())) {
count++;
}
}
if (count > 0) {
tag.putBoolean("start_sentinel_charge", true);
}
}
if (stack.getItem() == ModItems.JAVELIN.get()) {
tag.putBoolean("TopMode", !tag.getBoolean("TopMode"));
if (player instanceof ServerPlayer serverPlayer) {
serverPlayer.connection.send(new ClientboundSoundPacket(new Holder.Direct<>(ModSounds.CANNON_ZOOM_OUT.get()),
SoundSource.PLAYERS, serverPlayer.getX(), serverPlayer.getY(), serverPlayer.getZ(), 1f, 1f, serverPlayer.level().random.nextLong()));
}
}
}
private static void playChangeModeSound(Player player) {
if (player instanceof ServerPlayer serverPlayer) {
serverPlayer.connection.send(new ClientboundSoundPacket(new Holder.Direct<>(ModSounds.FIRE_RATE.get()),
SoundSource.PLAYERS, serverPlayer.getX(), serverPlayer.getY(), serverPlayer.getZ(), 1f, 1f, serverPlayer.level().random.nextLong()));
}
}
public static void changeFireMode(Player player) {
ItemStack mainHandItem = player.getMainHandItem();
CompoundTag tag = mainHandItem.getOrCreateTag();
int fireMode = tag.getInt("fire_mode");
if (mainHandItem.is(ModTags.Items.GUN)) {
if (fireMode == 0) {
if (tag.getDouble("burst") == 1) {
tag.putInt("fire_mode", 1);
setFireMode(player, tag);
return;
}
if (tag.getDouble("auto") == 1) {
tag.putInt("fire_mode", 2);
setFireMode(player, tag);
return;
}
}
if (fireMode == 1) {
if (tag.getDouble("auto") == 1) {
tag.putInt("fire_mode", 2);
setFireMode(player, tag);
return;
}
if (tag.getDouble("semi") == 1) {
tag.putInt("fire_mode", 0);
setFireMode(player, tag);
return;
}
}
if (fireMode == 2) {
if (tag.getDouble("semi") == 1) {
tag.putInt("fire_mode", 0);
setFireMode(player, tag);
return;
}
if (tag.getDouble("burst") == 1) {
tag.putInt("fire_mode", 1);
setFireMode(player, tag);
}
}
if (mainHandItem.getItem() == ModItems.SENTINEL.get()
&& !player.isSpectator()
&& !(player.getCooldowns().isOnCooldown(mainHandItem.getItem()))
&& GunsTool.getGunIntTag(mainHandItem, "ReloadTime") == 0
&& !mainHandItem.getOrCreateTag().getBoolean("sentinel_is_charging")) {
int count = 0;
for (var inv : player.getInventory().items) {
if (inv.is(ModItems.SHIELD_CELL.get())) {
count++;
}
}
if (count > 0) {
tag.putBoolean("start_sentinel_charge", true);
}
}
if (mainHandItem.getItem() == ModItems.JAVELIN.get()) {
tag.putBoolean("TopMode", !tag.getBoolean("TopMode"));
if (player instanceof ServerPlayer serverPlayer) {
serverPlayer.connection.send(new ClientboundSoundPacket(new Holder.Direct<>(ModSounds.CANNON_ZOOM_OUT.get()),
SoundSource.PLAYERS, serverPlayer.getX(), serverPlayer.getY(), serverPlayer.getZ(), 1f, 1f, serverPlayer.level().random.nextLong()));
}
}
}
}
}

View file

@ -8,6 +8,7 @@ import net.mcreator.superbwarfare.network.ModVariables;
import net.mcreator.superbwarfare.perk.AmmoPerk;
import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.tools.ParticleTool;
import net.mcreator.superbwarfare.tools.SoundTool;
import net.minecraft.core.particles.ParticleTypes;
@ -28,6 +29,7 @@ import static net.mcreator.superbwarfare.event.GunEventHandler.gunShoot;
import static net.mcreator.superbwarfare.event.GunEventHandler.playGunSounds;
public class ShootMessage {
private final double spread;
public ShootMessage(double spread) {
@ -62,15 +64,14 @@ public class ShootMessage {
ItemStack stack = player.getMainHandItem();
if (stack.is(ModTags.Items.NORMAL_GUN)) {
double rpm = stack.getOrCreateTag().getDouble("rpm") + stack.getOrCreateTag().getInt("customRpm");;
double rpm = stack.getOrCreateTag().getDouble("rpm") + stack.getOrCreateTag().getInt("customRpm");
int coolDownTick = (int) Math.ceil(20 / (rpm / 60));
int mode = stack.getOrCreateTag().getInt("fire_mode");
int mode = GunsTool.getGunIntTag(stack, "FireMode");
int projectileAmount = (int) stack.getOrCreateTag().getDouble("projectile_amount");
if (stack.getOrCreateTag().getInt("ammo") > 0) {
int singleInterval = 0;
int burstCooldown = 0;
@ -165,7 +166,7 @@ public class ShootMessage {
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
float pitch = tag.getDouble("heat") <= 40 ? 1 : (float) (1 - 0.025 * Math.abs(40 - tag.getDouble("heat")));
if (!player.level().isClientSide() && player instanceof ServerPlayer serverPlayer) {
if (!player.level().isClientSide() && player instanceof ServerPlayer) {
player.playSound(ModSounds.MINIGUN_FIRE_3P.get(), (float) stack.getOrCreateTag().getDouble("SoundRadius") * 0.2f, pitch);
player.playSound(ModSounds.MINIGUN_FAR.get(), (float) stack.getOrCreateTag().getDouble("SoundRadius") * 0.5f, pitch);
player.playSound(ModSounds.MINIGUN_VERYFAR.get(), (float) stack.getOrCreateTag().getDouble("SoundRadius"), pitch);

View file

@ -54,7 +54,7 @@ public class GunsTool {
public static void initGun(Level level, ItemStack stack, String location) {
if (level.getServer() == null) return;
gunsData.get(location).forEach((k, v) -> {
if (k.equals("EmptyReloadTime")) {
if (k.equals("EmptyReloadTime") || k.equals("FireMode")) {
CompoundTag data = stack.getOrCreateTag().getCompound("GunData");
data.putDouble(k, v);
stack.addTagElement("GunData", data);
@ -67,7 +67,7 @@ public class GunsTool {
public static void initCreativeGun(ItemStack stack, String location) {
if (gunsData != null && gunsData.get(location) != null) {
gunsData.get(location).forEach((k, v) -> {
if (k.equals("EmptyReloadTime")) {
if (k.equals("EmptyReloadTime") || k.equals("FireMode")) {
CompoundTag data = stack.getOrCreateTag().getCompound("GunData");
data.putDouble(k, v);
stack.addTagElement("GunData", data);

View file

@ -8,7 +8,7 @@
"mag": 25,
"projectile_amount": 12,
"weight": 7,
"fire_mode": 2,
"FireMode": 2,
"semi": 1,
"burst": 0,
"auto": 1,

View file

@ -8,7 +8,7 @@
"mag": 2,
"projectile_amount": 12,
"weight": 1,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 0,

View file

@ -10,7 +10,7 @@
"mag": 30,
"projectile_amount": 1,
"weight": 4,
"fire_mode": 2,
"FireMode": 2,
"semi": 1,
"burst": 0,
"auto": 1,

View file

@ -10,7 +10,7 @@
"mag": 30,
"projectile_amount": 1,
"weight": 5,
"fire_mode": 2,
"FireMode": 2,
"semi": 1,
"burst": 0,
"auto": 1,

View file

@ -9,7 +9,7 @@
"mag": 55,
"projectile_amount": 1,
"weight": 6,
"fire_mode": 2,
"FireMode": 2,
"semi": 0,
"burst": 0,
"auto": 1,

View file

@ -8,7 +8,7 @@
"mag": 17,
"projectile_amount": 1,
"weight": 1,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 0,

View file

@ -8,7 +8,7 @@
"mag": 17,
"projectile_amount": 1,
"weight": 1,
"fire_mode": 2,
"FireMode": 2,
"semi": 1,
"burst": 0,
"auto": 1,

View file

@ -10,7 +10,7 @@
"mag": 30,
"projectile_amount": 1,
"weight": 4,
"fire_mode": 2,
"FireMode": 2,
"semi": 1,
"burst": 0,
"auto": 1,

View file

@ -8,7 +8,7 @@
"mag": 1,
"projectile_amount": 1,
"weight": 5,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 0,

View file

@ -9,7 +9,7 @@
"mag": 5,
"bolt_action_time": 22,
"weight": 5,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 0,

View file

@ -8,7 +8,7 @@
"mag": 7,
"projectile_amount": 1,
"weight": 2,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 0,

View file

@ -10,7 +10,7 @@
"mag": 30,
"projectile_amount": 1,
"weight": 4,
"fire_mode": 2,
"FireMode": 2,
"semi": 1,
"burst": 0,
"auto": 1,

View file

@ -8,7 +8,7 @@
"mag": 100,
"projectile_amount": 1,
"weight": 8,
"fire_mode": 2,
"FireMode": 2,
"semi": 0,
"burst": 0,
"auto": 1,

View file

@ -9,7 +9,7 @@
"force_stop_reloading": 1,
"projectile_amount": 12,
"weight": 4,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 0,

View file

@ -12,7 +12,7 @@
"mag": 5,
"bolt_action_time": 18,
"weight": 7,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 0,

View file

@ -9,7 +9,7 @@
"force_stop_reloading": 1,
"projectile_amount": 1,
"weight": 3,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 0,

View file

@ -6,7 +6,7 @@
"headshot": 2,
"velocity": 24,
"weight": 10,
"fire_mode": 2,
"FireMode": 2,
"projectile_amount": 1,
"BypassesArmor": 0.3,
"SoundRadius": 14,

View file

@ -9,7 +9,7 @@
"mag": 20,
"projectile_amount": 1,
"weight": 5,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 1,

View file

@ -10,7 +10,7 @@
"mag": 5,
"bolt_action_time": 22,
"weight": 5,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 0,

View file

@ -10,7 +10,7 @@
"mag": 3,
"bolt_action_time": 37,
"weight": 10,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 0,

View file

@ -8,7 +8,7 @@
"mag": 30,
"projectile_amount": 1,
"weight": 4,
"fire_mode": 2,
"FireMode": 2,
"semi": 1,
"burst": 0,
"auto": 1,

View file

@ -8,7 +8,7 @@
"mag": 75,
"projectile_amount": 1,
"weight": 6,
"fire_mode": 2,
"FireMode": 2,
"semi": 1,
"burst": 0,
"auto": 1,

View file

@ -10,7 +10,7 @@
"velocity": 39,
"bolt_action_time": 22,
"weight": 7,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 0,

View file

@ -8,7 +8,7 @@
"mag": 20,
"projectile_amount": 1,
"weight": 4,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 0,

View file

@ -9,7 +9,7 @@
"mag": 10,
"projectile_amount": 1,
"weight": 5,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 0,

View file

@ -8,7 +8,7 @@
"mag": 6,
"projectile_amount": 1,
"weight": 2,
"fire_mode": 0,
"FireMode": 0,
"semi": 1,
"burst": 0,
"auto": 0,

View file

@ -8,7 +8,7 @@
"mag": 33,
"projectile_amount": 1,
"weight": 3,
"fire_mode": 2,
"FireMode": 2,
"semi": 1,
"burst": 1,
"auto": 1,