重写FireMode
This commit is contained in:
parent
32f649b8d7
commit
027d3c680b
27 changed files with 158 additions and 96 deletions
|
@ -12,6 +12,7 @@ import com.atsuishio.superbwarfare.entity.vehicle.base.WeaponVehicleEntity;
|
||||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||||
import com.atsuishio.superbwarfare.init.*;
|
import com.atsuishio.superbwarfare.init.*;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.data.FireMode;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
import com.atsuishio.superbwarfare.network.message.send.*;
|
import com.atsuishio.superbwarfare.network.message.send.*;
|
||||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||||
|
@ -365,7 +366,7 @@ public class ClickHandler {
|
||||||
&& !data.bolt.needed.get())
|
&& !data.bolt.needed.get())
|
||||||
&& drawTime < 0.01
|
&& drawTime < 0.01
|
||||||
) {
|
) {
|
||||||
if (data.fireMode.get() == 1) {
|
if (data.fireMode.get() == FireMode.BURST) {
|
||||||
if (ClientEventHandler.burstFireAmount == 0) {
|
if (ClientEventHandler.burstFireAmount == 0) {
|
||||||
ClientEventHandler.burstFireAmount = data.burstAmount();
|
ClientEventHandler.burstFireAmount = data.burstAmount();
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.atsuishio.superbwarfare.client.AnimationHelper;
|
||||||
import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay;
|
import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay;
|
||||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.data.FireMode;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
import com.atsuishio.superbwarfare.item.gun.handgun.Glock18Item;
|
import com.atsuishio.superbwarfare.item.gun.handgun.Glock18Item;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
@ -49,11 +50,11 @@ public class Glock18ItemModel extends GeoModel<Glock18Item> {
|
||||||
if (!(stack.getItem() instanceof GunItem)) return;
|
if (!(stack.getItem() instanceof GunItem)) return;
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
int mode = data.fireMode.get();
|
var mode = data.fireMode.get();
|
||||||
if (mode == 0) {
|
if (mode == FireMode.SEMI) {
|
||||||
switch_.setRotX(35 * Mth.DEG_TO_RAD);
|
switch_.setRotX(35 * Mth.DEG_TO_RAD);
|
||||||
}
|
}
|
||||||
if (mode == 2) {
|
if (mode == FireMode.AUTO) {
|
||||||
switch_.setRotX(0);
|
switch_.setRotX(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.atsuishio.superbwarfare.client.AnimationHelper;
|
||||||
import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay;
|
import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay;
|
||||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.data.FireMode;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.value.AttachmentType;
|
import com.atsuishio.superbwarfare.item.gun.data.value.AttachmentType;
|
||||||
import com.atsuishio.superbwarfare.item.gun.rifle.Hk416Item;
|
import com.atsuishio.superbwarfare.item.gun.rifle.Hk416Item;
|
||||||
|
@ -134,9 +135,9 @@ public class Hk416ItemModel extends GeoModel<Hk416Item> {
|
||||||
l.setRotX(rotXBipod * Mth.DEG_TO_RAD);
|
l.setRotX(rotXBipod * Mth.DEG_TO_RAD);
|
||||||
r.setRotX(rotXBipod * Mth.DEG_TO_RAD);
|
r.setRotX(rotXBipod * Mth.DEG_TO_RAD);
|
||||||
|
|
||||||
int mode = GunData.from(stack).fireMode.get();
|
var mode = GunData.from(stack).fireMode.get();
|
||||||
|
|
||||||
kuaimanji.setRotX(mode == 2 ? 90 * Mth.DEG_TO_RAD : 0);
|
kuaimanji.setRotX(mode == FireMode.AUTO ? 90 * Mth.DEG_TO_RAD : 0);
|
||||||
|
|
||||||
ClientEventHandler.gunRootMove(getAnimationProcessor());
|
ClientEventHandler.gunRootMove(getAnimationProcessor());
|
||||||
|
|
||||||
|
|
|
@ -55,15 +55,11 @@ public class VectorItemModel extends GeoModel<VectorItem> {
|
||||||
if (!(stack.getItem() instanceof GunItem)) return;
|
if (!(stack.getItem() instanceof GunItem)) return;
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
int mode = data.fireMode.get();
|
|
||||||
if (mode == 0) {
|
switch (data.fireMode.get()) {
|
||||||
kmj.setRotX(-120 * Mth.DEG_TO_RAD);
|
case SEMI -> kmj.setRotX(-120 * Mth.DEG_TO_RAD);
|
||||||
}
|
case BURST -> kmj.setRotX(-60 * Mth.DEG_TO_RAD);
|
||||||
if (mode == 1) {
|
case AUTO -> kmj.setRotX(0);
|
||||||
kmj.setRotX(-60 * Mth.DEG_TO_RAD);
|
|
||||||
}
|
|
||||||
if (mode == 2) {
|
|
||||||
kmj.setRotX(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
|
float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
|
||||||
|
|
|
@ -200,9 +200,9 @@ public class AmmoBarOverlay implements LayeredDraw.Layer {
|
||||||
|
|
||||||
private static ResourceLocation getFireMode(GunData data) {
|
private static ResourceLocation getFireMode(GunData data) {
|
||||||
return switch (data.fireMode.get()) {
|
return switch (data.fireMode.get()) {
|
||||||
case 1 -> BURST;
|
case SEMI -> SEMI;
|
||||||
case 2 -> AUTO;
|
case BURST -> BURST;
|
||||||
default -> SEMI;
|
case AUTO -> AUTO;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.WeaponVehicleEntity;
|
import com.atsuishio.superbwarfare.entity.vehicle.base.WeaponVehicleEntity;
|
||||||
import com.atsuishio.superbwarfare.init.*;
|
import com.atsuishio.superbwarfare.init.*;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.data.FireMode;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.value.AttachmentType;
|
import com.atsuishio.superbwarfare.item.gun.data.value.AttachmentType;
|
||||||
import com.atsuishio.superbwarfare.network.message.send.*;
|
import com.atsuishio.superbwarfare.network.message.send.*;
|
||||||
|
@ -492,10 +493,9 @@ public class ClientEventHandler {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.tag();
|
|
||||||
|
|
||||||
var perk = data.perk.get(Perk.Type.AMMO);
|
var perk = data.perk.get(Perk.Type.AMMO);
|
||||||
int mode = data.fireMode.get();
|
var mode = data.fireMode.get();
|
||||||
|
|
||||||
// 精准度
|
// 精准度
|
||||||
float times = (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
|
float times = (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
|
||||||
|
@ -581,7 +581,7 @@ public class ClientEventHandler {
|
||||||
&& !player.getCooldowns().isOnCooldown(stack.getItem())
|
&& !player.getCooldowns().isOnCooldown(stack.getItem())
|
||||||
&& !GunData.from(stack).bolt.needed.get())
|
&& !GunData.from(stack).bolt.needed.get())
|
||||||
)) {
|
)) {
|
||||||
if (mode == 0) {
|
if (mode == FireMode.SEMI) {
|
||||||
if (clientTimer.getProgress() == 0) {
|
if (clientTimer.getProgress() == 0) {
|
||||||
clientTimer.start();
|
clientTimer.start();
|
||||||
shootClient(player);
|
shootClient(player);
|
||||||
|
@ -611,7 +611,7 @@ public class ClientEventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (mode != 0 && clientTimer.getProgress() >= cooldown) {
|
if (mode != FireMode.SEMI && clientTimer.getProgress() >= cooldown) {
|
||||||
clientTimer.stop();
|
clientTimer.stop();
|
||||||
}
|
}
|
||||||
fireSpread = 0;
|
fireSpread = 0;
|
||||||
|
@ -619,7 +619,7 @@ public class ClientEventHandler {
|
||||||
|
|
||||||
gunPartMove(times);
|
gunPartMove(times);
|
||||||
|
|
||||||
if (mode == 0 && clientTimer.getProgress() >= cooldown) {
|
if (mode == FireMode.SEMI && clientTimer.getProgress() >= cooldown) {
|
||||||
clientTimer.stop();
|
clientTimer.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -659,12 +659,12 @@ public class ClientEventHandler {
|
||||||
if (!gunItem.canShoot(data)) return;
|
if (!gunItem.canShoot(data)) return;
|
||||||
|
|
||||||
if (stack.is(ModTags.Items.NORMAL_GUN)) {
|
if (stack.is(ModTags.Items.NORMAL_GUN)) {
|
||||||
int mode = data.fireMode.get();
|
var mode = data.fireMode.get();
|
||||||
if (mode != 2) {
|
if (mode != FireMode.AUTO) {
|
||||||
holdFire = false;
|
holdFire = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode == 1) {
|
if (mode == FireMode.BURST) {
|
||||||
if (data.ammo.get() == 1) {
|
if (data.ammo.get() == 1) {
|
||||||
burstFireAmount = 1;
|
burstFireAmount = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -458,18 +458,6 @@ public abstract class GunItem extends Item implements CustomRendererItem {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum FireMode {
|
|
||||||
SEMI(1),
|
|
||||||
BURST(2),
|
|
||||||
AUTO(4);
|
|
||||||
|
|
||||||
public final int flag;
|
|
||||||
|
|
||||||
FireMode(int i) {
|
|
||||||
this.flag = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public final Map<Integer, Consumer<GunData>> reloadTimeBehaviors = new HashMap<>();
|
public final Map<Integer, Consumer<GunData>> reloadTimeBehaviors = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.atsuishio.superbwarfare.item.gun.data;
|
||||||
import com.google.gson.annotations.SerializedName;
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class DefaultGunData {
|
public class DefaultGunData {
|
||||||
|
|
||||||
|
@ -32,8 +33,12 @@ public class DefaultGunData {
|
||||||
public int projectileAmount = 1;
|
public int projectileAmount = 1;
|
||||||
@SerializedName("Weight")
|
@SerializedName("Weight")
|
||||||
public double weight;
|
public double weight;
|
||||||
@SerializedName("FireMode")
|
|
||||||
public int fireMode;
|
@SerializedName("DefaultFireMode")
|
||||||
|
public FireMode defaultFireMode = FireMode.SEMI;
|
||||||
|
@SerializedName("AvailableFireModes")
|
||||||
|
public Set<FireMode> availableFireModes = Set.of(FireMode.SEMI);
|
||||||
|
|
||||||
@SerializedName("BurstAmount")
|
@SerializedName("BurstAmount")
|
||||||
public int burstAmount;
|
public int burstAmount;
|
||||||
@SerializedName("BypassesArmor")
|
@SerializedName("BypassesArmor")
|
||||||
|
@ -87,7 +92,4 @@ public class DefaultGunData {
|
||||||
"!superbwarfare:longer_wire",
|
"!superbwarfare:longer_wire",
|
||||||
"!superbwarfare:cupid_arrow"
|
"!superbwarfare:cupid_arrow"
|
||||||
);
|
);
|
||||||
|
|
||||||
@SerializedName("AvailableFireModes")
|
|
||||||
public int availableFireModes = 1;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.atsuishio.superbwarfare.item.gun.data;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.Mod;
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
public enum FireMode {
|
||||||
|
@SerializedName("Semi")
|
||||||
|
SEMI("Semi"),
|
||||||
|
@SerializedName("Burst")
|
||||||
|
BURST("Burst"),
|
||||||
|
@SerializedName("Auto")
|
||||||
|
AUTO("Auto");
|
||||||
|
|
||||||
|
public final String name;
|
||||||
|
|
||||||
|
FireMode(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FireMode fromValue(String value) {
|
||||||
|
for (var enumConstant : FireMode.values()) {
|
||||||
|
if (enumConstant.toString().equals(value)) {
|
||||||
|
return enumConstant;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Mod.LOGGER.warn("No FireMode with value {}", value);
|
||||||
|
return FireMode.SEMI;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,10 +27,7 @@ import net.neoforged.neoforge.registries.DeferredHolder;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class GunData {
|
public class GunData {
|
||||||
|
|
||||||
|
@ -74,7 +71,7 @@ public class GunData {
|
||||||
perk = new Perks(this);
|
perk = new Perks(this);
|
||||||
|
|
||||||
ammo = new IntValue(data, "Ammo");
|
ammo = new IntValue(data, "Ammo");
|
||||||
fireMode = new IntValue(data, "FireMode", defaultGunData().fireMode);
|
fireMode = new StringEnumValue<>(data, "FireMode", defaultGunData().defaultFireMode, FireMode::fromValue);
|
||||||
level = new IntValue(data, "Level");
|
level = new IntValue(data, "Level");
|
||||||
exp = new DoubleValue(data, "Exp");
|
exp = new DoubleValue(data, "Exp");
|
||||||
upgradePoint = new DoubleValue(data, "UpgradePoint");
|
upgradePoint = new DoubleValue(data, "UpgradePoint");
|
||||||
|
@ -501,13 +498,13 @@ public class GunData {
|
||||||
return availablePerks().contains(perk);
|
return availablePerks().contains(perk);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getAvailableFireModes() {
|
public Set<FireMode> getAvailableFireModes() {
|
||||||
return defaultGunData().availableFireModes;
|
return defaultGunData().availableFireModes;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 可持久化属性开始
|
// 可持久化属性开始
|
||||||
public final IntValue ammo;
|
public final IntValue ammo;
|
||||||
public final IntValue fireMode;
|
public final StringEnumValue<FireMode> fireMode;
|
||||||
public final IntValue level;
|
public final IntValue level;
|
||||||
public final DoubleValue exp;
|
public final DoubleValue exp;
|
||||||
public final DoubleValue upgradePoint;
|
public final DoubleValue upgradePoint;
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package com.atsuishio.superbwarfare.item.gun.data.value;
|
||||||
|
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
public class StringEnumValue<T> {
|
||||||
|
private final CompoundTag tag;
|
||||||
|
private final String name;
|
||||||
|
private final T defaultValue;
|
||||||
|
private final Function<String, T> toEnum;
|
||||||
|
|
||||||
|
public StringEnumValue(CompoundTag tag, String name, T defaultValue, Function<String, T> toEnum) {
|
||||||
|
this.tag = tag;
|
||||||
|
this.name = name;
|
||||||
|
this.defaultValue = defaultValue;
|
||||||
|
this.toEnum = toEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T get() {
|
||||||
|
String value;
|
||||||
|
if (tag.contains(name)) {
|
||||||
|
value = tag.getString(name);
|
||||||
|
} else {
|
||||||
|
value = defaultValue.toString();
|
||||||
|
}
|
||||||
|
return toEnum.apply(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void set(T value) {
|
||||||
|
if (value == defaultValue) {
|
||||||
|
tag.remove(name);
|
||||||
|
} else {
|
||||||
|
tag.putString(name, value.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reset() {
|
||||||
|
set(defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import com.atsuishio.superbwarfare.Mod;
|
||||||
import com.atsuishio.superbwarfare.init.ModItems;
|
import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.data.FireMode;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
import com.atsuishio.superbwarfare.tools.SoundTool;
|
import com.atsuishio.superbwarfare.tools.SoundTool;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
@ -35,50 +36,49 @@ public record FireModeMessage(int msgType) implements CustomPacketPayload {
|
||||||
if (stack.getItem() instanceof GunItem) {
|
if (stack.getItem() instanceof GunItem) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.tag();
|
var tag = data.tag();
|
||||||
int fireMode = data.fireMode.get();
|
var fireMode = data.fireMode.get();
|
||||||
|
|
||||||
int mode = data.getAvailableFireModes();
|
var mode = data.getAvailableFireModes();
|
||||||
mode &= 0b111;
|
|
||||||
|
|
||||||
if (fireMode == 0) {
|
if (fireMode == FireMode.SEMI) {
|
||||||
if ((mode & 2) != 0) {
|
if (mode.contains(FireMode.BURST)) {
|
||||||
data.fireMode.set(1);
|
data.fireMode.set(FireMode.BURST);
|
||||||
playChangeModeSound(player);
|
playChangeModeSound(player);
|
||||||
data.save();
|
data.save();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((mode & 4) != 0) {
|
if (mode.contains(FireMode.AUTO)) {
|
||||||
data.fireMode.set(2);
|
data.fireMode.set(FireMode.AUTO);
|
||||||
playChangeModeSound(player);
|
playChangeModeSound(player);
|
||||||
data.save();
|
data.save();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fireMode == 1) {
|
if (fireMode == FireMode.BURST) {
|
||||||
if ((mode & 4) != 0) {
|
if (mode.contains(FireMode.AUTO)) {
|
||||||
data.fireMode.set(2);
|
data.fireMode.set(FireMode.AUTO);
|
||||||
playChangeModeSound(player);
|
playChangeModeSound(player);
|
||||||
data.save();
|
data.save();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((mode & 1) != 0) {
|
if (mode.contains(FireMode.SEMI)) {
|
||||||
data.fireMode.set(0);
|
data.fireMode.set(FireMode.SEMI);
|
||||||
playChangeModeSound(player);
|
playChangeModeSound(player);
|
||||||
data.save();
|
data.save();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fireMode == 2) {
|
if (fireMode == FireMode.AUTO) {
|
||||||
if ((mode & 1) != 0) {
|
if (mode.contains(FireMode.SEMI)) {
|
||||||
data.fireMode.set(0);
|
data.fireMode.set(FireMode.SEMI);
|
||||||
playChangeModeSound(player);
|
playChangeModeSound(player);
|
||||||
data.save();
|
data.save();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((mode & 2) != 0) {
|
if (mode.contains(FireMode.BURST)) {
|
||||||
data.fireMode.set(1);
|
data.fireMode.set(FireMode.BURST);
|
||||||
playChangeModeSound(player);
|
playChangeModeSound(player);
|
||||||
data.save();
|
data.save();
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -8,13 +8,13 @@
|
||||||
"Magazine": 25,
|
"Magazine": 25,
|
||||||
"ProjectileAmount": 12,
|
"ProjectileAmount": 12,
|
||||||
"Weight": 7,
|
"Weight": 7,
|
||||||
"FireMode": 2,
|
"DefaultFireMode": "Auto",
|
||||||
"NormalReloadTime": 64,
|
"NormalReloadTime": 64,
|
||||||
"EmptyReloadTime": 85,
|
"EmptyReloadTime": 85,
|
||||||
"BypassesArmor": 0.05,
|
"BypassesArmor": 0.05,
|
||||||
"SoundRadius": 18,
|
"SoundRadius": 18,
|
||||||
"RPM": 360,
|
"RPM": 360,
|
||||||
"AvailableFireModes": 5,
|
"AvailableFireModes": ["Semi", "Auto"],
|
||||||
"AmmoType": "@ShotgunAmmo",
|
"AmmoType": "@ShotgunAmmo",
|
||||||
"AvailablePerks": [
|
"AvailablePerks": [
|
||||||
"@Ammo",
|
"@Ammo",
|
||||||
|
|
|
@ -9,13 +9,13 @@
|
||||||
"Velocity": 44.5,
|
"Velocity": 44.5,
|
||||||
"Magazine": 30,
|
"Magazine": 30,
|
||||||
"Weight": 4,
|
"Weight": 4,
|
||||||
"FireMode": 2,
|
"DefaultFireMode": "Auto",
|
||||||
"NormalReloadTime": 52,
|
"NormalReloadTime": 52,
|
||||||
"EmptyReloadTime": 58,
|
"EmptyReloadTime": 58,
|
||||||
"BypassesArmor": 0.23,
|
"BypassesArmor": 0.23,
|
||||||
"SoundRadius": 12,
|
"SoundRadius": 12,
|
||||||
"RPM": 700,
|
"RPM": 700,
|
||||||
"AvailableFireModes": 5,
|
"AvailableFireModes": ["Semi", "Auto"],
|
||||||
"AmmoType": "@RifleAmmo",
|
"AmmoType": "@RifleAmmo",
|
||||||
"AvailablePerks": [
|
"AvailablePerks": [
|
||||||
"@Ammo",
|
"@Ammo",
|
||||||
|
|
|
@ -9,13 +9,13 @@
|
||||||
"Velocity": 36,
|
"Velocity": 36,
|
||||||
"Magazine": 30,
|
"Magazine": 30,
|
||||||
"Weight": 5,
|
"Weight": 5,
|
||||||
"FireMode": 2,
|
"DefaultFireMode": "Auto",
|
||||||
"NormalReloadTime": 52,
|
"NormalReloadTime": 52,
|
||||||
"EmptyReloadTime": 65,
|
"EmptyReloadTime": 65,
|
||||||
"BypassesArmor": 0.2,
|
"BypassesArmor": 0.2,
|
||||||
"SoundRadius": 14,
|
"SoundRadius": 14,
|
||||||
"RPM": 600,
|
"RPM": 600,
|
||||||
"AvailableFireModes": 5,
|
"AvailableFireModes": ["Semi", "Auto"],
|
||||||
"AmmoType": "@RifleAmmo",
|
"AmmoType": "@RifleAmmo",
|
||||||
"AvailablePerks": [
|
"AvailablePerks": [
|
||||||
"@Ammo",
|
"@Ammo",
|
||||||
|
|
|
@ -8,13 +8,13 @@
|
||||||
"Velocity": 40,
|
"Velocity": 40,
|
||||||
"Magazine": 55,
|
"Magazine": 55,
|
||||||
"Weight": 6,
|
"Weight": 6,
|
||||||
"FireMode": 2,
|
"DefaultFireMode": "Auto",
|
||||||
"NormalReloadTime": 73,
|
"NormalReloadTime": 73,
|
||||||
"EmptyReloadTime": 95,
|
"EmptyReloadTime": 95,
|
||||||
"BypassesArmor": 0.25,
|
"BypassesArmor": 0.25,
|
||||||
"SoundRadius": 13,
|
"SoundRadius": 13,
|
||||||
"RPM": 400,
|
"RPM": 400,
|
||||||
"AvailableFireModes": 4,
|
"AvailableFireModes": ["Auto"],
|
||||||
"AmmoType": "@RifleAmmo",
|
"AmmoType": "@RifleAmmo",
|
||||||
"AvailablePerks": [
|
"AvailablePerks": [
|
||||||
"@Ammo",
|
"@Ammo",
|
||||||
|
|
|
@ -7,13 +7,13 @@
|
||||||
"Velocity": 17,
|
"Velocity": 17,
|
||||||
"Magazine": 17,
|
"Magazine": 17,
|
||||||
"Weight": 1,
|
"Weight": 1,
|
||||||
"FireMode": 2,
|
"DefaultFireMode": "Auto",
|
||||||
"NormalReloadTime": 44,
|
"NormalReloadTime": 44,
|
||||||
"EmptyReloadTime": 47,
|
"EmptyReloadTime": 47,
|
||||||
"BypassesArmor": 0.15,
|
"BypassesArmor": 0.15,
|
||||||
"SoundRadius": 8,
|
"SoundRadius": 8,
|
||||||
"RPM": 1300,
|
"RPM": 1300,
|
||||||
"AvailableFireModes": 5,
|
"AvailableFireModes": ["Semi", "Auto"],
|
||||||
"AmmoType": "@HandgunAmmo",
|
"AmmoType": "@HandgunAmmo",
|
||||||
"AvailablePerks": [
|
"AvailablePerks": [
|
||||||
"@Ammo",
|
"@Ammo",
|
||||||
|
|
|
@ -9,13 +9,13 @@
|
||||||
"Velocity": 44,
|
"Velocity": 44,
|
||||||
"Magazine": 30,
|
"Magazine": 30,
|
||||||
"Weight": 4,
|
"Weight": 4,
|
||||||
"FireMode": 2,
|
"DefaultFireMode": "Auto",
|
||||||
"NormalReloadTime": 56,
|
"NormalReloadTime": 56,
|
||||||
"EmptyReloadTime": 64,
|
"EmptyReloadTime": 64,
|
||||||
"BypassesArmor": 0.25,
|
"BypassesArmor": 0.25,
|
||||||
"SoundRadius": 14,
|
"SoundRadius": 14,
|
||||||
"RPM": 900,
|
"RPM": 900,
|
||||||
"AvailableFireModes": 5,
|
"AvailableFireModes": ["Semi", "Auto"],
|
||||||
"AmmoType": "@RifleAmmo",
|
"AmmoType": "@RifleAmmo",
|
||||||
"AvailablePerks": [
|
"AvailablePerks": [
|
||||||
"@Ammo",
|
"@Ammo",
|
||||||
|
|
|
@ -7,13 +7,13 @@
|
||||||
"Velocity": 50,
|
"Velocity": 50,
|
||||||
"Magazine": 48,
|
"Magazine": 48,
|
||||||
"Weight": 6,
|
"Weight": 6,
|
||||||
"FireMode": 1,
|
"DefaultFireMode": "Auto",
|
||||||
"BurstAmount": 4,
|
"BurstAmount": 4,
|
||||||
"EmptyReloadTime": 56,
|
"EmptyReloadTime": 56,
|
||||||
"BypassesArmor": 0.4,
|
"BypassesArmor": 0.4,
|
||||||
"SoundRadius": 12,
|
"SoundRadius": 12,
|
||||||
"RPM": 900,
|
"RPM": 900,
|
||||||
"AvailableFireModes": 2,
|
"AvailableFireModes": ["Burst"],
|
||||||
"AmmoType": "@RifleAmmo",
|
"AmmoType": "@RifleAmmo",
|
||||||
"AvailablePerks": [
|
"AvailablePerks": [
|
||||||
"@Ammo",
|
"@Ammo",
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
"Magazine": 5,
|
"Magazine": 5,
|
||||||
"BoltActionTime": 22,
|
"BoltActionTime": 22,
|
||||||
"Weight": 5,
|
"Weight": 5,
|
||||||
"FireMode": 0,
|
"DefaultFireMode": "Auto",
|
||||||
"EmptyReloadTime": 59,
|
"EmptyReloadTime": 59,
|
||||||
"PrepareTime": 29,
|
"PrepareTime": 29,
|
||||||
"IterativeTime": 11,
|
"IterativeTime": 11,
|
||||||
|
|
|
@ -9,13 +9,13 @@
|
||||||
"Velocity": 44,
|
"Velocity": 44,
|
||||||
"Magazine": 30,
|
"Magazine": 30,
|
||||||
"Weight": 4,
|
"Weight": 4,
|
||||||
"FireMode": 2,
|
"DefaultFireMode": "Auto",
|
||||||
"NormalReloadTime": 56,
|
"NormalReloadTime": 56,
|
||||||
"EmptyReloadTime": 64,
|
"EmptyReloadTime": 64,
|
||||||
"BypassesArmor": 0.25,
|
"BypassesArmor": 0.25,
|
||||||
"SoundRadius": 14,
|
"SoundRadius": 14,
|
||||||
"RPM": 850,
|
"RPM": 850,
|
||||||
"AvailableFireModes": 5,
|
"AvailableFireModes": ["Semi", "Auto"],
|
||||||
"AmmoType": "@RifleAmmo",
|
"AmmoType": "@RifleAmmo",
|
||||||
"AvailablePerks": [
|
"AvailablePerks": [
|
||||||
"@Ammo",
|
"@Ammo",
|
||||||
|
|
|
@ -7,13 +7,13 @@
|
||||||
"Velocity": 43,
|
"Velocity": 43,
|
||||||
"Magazine": 100,
|
"Magazine": 100,
|
||||||
"Weight": 8,
|
"Weight": 8,
|
||||||
"FireMode": 2,
|
"DefaultFireMode": "Auto",
|
||||||
"NormalReloadTime": 114,
|
"NormalReloadTime": 114,
|
||||||
"EmptyReloadTime": 133,
|
"EmptyReloadTime": 133,
|
||||||
"BypassesArmor": 0.25,
|
"BypassesArmor": 0.25,
|
||||||
"SoundRadius": 15,
|
"SoundRadius": 15,
|
||||||
"RPM": 600,
|
"RPM": 600,
|
||||||
"AvailableFireModes": 4,
|
"AvailableFireModes": ["Auto"],
|
||||||
"AmmoType": "@RifleAmmo",
|
"AmmoType": "@RifleAmmo",
|
||||||
"AvailablePerks": [
|
"AvailablePerks": [
|
||||||
"@Ammo",
|
"@Ammo",
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
"BypassesArmor": 0.3,
|
"BypassesArmor": 0.3,
|
||||||
"SoundRadius": 14,
|
"SoundRadius": 14,
|
||||||
"RPM": 1200,
|
"RPM": 1200,
|
||||||
"FireMode": 2,
|
"DefaultFireMode": "Auto",
|
||||||
"AmmoType": "@RifleAmmo",
|
"AmmoType": "@RifleAmmo",
|
||||||
"ShootDelay": 20,
|
"ShootDelay": 20,
|
||||||
"HeatPerShoot": 0.5,
|
"HeatPerShoot": 0.5,
|
||||||
|
|
|
@ -9,13 +9,13 @@
|
||||||
"Velocity": 42.5,
|
"Velocity": 42.5,
|
||||||
"Magazine": 20,
|
"Magazine": 20,
|
||||||
"Weight": 5,
|
"Weight": 5,
|
||||||
"FireMode": 2,
|
"DefaultFireMode": "Auto",
|
||||||
"NormalReloadTime": 54,
|
"NormalReloadTime": 54,
|
||||||
"EmptyReloadTime": 71,
|
"EmptyReloadTime": 71,
|
||||||
"BypassesArmor": 0.4,
|
"BypassesArmor": 0.4,
|
||||||
"SoundRadius": 16,
|
"SoundRadius": 16,
|
||||||
"RPM": 700,
|
"RPM": 700,
|
||||||
"AvailableFireModes": 5,
|
"AvailableFireModes": ["Semi", "Auto"],
|
||||||
"AmmoType": "@RifleAmmo",
|
"AmmoType": "@RifleAmmo",
|
||||||
"AvailablePerks": [
|
"AvailablePerks": [
|
||||||
"@Ammo",
|
"@Ammo",
|
||||||
|
|
|
@ -9,13 +9,13 @@
|
||||||
"Velocity": 46,
|
"Velocity": 46,
|
||||||
"Magazine": 30,
|
"Magazine": 30,
|
||||||
"Weight": 4,
|
"Weight": 4,
|
||||||
"FireMode": 2,
|
"DefaultFireMode": "Auto",
|
||||||
"NormalReloadTime": 60,
|
"NormalReloadTime": 60,
|
||||||
"EmptyReloadTime": 74,
|
"EmptyReloadTime": 74,
|
||||||
"BypassesArmor": 0.28,
|
"BypassesArmor": 0.28,
|
||||||
"SoundRadius": 13,
|
"SoundRadius": 13,
|
||||||
"RPM": 650,
|
"RPM": 650,
|
||||||
"AvailableFireModes": 5,
|
"AvailableFireModes": ["Semi", "Auto"],
|
||||||
"AmmoType": "@RifleAmmo",
|
"AmmoType": "@RifleAmmo",
|
||||||
"AvailablePerks": [
|
"AvailablePerks": [
|
||||||
"@Ammo",
|
"@Ammo",
|
||||||
|
|
|
@ -9,13 +9,13 @@
|
||||||
"Velocity": 38,
|
"Velocity": 38,
|
||||||
"Magazine": 40,
|
"Magazine": 40,
|
||||||
"Weight": 7,
|
"Weight": 7,
|
||||||
"FireMode": 2,
|
"DefaultFireMode": "Auto",
|
||||||
"NormalReloadTime": 52,
|
"NormalReloadTime": 52,
|
||||||
"EmptyReloadTime": 65,
|
"EmptyReloadTime": 65,
|
||||||
"BypassesArmor": 0.23,
|
"BypassesArmor": 0.23,
|
||||||
"SoundRadius": 14,
|
"SoundRadius": 14,
|
||||||
"RPM": 600,
|
"RPM": 600,
|
||||||
"AvailableFireModes": 5,
|
"AvailableFireModes": ["Semi", "Auto"],
|
||||||
"AmmoType": "@RifleAmmo",
|
"AmmoType": "@RifleAmmo",
|
||||||
"AvailablePerks": [
|
"AvailablePerks": [
|
||||||
"@Ammo",
|
"@Ammo",
|
||||||
|
|
|
@ -7,14 +7,14 @@
|
||||||
"Velocity": 16,
|
"Velocity": 16,
|
||||||
"Magazine": 13,
|
"Magazine": 13,
|
||||||
"Weight": 3,
|
"Weight": 3,
|
||||||
"FireMode": 2,
|
"DefaultFireMode": "Auto",
|
||||||
"BurstAmount": 3,
|
"BurstAmount": 3,
|
||||||
"NormalReloadTime": 46,
|
"NormalReloadTime": 46,
|
||||||
"EmptyReloadTime": 64,
|
"EmptyReloadTime": 64,
|
||||||
"BypassesArmor": 0.15,
|
"BypassesArmor": 0.15,
|
||||||
"SoundRadius": 11,
|
"SoundRadius": 11,
|
||||||
"RPM": 1200,
|
"RPM": 1200,
|
||||||
"AvailableFireModes": 7,
|
"AvailableFireModes": ["Semi", "Burst", "Auto"],
|
||||||
"AmmoType": "@HandgunAmmo",
|
"AmmoType": "@HandgunAmmo",
|
||||||
"AvailablePerks": [
|
"AvailablePerks": [
|
||||||
"@Ammo",
|
"@Ammo",
|
||||||
|
|
Loading…
Add table
Reference in a new issue