移除更多无用NBT,重命名部分getter
This commit is contained in:
parent
b7083324b0
commit
825cd772e6
78 changed files with 312 additions and 345 deletions
|
@ -334,10 +334,10 @@ public class ClickHandler {
|
||||||
&& !notInGame()
|
&& !notInGame()
|
||||||
) {
|
) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1);
|
player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1);
|
||||||
|
|
||||||
if (!gunItem.useBackpackAmmo(stack) && data.getAmmo() <= 0 && GunsTool.getGunIntTag(tag, "ReloadTime") == 0) {
|
if (!gunItem.useBackpackAmmo(stack) && data.ammo() <= 0 && GunsTool.getGunIntTag(tag, "ReloadTime") == 0) {
|
||||||
if (ReloadConfig.LEFT_CLICK_RELOAD.get()) {
|
if (ReloadConfig.LEFT_CLICK_RELOAD.get()) {
|
||||||
PacketDistributor.sendToServer(new ReloadMessage(0));
|
PacketDistributor.sendToServer(new ReloadMessage(0));
|
||||||
ClientEventHandler.burstFireAmount = 0;
|
ClientEventHandler.burstFireAmount = 0;
|
||||||
|
@ -345,11 +345,11 @@ public class ClickHandler {
|
||||||
} else {
|
} else {
|
||||||
PacketDistributor.sendToServer(new FireMessage(0));
|
PacketDistributor.sendToServer(new FireMessage(0));
|
||||||
if ((!(data.normalReloading() || data.emptyReloading())
|
if ((!(data.normalReloading() || data.emptyReloading())
|
||||||
&& !data.isReloading()
|
&& !data.reloading()
|
||||||
&& !GunsTool.getGunBooleanTag(tag, "Charging")
|
&& !GunsTool.getGunBooleanTag(tag, "Charging")
|
||||||
&& !GunsTool.getGunBooleanTag(tag, "NeedBoltAction"))
|
&& !GunsTool.getGunBooleanTag(tag, "NeedBoltAction"))
|
||||||
&& drawTime < 0.01) {
|
&& drawTime < 0.01) {
|
||||||
if (data.getFireMode() == 1) {
|
if (data.fireMode() == 1) {
|
||||||
if (ClientEventHandler.burstFireAmount == 0) {
|
if (ClientEventHandler.burstFireAmount == 0) {
|
||||||
ClientEventHandler.burstFireAmount = data.burstAmount();
|
ClientEventHandler.burstFireAmount = data.burstAmount();
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ public class PoseTool {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
if (data.emptyReloading()
|
if (data.emptyReloading()
|
||||||
|| data.getReloadState() == GunData.ReloadState.NORMAL_RELOADING
|
|| data.getReloadState() == GunData.ReloadState.NORMAL_RELOADING
|
||||||
|| data.isReloading()
|
|| data.reloading()
|
||||||
|| GunsTool.getGunBooleanTag(tag, "Charging")
|
|| GunsTool.getGunBooleanTag(tag, "Charging")
|
||||||
) {
|
) {
|
||||||
return HumanoidModel.ArmPose.CROSSBOW_CHARGE;
|
return HumanoidModel.ArmPose.CROSSBOW_CHARGE;
|
||||||
|
|
|
@ -74,7 +74,7 @@ public class AK12ItemModel extends GeoModel<AK12Item> {
|
||||||
double fr = ClientEventHandler.fireRot;
|
double fr = ClientEventHandler.fireRot;
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
int type = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.SCOPE);
|
int type = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.SCOPE);
|
||||||
|
|
||||||
float posY = switch (type) {
|
float posY = switch (type) {
|
||||||
|
|
|
@ -115,7 +115,7 @@ public class AK47ItemModel extends GeoModel<AK47Item> {
|
||||||
scope3.setScaleZ(1f - (0.7f * (float) zp));
|
scope3.setScaleZ(1f - (0.7f * (float) zp));
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8));
|
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8));
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
|
|
@ -106,7 +106,7 @@ public class BocekItemModel extends GeoModel<BocekItem> {
|
||||||
shen.setRotZ(60 * Mth.DEG_TO_RAD * (float) zp + (float) (0.05f * zpz) - 0.2f);
|
shen.setRotZ(60 * Mth.DEG_TO_RAD * (float) zp + (float) (0.05f * zpz) - 0.2f);
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", !((shen_pos.getPosX() < -0.6 && gun.getPosZ() < -2)));
|
tag.putBoolean("HoloHidden", !((shen_pos.getPosX() < -0.6 && gun.getPosZ() < -2)));
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ public class DevotionItemModel extends GeoModel<DevotionItem> {
|
||||||
GeoBone holo = getAnimationProcessor().getBone("holo");
|
GeoBone holo = getAnimationProcessor().getBone("holo");
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8));
|
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8));
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
|
|
@ -104,7 +104,7 @@ public class Glock17ItemModel extends GeoModel<Glock17Item> {
|
||||||
float numP = (float) (1 - 0.68 * zt);
|
float numP = (float) (1 - 0.68 * zt);
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
|
|
||||||
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) {
|
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) {
|
||||||
main.setRotX(numR * main.getRotX());
|
main.setRotX(numR * main.getRotX());
|
||||||
|
|
|
@ -48,8 +48,8 @@ public class Glock18ItemModel extends GeoModel<Glock18Item> {
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
int mode = GunsTool.getGunIntTag(tag, "FireMode");
|
int mode = data.fireMode();
|
||||||
if (mode == 0) {
|
if (mode == 0) {
|
||||||
switch_.setRotX(35 * Mth.DEG_TO_RAD);
|
switch_.setRotX(35 * Mth.DEG_TO_RAD);
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,7 +109,7 @@ public class Hk416ItemModel extends GeoModel<Hk416Item> {
|
||||||
scope3.setScaleZ(1f - (0.5f * (float) zp));
|
scope3.setScaleZ(1f - (0.5f * (float) zp));
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", !(gun.getPosX() > 3.1));
|
tag.putBoolean("HoloHidden", !(gun.getPosX() > 3.1));
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
@ -155,7 +155,7 @@ 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 = GunsTool.getGunIntTag(tag, "FireMode");
|
int mode = data.fireMode();
|
||||||
|
|
||||||
kuaimanji.setRotX(mode == 2 ? 90 * Mth.DEG_TO_RAD : 0);
|
kuaimanji.setRotX(mode == 2 ? 90 * Mth.DEG_TO_RAD : 0);
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ public class InsidiousItemModel extends GeoModel<InsidiousItem> {
|
||||||
gun.setScaleZ(1f - (0.82f * (float) zp));
|
gun.setScaleZ(1f - (0.82f * (float) zp));
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", !(gun.getPosX() > 3));
|
tag.putBoolean("HoloHidden", !(gun.getPosX() > 3));
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ public class JavelinItemModel extends GeoModel<JavelinItem> {
|
||||||
javelin.setHidden(gun.getPosZ() > 15.85);
|
javelin.setHidden(gun.getPosZ() > 15.85);
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", !(gun.getPosZ() > 15.85));
|
tag.putBoolean("HoloHidden", !(gun.getPosZ() > 15.85));
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ import com.atsuishio.superbwarfare.init.ModTags;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunData;
|
import com.atsuishio.superbwarfare.item.gun.GunData;
|
||||||
import com.atsuishio.superbwarfare.item.gun.sniper.K98Item;
|
import com.atsuishio.superbwarfare.item.gun.sniper.K98Item;
|
||||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
|
@ -46,8 +45,8 @@ public class K98ItemModel extends GeoModel<K98Item> {
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
if (NBTTool.getTag(stack).getDouble("prepare") > 11 && GunsTool.getGunIntTag(tag, "Ammo") == 1) {
|
if (tag.getDouble("prepare") > 11 && data.ammo() == 1) {
|
||||||
clip.setScaleX(0);
|
clip.setScaleX(0);
|
||||||
clip.setScaleY(0);
|
clip.setScaleY(0);
|
||||||
clip.setScaleZ(0);
|
clip.setScaleZ(0);
|
||||||
|
@ -110,7 +109,7 @@ public class K98ItemModel extends GeoModel<K98Item> {
|
||||||
float numR = (float) (1 - 0.52 * zt);
|
float numR = (float) (1 - 0.52 * zt);
|
||||||
float numP = (float) (1 - 0.58 * zt);
|
float numP = (float) (1 - 0.58 * zt);
|
||||||
|
|
||||||
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0 || data.isReloading()) {
|
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0 || data.reloading()) {
|
||||||
main.setRotX(numR * main.getRotX());
|
main.setRotX(numR * main.getRotX());
|
||||||
main.setRotY(numR * main.getRotY());
|
main.setRotY(numR * main.getRotY());
|
||||||
main.setRotZ(numR * main.getRotZ());
|
main.setRotZ(numR * main.getRotZ());
|
||||||
|
|
|
@ -106,7 +106,7 @@ public class M1911ItemModel extends GeoModel<M1911Item> {
|
||||||
float numP = (float) (1 - 0.68 * zt);
|
float numP = (float) (1 - 0.68 * zt);
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) {
|
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) {
|
||||||
main.setRotX(numR * main.getRotX());
|
main.setRotX(numR * main.getRotX());
|
||||||
main.setRotY(numR * main.getRotY());
|
main.setRotY(numR * main.getRotY());
|
||||||
|
|
|
@ -131,7 +131,7 @@ public class M4ItemModel extends GeoModel<M4Item> {
|
||||||
button7.setScaleX(1f - (0.5f * (float) zp));
|
button7.setScaleX(1f - (0.5f * (float) zp));
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.385));
|
tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.385));
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
|
|
@ -60,8 +60,8 @@ public class M60ItemModel extends GeoModel<M60Item> {
|
||||||
}
|
}
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
int ammo = GunsTool.getGunIntTag(tag, "Ammo");
|
int ammo = data.ammo();
|
||||||
boolean flag = GunsTool.getGunBooleanTag(tag, "HideBulletChain");
|
boolean flag = GunsTool.getGunBooleanTag(tag, "HideBulletChain");
|
||||||
|
|
||||||
if (ammo < 5 && flag) {
|
if (ammo < 5 && flag) {
|
||||||
|
|
|
@ -99,7 +99,7 @@ public class M870ItemModel extends GeoModel<M870Item> {
|
||||||
float numR = (float) (1 - 0.72 * zt);
|
float numR = (float) (1 - 0.72 * zt);
|
||||||
float numP = (float) (1 - 0.82 * zt);
|
float numP = (float) (1 - 0.82 * zt);
|
||||||
|
|
||||||
if (GunData.from(stack).isReloading()) {
|
if (GunData.from(stack).reloading()) {
|
||||||
main.setRotX(numR * main.getRotX());
|
main.setRotX(numR * main.getRotX());
|
||||||
main.setRotY(numR * main.getRotY());
|
main.setRotY(numR * main.getRotY());
|
||||||
main.setRotZ(numR * main.getRotZ());
|
main.setRotZ(numR * main.getRotZ());
|
||||||
|
|
|
@ -89,7 +89,7 @@ public class M98bItemModel extends GeoModel<M98bItem> {
|
||||||
gun.setRotZ((float) (0.02f * zpz));
|
gun.setRotZ((float) (0.02f * zpz));
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8));
|
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8));
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@ public class MarlinItemModel extends GeoModel<MarlinItem> {
|
||||||
float numR = (float) (1 - 0.55 * zt);
|
float numR = (float) (1 - 0.55 * zt);
|
||||||
float numP = (float) (1 - 0.88 * zt);
|
float numP = (float) (1 - 0.88 * zt);
|
||||||
|
|
||||||
if (GunData.from(stack).isReloading()) {
|
if (GunData.from(stack).reloading()) {
|
||||||
main.setRotX(numR * main.getRotX());
|
main.setRotX(numR * main.getRotX());
|
||||||
main.setRotY(numR * main.getRotY());
|
main.setRotY(numR * main.getRotY());
|
||||||
main.setRotZ(numR * main.getRotZ());
|
main.setRotZ(numR * main.getRotZ());
|
||||||
|
|
|
@ -140,7 +140,7 @@ public class Mk14ItemModel extends GeoModel<Mk14Item> {
|
||||||
action.setPosZ(2.5f * (float) fp);
|
action.setPosZ(2.5f * (float) fp);
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.5));
|
tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.5));
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ public class MosinNagantItemModel extends GeoModel<MosinNagantItem> {
|
||||||
}
|
}
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.4));
|
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.4));
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ public class MosinNagantItemModel extends GeoModel<MosinNagantItem> {
|
||||||
float numR = (float) (1 - 0.97 * zt);
|
float numR = (float) (1 - 0.97 * zt);
|
||||||
float numP = (float) (1 - 0.81 * zt);
|
float numP = (float) (1 - 0.81 * zt);
|
||||||
|
|
||||||
if (data.isReloading() || GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
if (data.reloading() || GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
||||||
main.setRotX(numR * main.getRotX());
|
main.setRotX(numR * main.getRotX());
|
||||||
main.setRotY(numR * main.getRotY());
|
main.setRotY(numR * main.getRotY());
|
||||||
main.setRotZ(numR * main.getRotZ());
|
main.setRotZ(numR * main.getRotZ());
|
||||||
|
|
|
@ -103,7 +103,7 @@ public class Mp443ItemModel extends GeoModel<Mp443Item> {
|
||||||
float numP = (float) (1 - 0.68 * zt);
|
float numP = (float) (1 - 0.68 * zt);
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) {
|
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) {
|
||||||
main.setRotX(numR * main.getRotX());
|
main.setRotX(numR * main.getRotX());
|
||||||
main.setRotY(numR * main.getRotY());
|
main.setRotY(numR * main.getRotY());
|
||||||
|
|
|
@ -138,7 +138,7 @@ public class Ntw20Model extends GeoModel<Ntw20Item> {
|
||||||
CrossHairOverlay.gunRot = shen.getRotZ();
|
CrossHairOverlay.gunRot = shen.getRotZ();
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", !(gun.getPosX() > 4.3));
|
tag.putBoolean("HoloHidden", !(gun.getPosX() > 4.3));
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ public class RpgItemModel extends GeoModel<RpgItem> {
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
if (GunsTool.getGunBooleanTag(tag, "CloseHammer")) {
|
if (GunsTool.getGunBooleanTag(tag, "CloseHammer")) {
|
||||||
hammer.setRotX(-90 * Mth.DEG_TO_RAD);
|
hammer.setRotX(-90 * Mth.DEG_TO_RAD);
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,7 @@ public class RpkItemModel extends GeoModel<RpkItem> {
|
||||||
|
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.65));
|
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.65));
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@ public class SecondaryCataclysmModel extends GeoModel<SecondaryCataclysm> {
|
||||||
float numP = (float) (1 - 0.68 * zt);
|
float numP = (float) (1 - 0.68 * zt);
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) {
|
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) {
|
||||||
main.setRotX(numR * main.getRotX());
|
main.setRotX(numR * main.getRotX());
|
||||||
main.setRotY(numR * main.getRotY());
|
main.setRotY(numR * main.getRotY());
|
||||||
|
|
|
@ -77,7 +77,7 @@ public class SentinelItemModel extends GeoModel<SentinelItem> {
|
||||||
holo.setPosY(0.09f);
|
holo.setPosY(0.09f);
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.4));
|
tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.4));
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
@ -108,8 +108,8 @@ public class SentinelItemModel extends GeoModel<SentinelItem> {
|
||||||
root.setRotY((float) (0.2f * movePosX + Mth.DEG_TO_RAD * 300 * ClientEventHandler.drawTime + Mth.DEG_TO_RAD * turnRotY));
|
root.setRotY((float) (0.2f * movePosX + Mth.DEG_TO_RAD * 300 * ClientEventHandler.drawTime + Mth.DEG_TO_RAD * turnRotY));
|
||||||
root.setRotZ((float) (0.2f * movePosX + moveRotZ + Mth.DEG_TO_RAD * 90 * ClientEventHandler.drawTime + 2.7f * mph + Mth.DEG_TO_RAD * turnRotZ));
|
root.setRotZ((float) (0.2f * movePosX + moveRotZ + Mth.DEG_TO_RAD * 90 * ClientEventHandler.drawTime + 2.7f * mph + Mth.DEG_TO_RAD * turnRotZ));
|
||||||
|
|
||||||
if (GunsTool.getGunIntTag(tag, "Ammo") <= 5) {
|
if (data.ammo() <= 5) {
|
||||||
ammo.setScaleX((float) GunsTool.getGunIntTag(tag, "Ammo") / 5);
|
ammo.setScaleX((float) data.ammo() / 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
GeoBone camera = getAnimationProcessor().getBone("camera");
|
GeoBone camera = getAnimationProcessor().getBone("camera");
|
||||||
|
|
|
@ -69,7 +69,7 @@ public class SksItemModel extends GeoModel<SksItem> {
|
||||||
gun.setRotZ((float) (0.05f * zpz));
|
gun.setRotZ((float) (0.05f * zpz));
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", gun.getPosX() <= 1.2);
|
tag.putBoolean("HoloHidden", gun.getPosX() <= 1.2);
|
||||||
data.save();
|
data.save();
|
||||||
GeoBone shen = getAnimationProcessor().getBone("shen");
|
GeoBone shen = getAnimationProcessor().getBone("shen");
|
||||||
|
|
|
@ -111,7 +111,7 @@ public class SvdItemModel extends GeoModel<SvdItem> {
|
||||||
cross3.setScaleY((float) (1f + (0.1 * zp)));
|
cross3.setScaleY((float) (1f + (0.1 * zp)));
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", gun.getPosX() <= 1.4);
|
tag.putBoolean("HoloHidden", gun.getPosX() <= 1.4);
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
|
|
@ -154,7 +154,7 @@ public class TracheliumItemModel extends GeoModel<Trachelium> {
|
||||||
CrossHairOverlay.gunRot = shen.getRotZ();
|
CrossHairOverlay.gunRot = shen.getRotZ();
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("HoloHidden", (gun.getPosX() <= 3 || Mth.abs(shen.getRotX()) > (scopeType == 2 ? 3 : 1) * Mth.DEG_TO_RAD || Mth.abs(main.getRotX()) > (scopeType == 2 ? 5.7 : 1) * Mth.DEG_TO_RAD || Mth.abs(main.getRotY()) > 3 * Mth.DEG_TO_RAD));
|
tag.putBoolean("HoloHidden", (gun.getPosX() <= 3 || Mth.abs(shen.getRotX()) > (scopeType == 2 ? 3 : 1) * Mth.DEG_TO_RAD || Mth.abs(main.getRotX()) > (scopeType == 2 ? 5.7 : 1) * Mth.DEG_TO_RAD || Mth.abs(main.getRotY()) > 3 * Mth.DEG_TO_RAD));
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
|
|
|
@ -56,8 +56,8 @@ public class VectorItemModel extends GeoModel<VectorItem> {
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
int mode = GunsTool.getGunIntTag(tag, "FireMode");
|
int mode = data.fireMode();
|
||||||
if (mode == 0) {
|
if (mode == 0) {
|
||||||
kmj.setRotX(-120 * Mth.DEG_TO_RAD);
|
kmj.setRotX(-120 * Mth.DEG_TO_RAD);
|
||||||
}
|
}
|
||||||
|
|
|
@ -391,7 +391,7 @@ public class AmmoBarOverlay {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ResourceLocation getFireMode(GunData data) {
|
private static ResourceLocation getFireMode(GunData data) {
|
||||||
return switch (data.getFireMode()) {
|
return switch (data.fireMode()) {
|
||||||
case 1 -> BURST;
|
case 1 -> BURST;
|
||||||
case 2 -> AUTO;
|
case 2 -> AUTO;
|
||||||
default -> SEMI;
|
default -> SEMI;
|
||||||
|
@ -400,7 +400,8 @@ public class AmmoBarOverlay {
|
||||||
|
|
||||||
private static int getGunAmmoCount(Player player) {
|
private static int getGunAmmoCount(Player player) {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
final var tag = NBTTool.getTag(stack);
|
var data = GunData.from(stack);
|
||||||
|
var tag = data.tag();
|
||||||
|
|
||||||
if (stack.getItem() == ModItems.MINIGUN.get()) {
|
if (stack.getItem() == ModItems.MINIGUN.get()) {
|
||||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||||
|
@ -411,7 +412,7 @@ public class AmmoBarOverlay {
|
||||||
return GunsTool.getGunIntTag(tag, "MaxAmmo");
|
return GunsTool.getGunIntTag(tag, "MaxAmmo");
|
||||||
}
|
}
|
||||||
|
|
||||||
return GunsTool.getGunIntTag(tag, "Ammo");
|
return data.ammo();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getPlayerAmmoCount(Player player) {
|
private static String getPlayerAmmoCount(Player player) {
|
||||||
|
|
|
@ -6,8 +6,8 @@ import com.atsuishio.superbwarfare.client.RenderHelper;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.ArmedVehicleEntity;
|
import com.atsuishio.superbwarfare.entity.vehicle.base.ArmedVehicleEntity;
|
||||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||||
import com.atsuishio.superbwarfare.init.ModItems;
|
import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.GunData;
|
||||||
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
||||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
|
||||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||||
import com.atsuishio.superbwarfare.tools.SeekTool;
|
import com.atsuishio.superbwarfare.tools.SeekTool;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
|
@ -55,9 +55,11 @@ public class JavelinHudOverlay {
|
||||||
|
|
||||||
if (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player))
|
if (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player))
|
||||||
return;
|
return;
|
||||||
var tag = NBTTool.getTag(stack);
|
|
||||||
|
|
||||||
if ((stack.getItem() == ModItems.JAVELIN.get() && !tag.getBoolean("HoloHidden")) && Minecraft.getInstance().options.getCameraType().isFirstPerson() && ClientEventHandler.zoom) {
|
if ((stack.getItem() == ModItems.JAVELIN.get() && !NBTTool.getTag(stack).getBoolean("HoloHidden")) && Minecraft.getInstance().options.getCameraType().isFirstPerson() && ClientEventHandler.zoom) {
|
||||||
|
var data = GunData.from(stack);
|
||||||
|
var tag = data.tag();
|
||||||
|
|
||||||
RenderSystem.disableDepthTest();
|
RenderSystem.disableDepthTest();
|
||||||
RenderSystem.depthMask(false);
|
RenderSystem.depthMask(false);
|
||||||
RenderSystem.enableBlend();
|
RenderSystem.enableBlend();
|
||||||
|
@ -78,7 +80,7 @@ public class JavelinHudOverlay {
|
||||||
float j1 = l + j;
|
float j1 = l + j;
|
||||||
preciseBlit(event.getGuiGraphics(), Mod.loc("textures/screens/javelin/javelin_hud.png"), k, l, 0, 0.0F, i, j, i, j);
|
preciseBlit(event.getGuiGraphics(), Mod.loc("textures/screens/javelin/javelin_hud.png"), k, l, 0, 0.0F, i, j, i, j);
|
||||||
preciseBlit(event.getGuiGraphics(), Mod.loc(tag.getBoolean("TopMode") ? "textures/screens/javelin/top.png" : "textures/screens/javelin/dir.png"), k, l, 0, 0.0F, i, j, i, j);
|
preciseBlit(event.getGuiGraphics(), Mod.loc(tag.getBoolean("TopMode") ? "textures/screens/javelin/top.png" : "textures/screens/javelin/dir.png"), k, l, 0, 0.0F, i, j, i, j);
|
||||||
preciseBlit(event.getGuiGraphics(), Mod.loc(GunsTool.getGunIntTag(tag, "Ammo") > 0 ? "textures/screens/javelin/missile_green.png" : "textures/screens/javelin/missile_red.png"), k, l, 0, 0.0F, i, j, i, j);
|
preciseBlit(event.getGuiGraphics(), Mod.loc(data.ammo() > 0 ? "textures/screens/javelin/missile_green.png" : "textures/screens/javelin/missile_red.png"), k, l, 0, 0.0F, i, j, i, j);
|
||||||
if (tag.getInt("SeekTime") > 1 && tag.getInt("SeekTime") < 20) {
|
if (tag.getInt("SeekTime") > 1 && tag.getInt("SeekTime") < 20) {
|
||||||
preciseBlit(event.getGuiGraphics(), Mod.loc("textures/screens/javelin/seek.png"), k, l, 0, 0.0F, i, j, i, j);
|
preciseBlit(event.getGuiGraphics(), Mod.loc("textures/screens/javelin/seek.png"), k, l, 0, 0.0F, i, j, i, j);
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,8 +127,8 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
|
||||||
* 获取武器等级文本组件
|
* 获取武器等级文本组件
|
||||||
*/
|
*/
|
||||||
protected Component getLevelComponent() {
|
protected Component getLevelComponent() {
|
||||||
int level = data.getLevel();
|
int level = data.level();
|
||||||
double rate = data.getExp() / (20 * Math.pow(level, 2) + 160 * level + 20);
|
double rate = data.exp() / (20 * Math.pow(level, 2) + 160 * level + 20);
|
||||||
|
|
||||||
ChatFormatting formatting;
|
ChatFormatting formatting;
|
||||||
if (level < 10) {
|
if (level < 10) {
|
||||||
|
@ -154,7 +154,7 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
|
||||||
* 获取武器强化点数文本组件
|
* 获取武器强化点数文本组件
|
||||||
*/
|
*/
|
||||||
protected Component getUpgradePointComponent() {
|
protected Component getUpgradePointComponent() {
|
||||||
int upgradePoint = Mth.floor(data.getUpgradePoint());
|
int upgradePoint = Mth.floor(data.upgradePoint());
|
||||||
return Component.translatable("des.superbwarfare.guns.upgrade_point").withStyle(ChatFormatting.GRAY)
|
return Component.translatable("des.superbwarfare.guns.upgrade_point").withStyle(ChatFormatting.GRAY)
|
||||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||||
.append(Component.literal(String.valueOf(upgradePoint)).withStyle(ChatFormatting.WHITE).withStyle(ChatFormatting.BOLD));
|
.append(Component.literal(String.valueOf(upgradePoint)).withStyle(ChatFormatting.WHITE).withStyle(ChatFormatting.BOLD));
|
||||||
|
|
|
@ -19,7 +19,7 @@ public class ClientSentinelImageTooltip extends ClientEnergyImageTooltip {
|
||||||
var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
||||||
|
|
||||||
if (cap != null && cap.getEnergyStored() > 0) {
|
if (cap != null && cap.getEnergyStored() > 0) {
|
||||||
double damage = (data.damage() + GunsTool.getGunDoubleTag(data.getTag(), "ChargedDamage"))
|
double damage = (data.damage() + GunsTool.getGunDoubleTag(data.tag(), "ChargedDamage"))
|
||||||
* TooltipTool.perkDamage(stack);
|
* TooltipTool.perkDamage(stack);
|
||||||
return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
|
return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
|
||||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||||
|
|
|
@ -312,7 +312,7 @@ public class ClientEventHandler {
|
||||||
&& !notInGame()
|
&& !notInGame()
|
||||||
&& cap != null && !cap.edit
|
&& cap != null && !cap.edit
|
||||||
&& !(data.normalReloading() || data.emptyReloading())
|
&& !(data.normalReloading() || data.emptyReloading())
|
||||||
&& !data.isReloading()
|
&& !data.reloading()
|
||||||
&& !player.getCooldowns().isOnCooldown(stack.getItem())
|
&& !player.getCooldowns().isOnCooldown(stack.getItem())
|
||||||
&& !GunsTool.getGunBooleanTag(tag, "Charging")) {
|
&& !GunsTool.getGunBooleanTag(tag, "Charging")) {
|
||||||
gunMelee = 36;
|
gunMelee = 36;
|
||||||
|
@ -392,10 +392,10 @@ public class ClientEventHandler {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
var perk = PerkHelper.getPerkByType(tag, Perk.Type.AMMO);
|
var perk = PerkHelper.getPerkByType(tag, Perk.Type.AMMO);
|
||||||
int mode = data.getFireMode();
|
int mode = data.fireMode();
|
||||||
|
|
||||||
// 精准度
|
// 精准度
|
||||||
float times = (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
|
float times = (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
|
||||||
|
@ -473,9 +473,9 @@ public class ClientEventHandler {
|
||||||
&& cap != null && !cap.edit
|
&& cap != null && !cap.edit
|
||||||
&& !notInGame()
|
&& !notInGame()
|
||||||
&& (!(data.normalReloading() || data.emptyReloading())
|
&& (!(data.normalReloading() || data.emptyReloading())
|
||||||
&& !data.isReloading()
|
&& !data.reloading()
|
||||||
&& !GunsTool.getGunBooleanTag(tag, "Charging")
|
&& !GunsTool.getGunBooleanTag(tag, "Charging")
|
||||||
&& data.getAmmo() > 0
|
&& data.ammo() > 0
|
||||||
&& !player.getCooldowns().isOnCooldown(stack.getItem())
|
&& !player.getCooldowns().isOnCooldown(stack.getItem())
|
||||||
&& !GunsTool.getGunBooleanTag(tag, "NeedBoltAction")
|
&& !GunsTool.getGunBooleanTag(tag, "NeedBoltAction")
|
||||||
&& revolverPre(tag))
|
&& revolverPre(tag))
|
||||||
|
@ -552,14 +552,14 @@ public class ClientEventHandler {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
if (stack.is(ModTags.Items.NORMAL_GUN)) {
|
if (stack.is(ModTags.Items.NORMAL_GUN)) {
|
||||||
if (data.getAmmo() > 0) {
|
if (data.ammo() > 0) {
|
||||||
int mode = data.getFireMode();
|
int mode = data.fireMode();
|
||||||
if (mode != 2) {
|
if (mode != 2) {
|
||||||
holdFire = false;
|
holdFire = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode == 1) {
|
if (mode == 1) {
|
||||||
if (data.getAmmo() == 1) {
|
if (data.ammo() == 1) {
|
||||||
burstFireAmount = 1;
|
burstFireAmount = 1;
|
||||||
}
|
}
|
||||||
if (burstFireAmount == 1) {
|
if (burstFireAmount == 1) {
|
||||||
|
@ -585,7 +585,7 @@ public class ClientEventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断是否为栓动武器(BoltActionTime > 0),并在开火后给一个需要上膛的状态
|
// 判断是否为栓动武器(BoltActionTime > 0),并在开火后给一个需要上膛的状态
|
||||||
if (data.boltActionTime() > 0 && data.getAmmo() > (stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) {
|
if (data.boltActionTime() > 0 && data.ammo() > (stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) {
|
||||||
GunsTool.setGunBooleanTag(tag, "NeedBoltAction", true);
|
GunsTool.setGunBooleanTag(tag, "NeedBoltAction", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1066,7 +1066,7 @@ public class ClientEventHandler {
|
||||||
if (!(entity instanceof Player player)) return;
|
if (!(entity instanceof Player player)) return;
|
||||||
var stack = player.getMainHandItem();
|
var stack = player.getMainHandItem();
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
float times = 5 * Minecraft.getInstance().getTimer().getRealtimeDeltaTicks();
|
float times = 5 * Minecraft.getInstance().getTimer().getRealtimeDeltaTicks();
|
||||||
|
|
||||||
double weight = data.weight();
|
double weight = data.weight();
|
||||||
|
|
|
@ -65,8 +65,8 @@ public class GunEventHandler {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
|
||||||
if (stack.is(ModTags.Items.NORMAL_GUN)) {
|
if (stack.is(ModTags.Items.NORMAL_GUN)) {
|
||||||
var tag = gunData.getTag();
|
var tag = gunData.tag();
|
||||||
var data = gunData.getData();
|
var data = gunData.data();
|
||||||
|
|
||||||
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
||||||
data.putInt("BoltActionTick", GunsTool.getGunIntTag(tag, "BoltActionTick") - 1);
|
data.putInt("BoltActionTick", GunsTool.getGunIntTag(tag, "BoltActionTick") - 1);
|
||||||
|
@ -92,7 +92,7 @@ public class GunEventHandler {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
|
|
||||||
if (!player.level().isClientSide) {
|
if (!player.level().isClientSide) {
|
||||||
String origin = stack.getItem().getDescriptionId();
|
String origin = stack.getItem().getDescriptionId();
|
||||||
|
@ -321,15 +321,15 @@ public class GunEventHandler {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!(stack.getItem() instanceof GunItem gunItem)) return;
|
if (!(stack.getItem() instanceof GunItem gunItem)) return;
|
||||||
|
|
||||||
var tag = gunData.getTag();
|
var tag = gunData.tag();
|
||||||
var data = gunData.getData();
|
var data = gunData.data();
|
||||||
|
|
||||||
// 启动换弹
|
// 启动换弹
|
||||||
if (GunsTool.getGunBooleanTag(tag, "StartReload")) {
|
if (GunsTool.getGunBooleanTag(tag, "StartReload")) {
|
||||||
|
|
||||||
NeoForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack));
|
NeoForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack));
|
||||||
if (gunItem.isOpenBolt(stack)) {
|
if (gunItem.isOpenBolt(stack)) {
|
||||||
if (gunData.getAmmo() == 0) {
|
if (gunData.ammo() == 0) {
|
||||||
data.putInt("ReloadTime", gunData.emptyReloadTime() + 1);
|
data.putInt("ReloadTime", gunData.emptyReloadTime() + 1);
|
||||||
gunData.setReloadState(GunData.ReloadState.EMPTY_RELOADING);
|
gunData.setReloadState(GunData.ReloadState.EMPTY_RELOADING);
|
||||||
playGunEmptyReloadSounds(player);
|
playGunEmptyReloadSounds(player);
|
||||||
|
@ -391,7 +391,7 @@ public class GunEventHandler {
|
||||||
|
|
||||||
if (data.getInt("ReloadTime") == 1) {
|
if (data.getInt("ReloadTime") == 1) {
|
||||||
if (gunItem.isOpenBolt(stack)) {
|
if (gunItem.isOpenBolt(stack)) {
|
||||||
if (gunData.getAmmo() == 0) {
|
if (gunData.ammo() == 0) {
|
||||||
playGunEmptyReload(player, gunData);
|
playGunEmptyReload(player, gunData);
|
||||||
} else {
|
} else {
|
||||||
playGunNormalReload(player, gunData);
|
playGunNormalReload(player, gunData);
|
||||||
|
@ -404,8 +404,8 @@ public class GunEventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void playGunNormalReload(Player player, GunData gunData) {
|
public static void playGunNormalReload(Player player, GunData gunData) {
|
||||||
var stack = gunData.getStack();
|
var stack = gunData.stack();
|
||||||
var gunItem = gunData.getItem();
|
var gunItem = gunData.item();
|
||||||
|
|
||||||
if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) {
|
if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) {
|
||||||
gunData.setAmmo(gunData.magazine() + (gunItem.hasBulletInBarrel(stack) ? 1 : 0));
|
gunData.setAmmo(gunData.magazine() + (gunItem.hasBulletInBarrel(stack) ? 1 : 0));
|
||||||
|
@ -427,7 +427,7 @@ public class GunEventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void playGunEmptyReload(Player player, GunData gunData) {
|
public static void playGunEmptyReload(Player player, GunData gunData) {
|
||||||
ItemStack stack = gunData.getStack();
|
ItemStack stack = gunData.stack();
|
||||||
|
|
||||||
if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) {
|
if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) {
|
||||||
gunData.setAmmo(gunData.magazine());
|
gunData.setAmmo(gunData.magazine());
|
||||||
|
@ -502,7 +502,7 @@ public class GunEventHandler {
|
||||||
private static void handleGunSingleReload(Player player, GunData gunData) {
|
private static void handleGunSingleReload(Player player, GunData gunData) {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!(stack.getItem() instanceof GunItem)) return;
|
if (!(stack.getItem() instanceof GunItem)) return;
|
||||||
var tag = gunData.getTag();
|
var tag = gunData.tag();
|
||||||
|
|
||||||
// 换弹流程计时器
|
// 换弹流程计时器
|
||||||
if (tag.getDouble("prepare") > 0) {
|
if (tag.getDouble("prepare") > 0) {
|
||||||
|
@ -529,13 +529,13 @@ public class GunEventHandler {
|
||||||
if (tag.getBoolean("start_single_reload")) {
|
if (tag.getBoolean("start_single_reload")) {
|
||||||
NeoForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack));
|
NeoForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack));
|
||||||
|
|
||||||
if ((gunData.prepareLoadTime() != 0 && gunData.getAmmo() == 0) || stack.is(ModItems.SECONDARY_CATACLYSM.get())) {
|
if ((gunData.prepareLoadTime() != 0 && gunData.ammo() == 0) || stack.is(ModItems.SECONDARY_CATACLYSM.get())) {
|
||||||
// 此处判断空仓换弹的时候,是否在准备阶段就需要装填一发,如M870
|
// 此处判断空仓换弹的时候,是否在准备阶段就需要装填一发,如M870
|
||||||
playGunPrepareLoadReloadSounds(player);
|
playGunPrepareLoadReloadSounds(player);
|
||||||
int prepareLoadTime = gunData.prepareLoadTime();
|
int prepareLoadTime = gunData.prepareLoadTime();
|
||||||
tag.putInt("prepare_load", prepareLoadTime + 1);
|
tag.putInt("prepare_load", prepareLoadTime + 1);
|
||||||
player.getCooldowns().addCooldown(stack.getItem(), prepareLoadTime);
|
player.getCooldowns().addCooldown(stack.getItem(), prepareLoadTime);
|
||||||
} else if (gunData.prepareEmptyTime() != 0 && gunData.getAmmo() == 0) {
|
} else if (gunData.prepareEmptyTime() != 0 && gunData.ammo() == 0) {
|
||||||
// 此处判断空仓换弹,如莫辛纳甘
|
// 此处判断空仓换弹,如莫辛纳甘
|
||||||
playGunEmptyPrepareSounds(player);
|
playGunEmptyPrepareSounds(player);
|
||||||
int prepareEmptyTime = gunData.prepareEmptyTime();
|
int prepareEmptyTime = gunData.prepareEmptyTime();
|
||||||
|
@ -581,13 +581,13 @@ public class GunEventHandler {
|
||||||
tag.putBoolean("force_stage3_start", true);
|
tag.putBoolean("force_stage3_start", true);
|
||||||
} else if (stack.is(ModTags.Items.LAUNCHER) && GunsTool.getGunIntTag(tag, "MaxAmmo") == 0) {
|
} else if (stack.is(ModTags.Items.LAUNCHER) && GunsTool.getGunIntTag(tag, "MaxAmmo") == 0) {
|
||||||
tag.putBoolean("force_stage3_start", true);
|
tag.putBoolean("force_stage3_start", true);
|
||||||
} else if (stack.is(ModItems.SECONDARY_CATACLYSM.get()) && gunData.getAmmo() >= gunData.magazine()) {
|
} else if (stack.is(ModItems.SECONDARY_CATACLYSM.get()) && gunData.ammo() >= gunData.magazine()) {
|
||||||
tag.putBoolean("force_stage3_start", true);
|
tag.putBoolean("force_stage3_start", true);
|
||||||
} else {
|
} else {
|
||||||
gunData.setReloadStage(2);
|
gunData.setReloadStage(2);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (stack.is(ModItems.SECONDARY_CATACLYSM.get()) && gunData.getAmmo() >= gunData.magazine()) {
|
if (stack.is(ModItems.SECONDARY_CATACLYSM.get()) && gunData.ammo() >= gunData.magazine()) {
|
||||||
tag.putBoolean("force_stage3_start", true);
|
tag.putBoolean("force_stage3_start", true);
|
||||||
} else {
|
} else {
|
||||||
gunData.setReloadStage(2);
|
gunData.setReloadStage(2);
|
||||||
|
@ -606,7 +606,7 @@ public class GunEventHandler {
|
||||||
&& gunData.getReloadStage() == 2
|
&& gunData.getReloadStage() == 2
|
||||||
&& tag.getInt("iterative") == 0
|
&& tag.getInt("iterative") == 0
|
||||||
&& !tag.getBoolean("stop")
|
&& !tag.getBoolean("stop")
|
||||||
&& gunData.getAmmo() < gunData.magazine()
|
&& gunData.ammo() < gunData.magazine()
|
||||||
) {
|
) {
|
||||||
|
|
||||||
playGunLoopReloadSounds(player);
|
playGunLoopReloadSounds(player);
|
||||||
|
@ -643,7 +643,7 @@ public class GunEventHandler {
|
||||||
// 二阶段结束
|
// 二阶段结束
|
||||||
if (tag.getInt("iterative") == 1) {
|
if (tag.getInt("iterative") == 1) {
|
||||||
// 装满结束
|
// 装满结束
|
||||||
if (gunData.getAmmo() >= gunData.magazine()) {
|
if (gunData.ammo() >= gunData.magazine()) {
|
||||||
gunData.setReloadStage(3);
|
gunData.setReloadStage(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -701,7 +701,7 @@ public class GunEventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void singleLoad(Player player, GunData data) {
|
public static void singleLoad(Player player, GunData data) {
|
||||||
data.setAmmo(data.getAmmo() + 1);
|
data.setAmmo(data.ammo() + 1);
|
||||||
|
|
||||||
if (!InventoryTool.hasCreativeAmmoBox(player)) {
|
if (!InventoryTool.hasCreativeAmmoBox(player)) {
|
||||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||||
|
@ -842,8 +842,8 @@ public class GunEventHandler {
|
||||||
*/
|
*/
|
||||||
private static void handleSentinelCharge(Player player, GunData gunData) {
|
private static void handleSentinelCharge(Player player, GunData gunData) {
|
||||||
if (!(player.getMainHandItem().getItem() instanceof GunItem)) return;
|
if (!(player.getMainHandItem().getItem() instanceof GunItem)) return;
|
||||||
var tag = gunData.getTag();
|
var tag = gunData.tag();
|
||||||
final var data = gunData.getData();
|
final var data = gunData.data();
|
||||||
|
|
||||||
// 启动换弹
|
// 启动换弹
|
||||||
if (GunsTool.getGunBooleanTag(tag, "StartCharge")) {
|
if (GunsTool.getGunBooleanTag(tag, "StartCharge")) {
|
||||||
|
|
|
@ -217,14 +217,14 @@ public class LivingEventHandler {
|
||||||
// 先处理发射器类武器或高爆弹的爆炸伤害
|
// 先处理发射器类武器或高爆弹的爆炸伤害
|
||||||
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
||||||
if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), tag) > 0) {
|
if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), tag) > 0) {
|
||||||
data.setExp(data.getExp() + amount);
|
data.setExp(data.exp() + amount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 再判断是不是枪械能造成的伤害
|
// 再判断是不是枪械能造成的伤害
|
||||||
if (!DamageTypeTool.isGunDamage(source)) return;
|
if (!DamageTypeTool.isGunDamage(source)) return;
|
||||||
|
|
||||||
data.setExp(data.getExp() + amount);
|
data.setExp(data.exp() + amount);
|
||||||
data.save();
|
data.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,27 +243,27 @@ public class LivingEventHandler {
|
||||||
// 先处理发射器类武器或高爆弹的爆炸伤害
|
// 先处理发射器类武器或高爆弹的爆炸伤害
|
||||||
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
||||||
if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), tag) > 0) {
|
if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), tag) > 0) {
|
||||||
data.setExp(data.getExp() + amount);
|
data.setExp(data.exp() + amount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 再判断是不是枪械能造成的伤害
|
// 再判断是不是枪械能造成的伤害
|
||||||
if (DamageTypeTool.isGunDamage(source)) {
|
if (DamageTypeTool.isGunDamage(source)) {
|
||||||
data.setExp(data.getExp() + amount);
|
data.setExp(data.exp() + amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 提升武器等级
|
// 提升武器等级
|
||||||
int level = data.getLevel();
|
int level = data.level();
|
||||||
double exp = data.getExp();
|
double exp = data.exp();
|
||||||
double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
|
double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
|
||||||
|
|
||||||
while (exp >= upgradeExpNeeded) {
|
while (exp >= upgradeExpNeeded) {
|
||||||
exp -= upgradeExpNeeded;
|
exp -= upgradeExpNeeded;
|
||||||
level = data.getLevel() + 1;
|
level = data.level() + 1;
|
||||||
upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
|
upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
|
||||||
data.setExp(exp);
|
data.setExp(exp);
|
||||||
data.setLevel(level);
|
data.setLevel(level);
|
||||||
data.setUpgradePoint(data.getUpgradePoint() + 0.5);
|
data.setUpgradePoint(data.upgradePoint() + 0.5);
|
||||||
}
|
}
|
||||||
data.save();
|
data.save();
|
||||||
}
|
}
|
||||||
|
@ -277,17 +277,17 @@ public class LivingEventHandler {
|
||||||
if (event.getEntity() instanceof TargetEntity) return;
|
if (event.getEntity() instanceof TargetEntity) return;
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
int level = data.getLevel();
|
int level = data.level();
|
||||||
double exp = data.getExp();
|
double exp = data.exp();
|
||||||
double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
|
double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
|
||||||
|
|
||||||
while (exp >= upgradeExpNeeded) {
|
while (exp >= upgradeExpNeeded) {
|
||||||
exp -= upgradeExpNeeded;
|
exp -= upgradeExpNeeded;
|
||||||
level = data.getLevel() + 1;
|
level = data.level() + 1;
|
||||||
upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
|
upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
|
||||||
data.setExp(exp);
|
data.setExp(exp);
|
||||||
data.setLevel(level);
|
data.setLevel(level);
|
||||||
data.setUpgradePoint(data.getUpgradePoint() + 0.5);
|
data.setUpgradePoint(data.upgradePoint() + 0.5);
|
||||||
}
|
}
|
||||||
data.save();
|
data.save();
|
||||||
}
|
}
|
||||||
|
@ -357,8 +357,8 @@ public class LivingEventHandler {
|
||||||
stopGunReloadSound(serverPlayer, oldGun);
|
stopGunReloadSound(serverPlayer, oldGun);
|
||||||
|
|
||||||
var oldData = GunData.from(oldStack);
|
var oldData = GunData.from(oldStack);
|
||||||
oldTag = oldData.getTag();
|
oldTag = oldData.tag();
|
||||||
var data = oldData.getData();
|
var data = oldData.data();
|
||||||
|
|
||||||
if (oldData.boltActionTime() > 0) {
|
if (oldData.boltActionTime() > 0) {
|
||||||
data.putInt("BoltActionTick", 0);
|
data.putInt("BoltActionTick", 0);
|
||||||
|
@ -395,7 +395,7 @@ public class LivingEventHandler {
|
||||||
|
|
||||||
if (newStack.getItem() instanceof GunItem) {
|
if (newStack.getItem() instanceof GunItem) {
|
||||||
var newData = GunData.from(newStack);
|
var newData = GunData.from(newStack);
|
||||||
newTag = newData.getTag();
|
newTag = newData.tag();
|
||||||
|
|
||||||
player.getPersistentData().putDouble("noRun", 40);
|
player.getPersistentData().putDouble("noRun", 40);
|
||||||
newTag.putBoolean("draw", true);
|
newTag.putBoolean("draw", true);
|
||||||
|
@ -577,7 +577,7 @@ public class LivingEventHandler {
|
||||||
|
|
||||||
private static void handleClipPerks(ItemStack stack) {
|
private static void handleClipPerks(ItemStack stack) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), tag);
|
int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), tag);
|
||||||
if (healClipLevel != 0) {
|
if (healClipLevel != 0) {
|
||||||
GunsTool.setPerkIntTag(tag, "HealClipTime", 80 + healClipLevel * 20);
|
GunsTool.setPerkIntTag(tag, "HealClipTime", 80 + healClipLevel * 20);
|
||||||
|
@ -592,7 +592,7 @@ public class LivingEventHandler {
|
||||||
|
|
||||||
private static void handleKillClipDamage(ItemStack stack, LivingIncomingDamageEvent event) {
|
private static void handleKillClipDamage(ItemStack stack, LivingIncomingDamageEvent event) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
if (GunsTool.getPerkIntTag(tag, "KillClipTime") > 0) {
|
if (GunsTool.getPerkIntTag(tag, "KillClipTime") > 0) {
|
||||||
int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), tag);
|
int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), tag);
|
||||||
if (level == 0) {
|
if (level == 0) {
|
||||||
|
@ -605,7 +605,7 @@ public class LivingEventHandler {
|
||||||
|
|
||||||
private static void handleGutshotStraightDamage(ItemStack stack, LivingIncomingDamageEvent event) {
|
private static void handleGutshotStraightDamage(ItemStack stack, LivingIncomingDamageEvent event) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
int level = PerkHelper.getItemPerkLevel(ModPerks.GUTSHOT_STRAIGHT.get(), tag);
|
int level = PerkHelper.getItemPerkLevel(ModPerks.GUTSHOT_STRAIGHT.get(), tag);
|
||||||
if (level == 0) return;
|
if (level == 0) return;
|
||||||
|
|
||||||
|
@ -614,7 +614,7 @@ public class LivingEventHandler {
|
||||||
|
|
||||||
private static void handleKillingTallyDamage(ItemStack stack, LivingIncomingDamageEvent event) {
|
private static void handleKillingTallyDamage(ItemStack stack, LivingIncomingDamageEvent event) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag);
|
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag);
|
||||||
if (level == 0) return;
|
if (level == 0) return;
|
||||||
|
|
||||||
|
@ -628,7 +628,7 @@ public class LivingEventHandler {
|
||||||
|
|
||||||
private static void handleKillingTallyAddCount(ItemStack stack) {
|
private static void handleKillingTallyAddCount(ItemStack stack) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag);
|
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag);
|
||||||
if (level != 0) {
|
if (level != 0) {
|
||||||
GunsTool.setPerkIntTag(tag, "KillingTally", Math.min(3, GunsTool.getPerkIntTag(tag, "KillingTally") + 1));
|
GunsTool.setPerkIntTag(tag, "KillingTally", Math.min(3, GunsTool.getPerkIntTag(tag, "KillingTally") + 1));
|
||||||
|
@ -638,7 +638,7 @@ public class LivingEventHandler {
|
||||||
|
|
||||||
private static void handleFourthTimesCharm(ItemStack stack) {
|
private static void handleFourthTimesCharm(ItemStack stack) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
int level = PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), tag);
|
int level = PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), tag);
|
||||||
if (level == 0) return;
|
if (level == 0) return;
|
||||||
|
|
||||||
|
@ -657,7 +657,7 @@ public class LivingEventHandler {
|
||||||
|
|
||||||
private static void handleSubsistence(ItemStack stack, Player player) {
|
private static void handleSubsistence(ItemStack stack, Player player) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
int level = PerkHelper.getItemPerkLevel(ModPerks.SUBSISTENCE.get(), tag);
|
int level = PerkHelper.getItemPerkLevel(ModPerks.SUBSISTENCE.get(), tag);
|
||||||
if (level == 0) return;
|
if (level == 0) return;
|
||||||
|
|
||||||
|
@ -667,7 +667,7 @@ public class LivingEventHandler {
|
||||||
if (cap == null) return;
|
if (cap == null) return;
|
||||||
|
|
||||||
int mag = data.magazine();
|
int mag = data.magazine();
|
||||||
int ammo = data.getAmmo();
|
int ammo = data.ammo();
|
||||||
int ammoReload = (int) Math.min(mag, mag * rate);
|
int ammoReload = (int) Math.min(mag, mag * rate);
|
||||||
int ammoNeed = Math.min(mag - ammo, ammoReload);
|
int ammoNeed = Math.min(mag - ammo, ammoReload);
|
||||||
|
|
||||||
|
@ -697,7 +697,7 @@ public class LivingEventHandler {
|
||||||
|
|
||||||
private static void handleFieldDoctor(ItemStack stack, LivingIncomingDamageEvent event, Player player) {
|
private static void handleFieldDoctor(ItemStack stack, LivingIncomingDamageEvent event, Player player) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
int level = PerkHelper.getItemPerkLevel(ModPerks.FIELD_DOCTOR.get(), tag);
|
int level = PerkHelper.getItemPerkLevel(ModPerks.FIELD_DOCTOR.get(), tag);
|
||||||
if (level == 0) return;
|
if (level == 0) return;
|
||||||
|
|
||||||
|
@ -709,7 +709,7 @@ public class LivingEventHandler {
|
||||||
|
|
||||||
private static void handleHeadSeekerTime(ItemStack stack) {
|
private static void handleHeadSeekerTime(ItemStack stack) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), tag);
|
int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), tag);
|
||||||
if (level == 0) return;
|
if (level == 0) return;
|
||||||
|
|
||||||
|
@ -719,7 +719,7 @@ public class LivingEventHandler {
|
||||||
|
|
||||||
private static void handleHeadSeekerDamage(ItemStack stack, LivingIncomingDamageEvent event) {
|
private static void handleHeadSeekerDamage(ItemStack stack, LivingIncomingDamageEvent event) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), tag);
|
int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), tag);
|
||||||
if (level == 0) return;
|
if (level == 0) return;
|
||||||
|
|
||||||
|
@ -730,7 +730,7 @@ public class LivingEventHandler {
|
||||||
|
|
||||||
private static void handleDesperado(ItemStack stack) {
|
private static void handleDesperado(ItemStack stack) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), tag);
|
int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), tag);
|
||||||
if (level == 0) return;
|
if (level == 0) return;
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||||
import com.atsuishio.superbwarfare.init.ModTags;
|
import com.atsuishio.superbwarfare.init.ModTags;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunData;
|
import com.atsuishio.superbwarfare.item.gun.GunData;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
import com.atsuishio.superbwarfare.tools.*;
|
import com.atsuishio.superbwarfare.tools.*;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
@ -29,16 +30,16 @@ public class PlayerEventHandler {
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
|
public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
|
||||||
Player player = event.getEntity();
|
Player player = event.getEntity();
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack mainStack = player.getMainHandItem();
|
||||||
var tag = NBTTool.getTag(stack);
|
var tag = NBTTool.getTag(mainStack);
|
||||||
if (stack.is(ModItems.MONITOR.get()) && tag.getBoolean("Using")) {
|
if (mainStack.is(ModItems.MONITOR.get()) && tag.getBoolean("Using")) {
|
||||||
tag.putBoolean("Using", false);
|
tag.putBoolean("Using", false);
|
||||||
NBTTool.saveTag(stack, tag);
|
NBTTool.saveTag(mainStack, tag);
|
||||||
}
|
}
|
||||||
for (ItemStack pStack : player.getInventory().items) {
|
for (ItemStack stack : player.getInventory().items) {
|
||||||
if (pStack.is(ModTags.Items.GUN)) {
|
if (stack.getItem() instanceof GunItem) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
tag = data.getTag();
|
tag = data.tag();
|
||||||
|
|
||||||
tag.putBoolean("draw", true);
|
tag.putBoolean("draw", true);
|
||||||
|
|
||||||
|
@ -65,7 +66,7 @@ public class PlayerEventHandler {
|
||||||
for (ItemStack stack : player.getInventory().items) {
|
for (ItemStack stack : player.getInventory().items) {
|
||||||
if (stack.is(ModTags.Items.GUN)) {
|
if (stack.is(ModTags.Items.GUN)) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
tag.putBoolean("draw", true);
|
tag.putBoolean("draw", true);
|
||||||
|
|
||||||
|
@ -203,9 +204,9 @@ public class PlayerEventHandler {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
|
|
||||||
if ((stack.is(ModItems.RPG.get()) || stack.is(ModItems.BOCEK.get())) && data.getAmmo() == 1) {
|
if ((stack.is(ModItems.RPG.get()) || stack.is(ModItems.BOCEK.get())) && data.ammo() == 1) {
|
||||||
tag.putDouble("empty", 0);
|
tag.putDouble("empty", 0);
|
||||||
data.save();
|
data.save();
|
||||||
}
|
}
|
||||||
|
@ -218,7 +219,7 @@ public class PlayerEventHandler {
|
||||||
if (cap == null) return;
|
if (cap == null) return;
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (cap.bowPullHold) {
|
if (cap.bowPullHold) {
|
||||||
if (stack.getItem() == ModItems.BOCEK.get()
|
if (stack.getItem() == ModItems.BOCEK.get()
|
||||||
|
@ -273,7 +274,7 @@ public class PlayerEventHandler {
|
||||||
for (ItemStack stack : player.getInventory().items) {
|
for (ItemStack stack : player.getInventory().items) {
|
||||||
if (stack.is(ModTags.Items.GUN)) {
|
if (stack.is(ModTags.Items.GUN)) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
|
|
||||||
if (!InventoryTool.hasCreativeAmmoBox(player)) {
|
if (!InventoryTool.hasCreativeAmmoBox(player)) {
|
||||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||||
|
@ -295,19 +296,19 @@ public class PlayerEventHandler {
|
||||||
GunsTool.reload(player, stack, data, AmmoType.HEAVY);
|
GunsTool.reload(player, stack, data, AmmoType.HEAVY);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stack.getItem() == ModItems.TASER.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && GunsTool.getGunIntTag(tag, "Ammo") == 0) {
|
if (stack.getItem() == ModItems.TASER.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && data.ammo() == 0) {
|
||||||
data.setAmmo(1);
|
data.setAmmo(1);
|
||||||
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.TASER_ELECTRODE.get(), 1, player.inventoryMenu.getCraftSlots());
|
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.TASER_ELECTRODE.get(), 1, player.inventoryMenu.getCraftSlots());
|
||||||
}
|
}
|
||||||
if (stack.getItem() == ModItems.M_79.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && GunsTool.getGunIntTag(tag, "Ammo") == 0) {
|
if (stack.getItem() == ModItems.M_79.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && data.ammo() == 0) {
|
||||||
data.setAmmo(1);
|
data.setAmmo(1);
|
||||||
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.GRENADE_40MM.get(), 1, player.inventoryMenu.getCraftSlots());
|
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.GRENADE_40MM.get(), 1, player.inventoryMenu.getCraftSlots());
|
||||||
}
|
}
|
||||||
if (stack.getItem() == ModItems.RPG.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && GunsTool.getGunIntTag(tag, "Ammo") == 0) {
|
if (stack.getItem() == ModItems.RPG.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && data.ammo() == 0) {
|
||||||
data.setAmmo(1);
|
data.setAmmo(1);
|
||||||
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.ROCKET.get(), 1, player.inventoryMenu.getCraftSlots());
|
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.ROCKET.get(), 1, player.inventoryMenu.getCraftSlots());
|
||||||
}
|
}
|
||||||
if (stack.getItem() == ModItems.JAVELIN.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && GunsTool.getGunIntTag(tag, "Ammo") == 0) {
|
if (stack.getItem() == ModItems.JAVELIN.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && data.ammo() == 0) {
|
||||||
data.setAmmo(1);
|
data.setAmmo(1);
|
||||||
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.JAVELIN_MISSILE.get(), 1, player.inventoryMenu.getCraftSlots());
|
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.JAVELIN_MISSILE.get(), 1, player.inventoryMenu.getCraftSlots());
|
||||||
}
|
}
|
||||||
|
@ -364,7 +365,7 @@ public class PlayerEventHandler {
|
||||||
ItemStack output = left.copy();
|
ItemStack output = left.copy();
|
||||||
|
|
||||||
var data = GunData.from(output);
|
var data = GunData.from(output);
|
||||||
data.setUpgradePoint(data.getUpgradePoint() + 1);
|
data.setUpgradePoint(data.upgradePoint() + 1);
|
||||||
data.save();
|
data.save();
|
||||||
|
|
||||||
event.setOutput(output);
|
event.setOutput(output);
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class ReloadEventHandler {
|
||||||
|
|
||||||
private static void handleHealClipPre(ItemStack stack) {
|
private static void handleHealClipPre(ItemStack stack) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
int time = GunsTool.getPerkIntTag(tag, "HealClipTime");
|
int time = GunsTool.getPerkIntTag(tag, "HealClipTime");
|
||||||
if (time > 0) {
|
if (time > 0) {
|
||||||
GunsTool.setPerkIntTag(tag, "HealClipTime", 0);
|
GunsTool.setPerkIntTag(tag, "HealClipTime", 0);
|
||||||
|
@ -63,7 +63,7 @@ public class ReloadEventHandler {
|
||||||
|
|
||||||
private static void handleHealClipPost(Player player, ItemStack stack) {
|
private static void handleHealClipPost(Player player, ItemStack stack) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
if (!GunsTool.getPerkBooleanTag(tag, "HealClip")) return;
|
if (!GunsTool.getPerkBooleanTag(tag, "HealClip")) return;
|
||||||
|
|
||||||
int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), tag);
|
int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), tag);
|
||||||
|
@ -80,7 +80,7 @@ public class ReloadEventHandler {
|
||||||
|
|
||||||
private static void handleKillClipPre(ItemStack stack) {
|
private static void handleKillClipPre(ItemStack stack) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
int time = GunsTool.getPerkIntTag(tag, "KillClipReloadTime");
|
int time = GunsTool.getPerkIntTag(tag, "KillClipReloadTime");
|
||||||
if (time > 0) {
|
if (time > 0) {
|
||||||
GunsTool.setPerkIntTag(tag, "KillClipReloadTime", 0);
|
GunsTool.setPerkIntTag(tag, "KillClipReloadTime", 0);
|
||||||
|
@ -93,7 +93,7 @@ public class ReloadEventHandler {
|
||||||
|
|
||||||
private static void handleKillClipPost(ItemStack stack) {
|
private static void handleKillClipPost(ItemStack stack) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
if (!GunsTool.getPerkBooleanTag(tag, "KillClip")) return;
|
if (!GunsTool.getPerkBooleanTag(tag, "KillClip")) return;
|
||||||
|
|
||||||
int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), tag);
|
int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), tag);
|
||||||
|
@ -103,7 +103,7 @@ public class ReloadEventHandler {
|
||||||
|
|
||||||
private static void handleKillingTallyPre(ItemStack stack) {
|
private static void handleKillingTallyPre(ItemStack stack) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag);
|
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag);
|
||||||
if (level == 0) return;
|
if (level == 0) return;
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ public class ReloadEventHandler {
|
||||||
|
|
||||||
private static void handleDesperadoPre(ItemStack stack) {
|
private static void handleDesperadoPre(ItemStack stack) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
int time = GunsTool.getPerkIntTag(tag, "DesperadoTime");
|
int time = GunsTool.getPerkIntTag(tag, "DesperadoTime");
|
||||||
if (time > 0) {
|
if (time > 0) {
|
||||||
GunsTool.setPerkIntTag(tag, "DesperadoTime", 0);
|
GunsTool.setPerkIntTag(tag, "DesperadoTime", 0);
|
||||||
|
@ -126,7 +126,7 @@ public class ReloadEventHandler {
|
||||||
|
|
||||||
private static void handleDesperadoPost(ItemStack stack) {
|
private static void handleDesperadoPost(ItemStack stack) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
if (!GunsTool.getPerkBooleanTag(tag, "Desperado")) return;
|
if (!GunsTool.getPerkBooleanTag(tag, "Desperado")) return;
|
||||||
|
|
||||||
int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), tag);
|
int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), tag);
|
||||||
|
|
|
@ -8,29 +8,19 @@ import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.component.CustomData;
|
import net.minecraft.world.item.component.CustomData;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
|
|
||||||
public class GunData {
|
public class GunData {
|
||||||
private final ItemStack stack;
|
private final ItemStack stack;
|
||||||
private final GunItem item;
|
private final GunItem item;
|
||||||
private CompoundTag tag;
|
private final CompoundTag tag;
|
||||||
private CompoundTag data;
|
private final CompoundTag data;
|
||||||
|
private final CompoundTag perk;
|
||||||
private final String id;
|
private final String id;
|
||||||
|
|
||||||
private static final WeakHashMap<ItemStack, GunData> dataCache = new WeakHashMap<>();
|
private static final WeakHashMap<ItemStack, GunData> dataCache = new WeakHashMap<>();
|
||||||
|
|
||||||
private void loadTags() {
|
|
||||||
var customData = stack.get(DataComponents.CUSTOM_DATA);
|
|
||||||
this.tag = customData != null ? customData.copyTag() : new CompoundTag();
|
|
||||||
|
|
||||||
if (!tag.contains("GunData")) {
|
|
||||||
data = new CompoundTag();
|
|
||||||
tag.put("GunData", data);
|
|
||||||
} else {
|
|
||||||
data = tag.getCompound("GunData");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private GunData(ItemStack stack) {
|
private GunData(ItemStack stack) {
|
||||||
if (!(stack.getItem() instanceof GunItem gunItem)) {
|
if (!(stack.getItem() instanceof GunItem gunItem)) {
|
||||||
throw new IllegalArgumentException("stack is not GunItem!");
|
throw new IllegalArgumentException("stack is not GunItem!");
|
||||||
|
@ -39,7 +29,34 @@ public class GunData {
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
var id = stack.getDescriptionId();
|
var id = stack.getDescriptionId();
|
||||||
this.id = id.substring(id.lastIndexOf(".") + 1);
|
this.id = id.substring(id.lastIndexOf(".") + 1);
|
||||||
loadTags();
|
|
||||||
|
var customData = stack.get(DataComponents.CUSTOM_DATA);
|
||||||
|
this.tag = customData != null ? customData.copyTag() : new CompoundTag();
|
||||||
|
|
||||||
|
if (!tag.contains("GunData")) {
|
||||||
|
data = new CompoundTag();
|
||||||
|
tag.put("GunData", data);
|
||||||
|
} else {
|
||||||
|
data = tag.getCompound("GunData");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!tag.contains("PerkData")) {
|
||||||
|
perk = new CompoundTag();
|
||||||
|
tag.put("PerkData", perk);
|
||||||
|
} else {
|
||||||
|
perk = tag.getCompound("PerkData");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean initialized() {
|
||||||
|
return data.hasUUID("UUID");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initialize() {
|
||||||
|
if (initialized()) return;
|
||||||
|
|
||||||
|
data.putUUID("UUID", UUID.randomUUID());
|
||||||
|
save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static GunData from(ItemStack stack) {
|
public static GunData from(ItemStack stack) {
|
||||||
|
@ -49,22 +66,26 @@ public class GunData {
|
||||||
return dataCache.get(stack);
|
return dataCache.get(stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GunItem getItem() {
|
public GunItem item() {
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack getStack() {
|
public ItemStack stack() {
|
||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompoundTag getTag() {
|
public CompoundTag tag() {
|
||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompoundTag getData() {
|
public CompoundTag data() {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CompoundTag perk() {
|
||||||
|
return perk;
|
||||||
|
}
|
||||||
|
|
||||||
private double getGunData(String key) {
|
private double getGunData(String key) {
|
||||||
return getGunData(key, 0);
|
return getGunData(key, 0);
|
||||||
}
|
}
|
||||||
|
@ -144,7 +165,7 @@ public class GunData {
|
||||||
if (normalReload == 0) return emptyReload;
|
if (normalReload == 0) return emptyReload;
|
||||||
if (emptyReload == 0) return normalReload;
|
if (emptyReload == 0) return normalReload;
|
||||||
|
|
||||||
return getAmmo() < magazine() ? normalReload : emptyReload;
|
return ammo() < magazine() ? normalReload : emptyReload;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double soundRadius() {
|
public double soundRadius() {
|
||||||
|
@ -171,7 +192,7 @@ public class GunData {
|
||||||
return item.getCustomWeight(stack);
|
return item.getCustomWeight(stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getAmmo() {
|
public int ammo() {
|
||||||
return data.getInt("Ammo");
|
return data.getInt("Ammo");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,7 +200,7 @@ public class GunData {
|
||||||
data.putInt("Ammo", ammo);
|
data.putInt("Ammo", ammo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isReloading() {
|
public boolean reloading() {
|
||||||
return getReloadState() != ReloadState.NOT_RELOADING;
|
return getReloadState() != ReloadState.NOT_RELOADING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,7 +230,7 @@ public class GunData {
|
||||||
return (int) getGunData("BurstAmount");
|
return (int) getGunData("BurstAmount");
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getFireMode() {
|
public int fireMode() {
|
||||||
if (data.contains("FireMode")) {
|
if (data.contains("FireMode")) {
|
||||||
return data.getInt("FireMode");
|
return data.getInt("FireMode");
|
||||||
}
|
}
|
||||||
|
@ -220,7 +241,7 @@ public class GunData {
|
||||||
data.putInt("FireMode", fireMode);
|
data.putInt("FireMode", fireMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getLevel() {
|
public int level() {
|
||||||
return data.getInt("Level");
|
return data.getInt("Level");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,7 +249,7 @@ public class GunData {
|
||||||
data.putInt("Level", level);
|
data.putInt("Level", level);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getExp() {
|
public double exp() {
|
||||||
return data.getDouble("Exp");
|
return data.getDouble("Exp");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,7 +257,7 @@ public class GunData {
|
||||||
data.putDouble("Exp", exp);
|
data.putDouble("Exp", exp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getUpgradePoint() {
|
public double upgradePoint() {
|
||||||
return data.getDouble("UpgradePoint");
|
return data.getDouble("UpgradePoint");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ public class GunEvents {
|
||||||
var stack = event.getItemEntity().getItem();
|
var stack = event.getItemEntity().getItem();
|
||||||
if (stack.is(ModTags.Items.GUN)) {
|
if (stack.is(ModTags.Items.GUN)) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
tag.putBoolean("draw", true);
|
tag.putBoolean("draw", true);
|
||||||
data.save();
|
data.save();
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,29 +66,19 @@ public abstract class GunItem extends Item implements CustomRendererItem {
|
||||||
) return;
|
) return;
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
|
|
||||||
if (tag.getString("id").isEmpty()) {
|
|
||||||
var id = stack.getDescriptionId();
|
|
||||||
tag.putString("id", id.substring(id.lastIndexOf(".") + 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tag.getBoolean("init")) {
|
|
||||||
var name = this.getDescriptionId().substring(this.getDescriptionId().lastIndexOf('.') + 1);
|
|
||||||
|
|
||||||
|
if (!data.initialized()) {
|
||||||
|
data.initialize();
|
||||||
if (level.getServer() != null && entity instanceof Player player && player.isCreative()) {
|
if (level.getServer() != null && entity instanceof Player player && player.isCreative()) {
|
||||||
GunsTool.initCreativeGun(stack, name);
|
data.setAmmo(data.magazine());
|
||||||
} else {
|
|
||||||
GunsTool.initGun(tag, name);
|
|
||||||
}
|
}
|
||||||
GunsTool.generateAndSetUUID(tag);
|
|
||||||
tag.putBoolean("init", true);
|
|
||||||
}
|
}
|
||||||
tag.putBoolean("draw", false);
|
tag.putBoolean("draw", false);
|
||||||
handleGunPerks(data);
|
handleGunPerks(data);
|
||||||
|
|
||||||
var hasBulletInBarrel = gunItem.hasBulletInBarrel(stack);
|
var hasBulletInBarrel = gunItem.hasBulletInBarrel(stack);
|
||||||
var ammoCount = data.getAmmo();
|
var ammoCount = data.ammo();
|
||||||
var magazine = data.magazine();
|
var magazine = data.magazine();
|
||||||
|
|
||||||
if ((hasBulletInBarrel && ammoCount > magazine + 1) || (!hasBulletInBarrel && ammoCount > magazine)) {
|
if ((hasBulletInBarrel && ammoCount > magazine + 1) || (!hasBulletInBarrel && ammoCount > magazine)) {
|
||||||
|
@ -109,7 +99,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
|
||||||
}
|
}
|
||||||
capability.syncPlayerVariables(entity);
|
capability.syncPlayerVariables(entity);
|
||||||
}
|
}
|
||||||
GunsTool.setGunIntTag(tag, "Ammo", magazine + (hasBulletInBarrel ? 1 : 0));
|
data.setAmmo(magazine + (hasBulletInBarrel ? 1 : 0));
|
||||||
}
|
}
|
||||||
data.save();
|
data.save();
|
||||||
}
|
}
|
||||||
|
@ -174,7 +164,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
|
||||||
|
|
||||||
|
|
||||||
private void handleGunPerks(GunData data) {
|
private void handleGunPerks(GunData data) {
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
|
|
||||||
reducePerkTagCoolDown(tag, "HealClipTime", "KillClipReloadTime", "KillClipTime", "FourthTimesCharmTick", "HeadSeeker",
|
reducePerkTagCoolDown(tag, "HealClipTime", "KillClipReloadTime", "KillClipTime", "FourthTimesCharmTick", "HeadSeeker",
|
||||||
"DesperadoTime", "DesperadoTimePost");
|
"DesperadoTime", "DesperadoTimePost");
|
||||||
|
@ -186,7 +176,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
|
||||||
GunsTool.setPerkIntTag(tag, "FourthTimesCharmCount", 0);
|
GunsTool.setPerkIntTag(tag, "FourthTimesCharmCount", 0);
|
||||||
|
|
||||||
int mag = data.magazine();
|
int mag = data.magazine();
|
||||||
GunsTool.setGunIntTag(tag, "Ammo", Math.min(mag, GunsTool.getGunIntTag(tag, "Ammo") + 2));
|
data.setAmmo(Math.min(mag, data.ammo() + 2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -407,7 +397,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
|
||||||
* 获取额外总重量加成
|
* 获取额外总重量加成
|
||||||
*/
|
*/
|
||||||
public double getCustomWeight(ItemStack stack) {
|
public double getCustomWeight(ItemStack stack) {
|
||||||
CompoundTag tag = GunData.from(stack).getTag().getCompound("Attachments");
|
CompoundTag tag = GunData.from(stack).tag().getCompound("Attachments");
|
||||||
|
|
||||||
double scopeWeight = switch (tag.getInt("Scope")) {
|
double scopeWeight = switch (tag.getInt("Scope")) {
|
||||||
case 1 -> 0.5;
|
case 1 -> 0.5;
|
||||||
|
@ -454,7 +444,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
|
||||||
* 获取额外音效半径加成
|
* 获取额外音效半径加成
|
||||||
*/
|
*/
|
||||||
public double getCustomSoundRadius(ItemStack stack) {
|
public double getCustomSoundRadius(ItemStack stack) {
|
||||||
return GunData.from(stack).getTag().getCompound("Attachments").getInt("Barrel") == 2 ? 0.6 : 1;
|
return GunData.from(stack).tag().getCompound("Attachments").getInt("Barrel") == 2 ? 0.6 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getCustomBoltActionTime(ItemStack stack) {
|
public int getCustomBoltActionTime(ItemStack stack) {
|
||||||
|
|
|
@ -106,7 +106,7 @@ public class Trachelium extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
boolean stock = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.STOCK) == 2;
|
boolean stock = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.STOCK) == 2;
|
||||||
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) > 0 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.SCOPE) > 0;
|
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) > 0 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.SCOPE) > 0;
|
||||||
|
@ -237,10 +237,8 @@ public class Trachelium extends GunItem implements GeoItem {
|
||||||
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
|
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
|
||||||
super.inventoryTick(stack, world, entity, slot, selected);
|
super.inventoryTick(stack, world, entity, slot, selected);
|
||||||
final var tag = NBTTool.getTag(stack);
|
final var tag = NBTTool.getTag(stack);
|
||||||
GunsTool.setGunIntTag(tag, "BoltActionTime", tag.getBoolean("DA") ? 12 : 0);
|
|
||||||
|
|
||||||
int scopeType = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.SCOPE);
|
int scopeType = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.SCOPE);
|
||||||
int gripType = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP);
|
|
||||||
int stockType = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.STOCK);
|
int stockType = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.STOCK);
|
||||||
CompoundTag tags = tag.getCompound("Attachments");
|
CompoundTag tags = tag.getCompound("Attachments");
|
||||||
|
|
||||||
|
@ -255,7 +253,7 @@ public class Trachelium extends GunItem implements GeoItem {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getCustomBoltActionTime(ItemStack stack) {
|
public int getCustomBoltActionTime(ItemStack stack) {
|
||||||
return GunData.from(stack).getTag().getBoolean("DA") ? 12 : 0;
|
return GunData.from(stack).tag().getBoolean("DA") ? 12 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -57,7 +57,7 @@ public class Ntw20Item extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.shift"));
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.shift"));
|
||||||
|
@ -80,7 +80,7 @@ public class Ntw20Item extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (player.isSprinting() && player.onGround()
|
if (player.isSprinting() && player.onGround()
|
||||||
&& player.getPersistentData().getDouble("noRun") == 0
|
&& player.getPersistentData().getDouble("noRun") == 0
|
||||||
|
|
|
@ -134,7 +134,7 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
|
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
|
||||||
super.inventoryTick(stack, world, entity, slot, selected);
|
super.inventoryTick(stack, world, entity, slot, selected);
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (entity instanceof Player player && selected) {
|
if (entity instanceof Player player && selected) {
|
||||||
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
|
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
|
||||||
|
@ -242,7 +242,7 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
Level level = player.level();
|
Level level = player.level();
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
CompoundTag tag = data.getTag();
|
CompoundTag tag = data.tag();
|
||||||
|
|
||||||
if (tag.getInt("SeekTime") < 20) return;
|
if (tag.getInt("SeekTime") < 20) return;
|
||||||
|
|
||||||
|
@ -289,14 +289,14 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
}
|
}
|
||||||
|
|
||||||
player.getCooldowns().addCooldown(stack.getItem(), 10);
|
player.getCooldowns().addCooldown(stack.getItem(), 10);
|
||||||
data.setAmmo(data.getAmmo() - 1);
|
data.setAmmo(data.ammo() - 1);
|
||||||
data.save();
|
data.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fireOnRelease(Player player, final GunData data) {
|
public void fireOnRelease(Player player, final GunData data) {
|
||||||
fire(player);
|
fire(player);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
tag.putBoolean("Seeking", false);
|
tag.putBoolean("Seeking", false);
|
||||||
tag.putInt("SeekTime", 0);
|
tag.putInt("SeekTime", 0);
|
||||||
tag.putString("TargetEntity", "none");
|
tag.putString("TargetEntity", "none");
|
||||||
|
@ -308,10 +308,10 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fireOnPress(Player player, final GunData data) {
|
public void fireOnPress(Player player, final GunData data) {
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
|
|
||||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||||
if (cap != null && !cap.zoom || data.getAmmo() <= 0) return;
|
if (cap != null && !cap.zoom || data.ammo() <= 0) return;
|
||||||
|
|
||||||
Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 512, 8);
|
Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 512, 8);
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
super.inventoryTick(stack, world, entity, slot, selected);
|
super.inventoryTick(stack, world, entity, slot, selected);
|
||||||
if (entity instanceof Player player) {
|
if (entity instanceof Player player) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
|
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
|
||||||
data.save();
|
data.save();
|
||||||
}
|
}
|
||||||
|
@ -171,11 +171,11 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fireOnPress(Player player, final GunData data) {
|
public void fireOnPress(Player player, final GunData data) {
|
||||||
if (data.isReloading()) return;
|
if (data.reloading()) return;
|
||||||
ItemStack stack = data.getStack();
|
ItemStack stack = data.stack();
|
||||||
if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.getAmmo() <= 0) return;
|
if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.ammo() <= 0) return;
|
||||||
|
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||||
boolean zooming = cap != null && cap.zoom;
|
boolean zooming = cap != null && cap.zoom;
|
||||||
double spread = data.spread();
|
double spread = data.spread();
|
||||||
|
@ -196,7 +196,7 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
gunGrenadeEntity.setNoGravity(PerkHelper.getPerkByType(tag, Perk.Type.AMMO) == ModPerks.MICRO_MISSILE.get());
|
gunGrenadeEntity.setNoGravity(PerkHelper.getPerkByType(tag, Perk.Type.AMMO) == ModPerks.MICRO_MISSILE.get());
|
||||||
|
|
||||||
float velocity = (float) data.velocity();
|
float velocity = (float) data.velocity();
|
||||||
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.MICRO_MISSILE.get(), data.getTag());
|
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.MICRO_MISSILE.get(), data.tag());
|
||||||
if (perkLevel > 0) {
|
if (perkLevel > 0) {
|
||||||
gunGrenadeEntity.setExplosionRadius((float) data.explosionRadius() * 0.5f);
|
gunGrenadeEntity.setExplosionRadius((float) data.explosionRadius() * 0.5f);
|
||||||
gunGrenadeEntity.setDamage((float) data.explosionDamage() * (1.1f + perkLevel * 0.1f));
|
gunGrenadeEntity.setDamage((float) data.explosionDamage() * (1.1f + perkLevel * 0.1f));
|
||||||
|
@ -224,6 +224,6 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
}
|
}
|
||||||
|
|
||||||
player.getCooldowns().addCooldown(stack.getItem(), 2);
|
player.getCooldowns().addCooldown(stack.getItem(), 2);
|
||||||
data.setAmmo(data.getAmmo() - 1);
|
data.setAmmo(data.ammo() - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -133,11 +133,11 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
|
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
if (tag.getBoolean("draw")) {
|
if (tag.getBoolean("draw")) {
|
||||||
tag.putBoolean("draw", false);
|
tag.putBoolean("draw", false);
|
||||||
|
|
||||||
if (GunsTool.getGunIntTag(tag, "Ammo") == 0) {
|
if (data.ammo() == 0) {
|
||||||
tag.putDouble("empty", 1);
|
tag.putDouble("empty", 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -183,11 +183,11 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
public void fireOnPress(Player player, final GunData data) {
|
public void fireOnPress(Player player, final GunData data) {
|
||||||
Level level = player.level();
|
Level level = player.level();
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
|
|
||||||
if (data.isReloading()
|
if (data.reloading()
|
||||||
|| player.getCooldowns().isOnCooldown(stack.getItem())
|
|| player.getCooldowns().isOnCooldown(stack.getItem())
|
||||||
|| data.getAmmo() <= 0
|
|| data.ammo() <= 0
|
||||||
) return;
|
) return;
|
||||||
|
|
||||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||||
|
@ -240,12 +240,12 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
|
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.getAmmo() == 1) {
|
if (data.ammo() == 1) {
|
||||||
tag.putBoolean("empty", true);
|
tag.putBoolean("empty", true);
|
||||||
GunsTool.setGunBooleanTag(tag, "CloseHammer", true);
|
GunsTool.setGunBooleanTag(tag, "CloseHammer", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
player.getCooldowns().addCooldown(stack.getItem(), 10);
|
player.getCooldowns().addCooldown(stack.getItem(), 10);
|
||||||
data.setAmmo(data.getAmmo() - 1);
|
data.setAmmo(data.ammo() - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -88,7 +88,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (data.getReloadStage() == 1 && tag.getDouble("prepare_load") > 0) {
|
if (data.getReloadStage() == 1 && tag.getDouble("prepare_load") > 0) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.prepare"));
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.prepare"));
|
||||||
|
@ -128,7 +128,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
|
||||||
&& data.getReloadStage() != 3
|
&& data.getReloadStage() != 3
|
||||||
&& ClientEventHandler.drawTime < 0.01
|
&& ClientEventHandler.drawTime < 0.01
|
||||||
&& ClientEventHandler.gunMelee == 0
|
&& ClientEventHandler.gunMelee == 0
|
||||||
&& !data.isReloading()
|
&& !data.reloading()
|
||||||
) {
|
) {
|
||||||
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sc.run_fast"));
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sc.run_fast"));
|
||||||
|
@ -181,7 +181,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
|
||||||
|
|
||||||
if (entity instanceof Player player) {
|
if (entity instanceof Player player) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
|
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
|
||||||
data.save();
|
data.save();
|
||||||
}
|
}
|
||||||
|
@ -270,11 +270,11 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fireOnPress(Player player, final GunData data) {
|
public void fireOnPress(Player player, final GunData data) {
|
||||||
if (data.isReloading()) return;
|
if (data.reloading()) return;
|
||||||
ItemStack stack = data.getStack();
|
ItemStack stack = data.stack();
|
||||||
if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.getAmmo() <= 0) return;
|
if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.ammo() <= 0) return;
|
||||||
|
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||||
boolean zooming = cap != null && cap.zoom;
|
boolean zooming = cap != null && cap.zoom;
|
||||||
double spread = data.spread();
|
double spread = data.spread();
|
||||||
|
@ -301,7 +301,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
|
||||||
gunGrenadeEntity.charged(isChargedFire);
|
gunGrenadeEntity.charged(isChargedFire);
|
||||||
|
|
||||||
float velocity = (float) data.velocity();
|
float velocity = (float) data.velocity();
|
||||||
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.MICRO_MISSILE.get(), data.getTag());
|
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.MICRO_MISSILE.get(), data.tag());
|
||||||
if (perkLevel > 0) {
|
if (perkLevel > 0) {
|
||||||
gunGrenadeEntity.setExplosionRadius((float) data.explosionRadius() * 0.5f);
|
gunGrenadeEntity.setExplosionRadius((float) data.explosionRadius() * 0.5f);
|
||||||
gunGrenadeEntity.setDamage((float) data.damage() * (1.1f + perkLevel * 0.1f));
|
gunGrenadeEntity.setDamage((float) data.damage() * (1.1f + perkLevel * 0.1f));
|
||||||
|
@ -341,7 +341,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
|
||||||
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
|
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
|
||||||
}
|
}
|
||||||
|
|
||||||
data.setAmmo(data.getAmmo() - 1);
|
data.setAmmo(data.ammo() - 1);
|
||||||
player.getCooldowns().addCooldown(stack.getItem(), 6);
|
player.getCooldowns().addCooldown(stack.getItem(), 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -108,11 +108,11 @@ public class M60Item extends GunItem implements GeoItem {
|
||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) {
|
public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
if (tag.getBoolean("draw")) {
|
if (tag.getBoolean("draw")) {
|
||||||
tag.putBoolean("draw", false);
|
tag.putBoolean("draw", false);
|
||||||
|
|
||||||
if (GunsTool.getGunIntTag(tag, "Ammo") <= 5) {
|
if (data.ammo() <= 5) {
|
||||||
GunsTool.setGunBooleanTag(tag, "HideBulletChain", true);
|
GunsTool.setGunBooleanTag(tag, "HideBulletChain", true);
|
||||||
}
|
}
|
||||||
data.save();
|
data.save();
|
||||||
|
|
|
@ -37,7 +37,7 @@ import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
public class MinigunItem extends GunItem implements GeoItem {
|
public class MinigunItem extends GunItem implements GeoItem {
|
||||||
@Override
|
@Override
|
||||||
public int getCustomRPM(ItemStack stack) {
|
public int getCustomRPM(ItemStack stack) {
|
||||||
return GunData.from(stack).getData().getInt("CustomRPM");
|
return GunData.from(stack).data().getInt("CustomRPM");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String TAG_HEAT = "heat";
|
private static final String TAG_HEAT = "heat";
|
||||||
|
@ -129,7 +129,7 @@ public class MinigunItem extends GunItem implements GeoItem {
|
||||||
}
|
}
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
if (entity instanceof ServerPlayer serverPlayer && entity.level() instanceof ServerLevel serverLevel && tag.getDouble("heat") > 4 && entity.isInWaterOrRain()) {
|
if (entity instanceof ServerPlayer serverPlayer && entity.level() instanceof ServerLevel serverLevel && tag.getDouble("heat") > 4 && entity.isInWaterOrRain()) {
|
||||||
if (entity.isInWater()) {
|
if (entity.isInWater()) {
|
||||||
ParticleTool.sendParticle(serverLevel, ParticleTypes.BUBBLE_COLUMN_UP,
|
ParticleTool.sendParticle(serverLevel, ParticleTypes.BUBBLE_COLUMN_UP,
|
||||||
|
|
|
@ -57,7 +57,7 @@ public class AK12Item extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
|
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
|
||||||
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;
|
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;
|
||||||
|
|
|
@ -57,7 +57,7 @@ public class AK47Item extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
|
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
|
||||||
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;
|
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class Hk416Item extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
|
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
|
||||||
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;
|
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class M4Item extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
|
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
|
||||||
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;
|
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class MarlinItem extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.shift"));
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.shift"));
|
||||||
|
@ -87,7 +87,7 @@ public class MarlinItem extends GunItem implements GeoItem {
|
||||||
&& player.onGround()
|
&& player.onGround()
|
||||||
&& player.getPersistentData().getDouble("noRun") == 0
|
&& player.getPersistentData().getDouble("noRun") == 0
|
||||||
&& ClientEventHandler.drawTime < 0.01
|
&& ClientEventHandler.drawTime < 0.01
|
||||||
&& !data.isReloading()) {
|
&& !data.reloading()) {
|
||||||
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.marlin.run_fast"));
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.marlin.run_fast"));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class Mk14Item extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
|
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
|
||||||
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;
|
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;
|
||||||
|
|
|
@ -56,7 +56,7 @@ public class Qbz95Item extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
|
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
|
||||||
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;
|
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;
|
||||||
|
|
|
@ -92,11 +92,11 @@ public class SksItem extends GunItem implements GeoItem {
|
||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) {
|
public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
if (tag.getBoolean("draw")) {
|
if (tag.getBoolean("draw")) {
|
||||||
tag.putBoolean("draw", false);
|
tag.putBoolean("draw", false);
|
||||||
|
|
||||||
if (GunsTool.getGunIntTag(tag, "Ammo") == 0) {
|
if (data.ammo() == 0) {
|
||||||
GunsTool.setGunBooleanTag(tag, "HoldOpen", true);
|
GunsTool.setGunBooleanTag(tag, "HoldOpen", true);
|
||||||
}
|
}
|
||||||
data.save();
|
data.save();
|
||||||
|
|
|
@ -96,7 +96,7 @@ public class M870Item extends GunItem implements GeoItem {
|
||||||
&& player.onGround()
|
&& player.onGround()
|
||||||
&& player.getPersistentData().getDouble("noRun") == 0
|
&& player.getPersistentData().getDouble("noRun") == 0
|
||||||
&& ClientEventHandler.drawTime < 0.01
|
&& ClientEventHandler.drawTime < 0.01
|
||||||
&& !data.isReloading()) {
|
&& !data.reloading()) {
|
||||||
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m870.run_fast"));
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m870.run_fast"));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class VectorItem extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
|
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ public class K98Item extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.shift"));
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.shift"));
|
||||||
|
@ -87,7 +87,7 @@ public class K98Item extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (player.isSprinting() && player.onGround()
|
if (player.isSprinting() && player.onGround()
|
||||||
&& player.getPersistentData().getDouble("noRun") == 0
|
&& player.getPersistentData().getDouble("noRun") == 0
|
||||||
|
@ -96,7 +96,7 @@ public class K98Item extends GunItem implements GeoItem {
|
||||||
&& data.getReloadStage() != 2
|
&& data.getReloadStage() != 2
|
||||||
&& data.getReloadStage() != 3
|
&& data.getReloadStage() != 3
|
||||||
&& ClientEventHandler.drawTime < 0.01
|
&& ClientEventHandler.drawTime < 0.01
|
||||||
&& !data.isReloading()
|
&& !data.reloading()
|
||||||
) {
|
) {
|
||||||
if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && GunsTool.getGunIntTag(tag, "BoltActionTick") == 0) {
|
if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && GunsTool.getGunIntTag(tag, "BoltActionTick") == 0) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.k98.run_fast"));
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.k98.run_fast"));
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class M98bItem extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.shift"));
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.shift"));
|
||||||
|
@ -73,7 +73,7 @@ public class M98bItem extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (player.isSprinting() && player.onGround()
|
if (player.isSprinting() && player.onGround()
|
||||||
&& player.getPersistentData().getDouble("noRun") == 0
|
&& player.getPersistentData().getDouble("noRun") == 0
|
||||||
|
|
|
@ -51,17 +51,17 @@ public class MosinNagantItem extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.shift"));
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.shift"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.getReloadStage() == 1 && GunsTool.getGunIntTag(tag, "Ammo") == 0) {
|
if (data.getReloadStage() == 1 && data.ammo() == 0) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare_empty"));
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare_empty"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.getReloadStage() == 1 && GunsTool.getGunIntTag(tag, "Ammo") > 0) {
|
if (data.getReloadStage() == 1 && data.ammo() > 0) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare"));
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ public class MosinNagantItem extends GunItem implements GeoItem {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (player.isSprinting() && player.onGround()
|
if (player.isSprinting() && player.onGround()
|
||||||
&& player.getPersistentData().getDouble("noRun") == 0
|
&& player.getPersistentData().getDouble("noRun") == 0
|
||||||
|
@ -95,7 +95,7 @@ public class MosinNagantItem extends GunItem implements GeoItem {
|
||||||
&& data.getReloadStage() != 2
|
&& data.getReloadStage() != 2
|
||||||
&& data.getReloadStage() != 3
|
&& data.getReloadStage() != 3
|
||||||
&& ClientEventHandler.drawTime < 0.01
|
&& ClientEventHandler.drawTime < 0.01
|
||||||
&& !data.isReloading()
|
&& !data.reloading()
|
||||||
) {
|
) {
|
||||||
if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && GunsTool.getGunIntTag(tag, "BoltActionTick") == 0) {
|
if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && GunsTool.getGunIntTag(tag, "BoltActionTick") == 0) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mosin.run_fast"));
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mosin.run_fast"));
|
||||||
|
|
|
@ -77,7 +77,7 @@ public class SentinelItem extends GunItem implements GeoItem, EnergyStorageItem
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.shift"));
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.shift"));
|
||||||
|
@ -104,7 +104,7 @@ public class SentinelItem extends GunItem implements GeoItem, EnergyStorageItem
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (player.isSprinting() && player.onGround()
|
if (player.isSprinting() && player.onGround()
|
||||||
&& player.getPersistentData().getDouble("noRun") == 0
|
&& player.getPersistentData().getDouble("noRun") == 0
|
||||||
|
@ -138,7 +138,7 @@ public class SentinelItem extends GunItem implements GeoItem, EnergyStorageItem
|
||||||
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
|
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
|
||||||
super.inventoryTick(stack, world, entity, slot, selected);
|
super.inventoryTick(stack, world, entity, slot, selected);
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
||||||
if (cap != null && cap.getEnergyStored() > 0) {
|
if (cap != null && cap.getEnergyStored() > 0) {
|
||||||
|
|
|
@ -118,7 +118,7 @@ public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
|
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
|
||||||
super.inventoryTick(stack, world, entity, slot, selected);
|
super.inventoryTick(stack, world, entity, slot, selected);
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
if (entity instanceof Player player) {
|
if (entity instanceof Player player) {
|
||||||
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
|
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
|
||||||
data.save();
|
data.save();
|
||||||
|
@ -172,8 +172,8 @@ public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
public void fireOnRelease(Player player, final GunData data) {
|
public void fireOnRelease(Player player, final GunData data) {
|
||||||
if (player.level().isClientSide()) return;
|
if (player.level().isClientSide()) return;
|
||||||
|
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
var stack = data.getStack();
|
var stack = data.stack();
|
||||||
var perk = PerkHelper.getPerkByType(tag, Perk.Type.AMMO);
|
var perk = PerkHelper.getPerkByType(tag, Perk.Type.AMMO);
|
||||||
|
|
||||||
if (player instanceof ServerPlayer serverPlayer) {
|
if (player instanceof ServerPlayer serverPlayer) {
|
||||||
|
|
|
@ -147,7 +147,7 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En
|
||||||
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
|
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
|
||||||
super.inventoryTick(stack, world, entity, slot, selected);
|
super.inventoryTick(stack, world, entity, slot, selected);
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (entity instanceof Player player) {
|
if (entity instanceof Player player) {
|
||||||
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
|
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
|
||||||
|
@ -224,16 +224,16 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fireOnPress(Player player, final GunData data) {
|
public void fireOnPress(Player player, final GunData data) {
|
||||||
if (data.isReloading()) return;
|
if (data.reloading()) return;
|
||||||
ItemStack stack = data.getStack();
|
ItemStack stack = data.stack();
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
|
|
||||||
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), tag);
|
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), tag);
|
||||||
var energyStorage = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
var energyStorage = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
||||||
var hasEnoughEnergy = energyStorage != null && energyStorage.getEnergyStored() >= 400 + 100 * perkLevel;
|
var hasEnoughEnergy = energyStorage != null && energyStorage.getEnergyStored() >= 400 + 100 * perkLevel;
|
||||||
|
|
||||||
if (player.getCooldowns().isOnCooldown(stack.getItem())
|
if (player.getCooldowns().isOnCooldown(stack.getItem())
|
||||||
|| data.getAmmo() <= 0
|
|| data.ammo() <= 0
|
||||||
|| !hasEnoughEnergy
|
|| !hasEnoughEnergy
|
||||||
) return;
|
) return;
|
||||||
|
|
||||||
|
@ -263,8 +263,8 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En
|
||||||
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
|
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
|
||||||
}
|
}
|
||||||
|
|
||||||
data.setAmmo(data.getAmmo() - 1);
|
data.setAmmo(data.ammo() - 1);
|
||||||
data.getTag().putBoolean("shoot", true);
|
data.tag().putBoolean("shoot", true);
|
||||||
energyStorage.extractEnergy(400 + 100 * perkLevel, false);
|
energyStorage.extractEnergy(400 + 100 * perkLevel, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ import com.atsuishio.superbwarfare.item.gun.GunData;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
import com.atsuishio.superbwarfare.perk.Perk;
|
import com.atsuishio.superbwarfare.perk.Perk;
|
||||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
|
||||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.Container;
|
import net.minecraft.world.Container;
|
||||||
|
@ -209,15 +208,14 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
|
||||||
|
|
||||||
double oldPoint = data.getUpgradePoint();
|
double oldPoint = data.upgradePoint();
|
||||||
int point = (int) oldPoint;
|
int point = (int) oldPoint;
|
||||||
int newPoint = this.upgradePoint.get();
|
int newPoint = this.upgradePoint.get();
|
||||||
int delta = newPoint - point;
|
int delta = newPoint - point;
|
||||||
|
|
||||||
if (delta != 0) {
|
if (delta != 0) {
|
||||||
GunsTool.setGunDoubleTag(tag, "UpgradePoint", oldPoint + delta);
|
data.setUpgradePoint(oldPoint + delta);
|
||||||
data.save();
|
data.save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -240,7 +238,7 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
|
||||||
|
|
||||||
ItemStack result = gun.copy();
|
ItemStack result = gun.copy();
|
||||||
var data = GunData.from(result);
|
var data = GunData.from(result);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
if (!ammo.isEmpty() && ammo.getItem() instanceof PerkItem<?> perkItem) {
|
if (!ammo.isEmpty() && ammo.getItem() instanceof PerkItem<?> perkItem) {
|
||||||
if (gunItem.canApplyPerk(perkItem.getPerk())) {
|
if (gunItem.canApplyPerk(perkItem.getPerk())) {
|
||||||
|
@ -299,15 +297,15 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
|
||||||
var data = GunData.from(gun);
|
var data = GunData.from(gun);
|
||||||
|
|
||||||
if (level <= 0) {
|
if (level <= 0) {
|
||||||
this.upgradePoint.set((int) data.getUpgradePoint());
|
this.upgradePoint.set((int) data.upgradePoint());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemStack output = gun.copy();
|
ItemStack output = gun.copy();
|
||||||
final var outputTag = NBTTool.getTag(output);
|
final var outputTag = NBTTool.getTag(output);
|
||||||
PerkHelper.removePerkByType(outputTag, perkItem.getPerk().type);
|
PerkHelper.removePerkByType(outputTag, perkItem.getPerk().type);
|
||||||
data.setUpgradePoint(Math.min(MAX_UPGRADE_POINT, level - 1 + data.getUpgradePoint()));
|
data.setUpgradePoint(Math.min(MAX_UPGRADE_POINT, level - 1 + data.upgradePoint()));
|
||||||
this.upgradePoint.set((int) data.getUpgradePoint());
|
this.upgradePoint.set((int) data.upgradePoint());
|
||||||
|
|
||||||
data.save();
|
data.save();
|
||||||
this.container.setItem(INPUT_SLOT, output);
|
this.container.setItem(INPUT_SLOT, output);
|
||||||
|
@ -340,9 +338,9 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
|
||||||
private void onPlaceGun(ItemStack stack) {
|
private void onPlaceGun(ItemStack stack) {
|
||||||
if (!(stack.getItem() instanceof GunItem)) return;
|
if (!(stack.getItem() instanceof GunItem)) return;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
|
|
||||||
int point = (int) data.getUpgradePoint();
|
int point = (int) data.upgradePoint();
|
||||||
this.upgradePoint.set(Mth.clamp(point, 0, MAX_UPGRADE_POINT));
|
this.upgradePoint.set(Mth.clamp(point, 0, MAX_UPGRADE_POINT));
|
||||||
|
|
||||||
var ammoPerk = PerkHelper.getPerkByType(tag, Perk.Type.AMMO);
|
var ammoPerk = PerkHelper.getPerkByType(tag, Perk.Type.AMMO);
|
||||||
|
|
|
@ -34,7 +34,7 @@ public record AdjustZoomFovMessage(double scroll) implements CustomPacketPayload
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
|
|
||||||
if (stack.is(ModItems.MINIGUN.get())) {
|
if (stack.is(ModItems.MINIGUN.get())) {
|
||||||
double minRpm = 300 - 1200;
|
double minRpm = 300 - 1200;
|
||||||
|
|
|
@ -35,7 +35,7 @@ public record EditMessage(int msgType) implements CustomPacketPayload {
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var rootTag = data.getTag();
|
var rootTag = data.tag();
|
||||||
CompoundTag tag = rootTag.getCompound("Attachments");
|
CompoundTag tag = rootTag.getCompound("Attachments");
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 0 -> {
|
case 0 -> {
|
||||||
|
|
|
@ -47,13 +47,13 @@ public record FireMessage(int msgType) implements CustomPacketPayload {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
|
|
||||||
handleGunBolt(player, stack);
|
handleGunBolt(player, stack);
|
||||||
|
|
||||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||||
if (type == 0) {
|
if (type == 0) {
|
||||||
if (tag.getDouble("prepare") == 0 && data.isReloading() && data.getAmmo() > 0) {
|
if (tag.getDouble("prepare") == 0 && data.reloading() && data.ammo() > 0) {
|
||||||
tag.putDouble("force_stop", 1);
|
tag.putDouble("force_stop", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,14 +90,14 @@ public record FireMessage(int msgType) implements CustomPacketPayload {
|
||||||
private static void handleGunBolt(Player player, ItemStack stack) {
|
private static void handleGunBolt(Player player, ItemStack stack) {
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
CompoundTag tag = data.getTag();
|
CompoundTag tag = data.tag();
|
||||||
|
|
||||||
if (data.boltActionTime() > 0
|
if (data.boltActionTime() > 0
|
||||||
&& data.getAmmo() > (stack.is(ModTags.Items.REVOLVER) ? -1 : 0)
|
&& data.ammo() > (stack.is(ModTags.Items.REVOLVER) ? -1 : 0)
|
||||||
&& GunsTool.getGunIntTag(tag, "BoltActionTick") == 0
|
&& GunsTool.getGunIntTag(tag, "BoltActionTick") == 0
|
||||||
&& !(data.normalReloading()
|
&& !(data.normalReloading()
|
||||||
|| data.emptyReloading())
|
|| data.emptyReloading())
|
||||||
&& !data.isReloading()
|
&& !data.reloading()
|
||||||
&& !GunsTool.getGunBooleanTag(tag, "Charging")) {
|
&& !GunsTool.getGunBooleanTag(tag, "Charging")) {
|
||||||
if (!player.getCooldowns().isOnCooldown(stack.getItem()) && GunsTool.getGunBooleanTag(tag, "NeedBoltAction")) {
|
if (!player.getCooldowns().isOnCooldown(stack.getItem()) && GunsTool.getGunBooleanTag(tag, "NeedBoltAction")) {
|
||||||
GunsTool.setGunIntTag(tag, "BoltActionTick", data.boltActionTime() + 1);
|
GunsTool.setGunIntTag(tag, "BoltActionTick", data.boltActionTime() + 1);
|
||||||
|
|
|
@ -35,8 +35,8 @@ public record FireModeMessage(int msgType) implements CustomPacketPayload {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (stack.getItem() instanceof GunItem gunItem) {
|
if (stack.getItem() instanceof GunItem gunItem) {
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
int fireMode = data.getFireMode();
|
int fireMode = data.fireMode();
|
||||||
|
|
||||||
int mode = gunItem.getAvailableFireModes();
|
int mode = gunItem.getAvailableFireModes();
|
||||||
mode &= 0b111;
|
mode &= 0b111;
|
||||||
|
|
|
@ -41,17 +41,17 @@ public record ReloadMessage(int msgType) implements CustomPacketPayload {
|
||||||
if (!(stack.getItem() instanceof GunItem gunItem)) return;
|
if (!(stack.getItem() instanceof GunItem gunItem)) return;
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
|
|
||||||
if (!player.isSpectator()
|
if (!player.isSpectator()
|
||||||
&& !GunsTool.getGunBooleanTag(tag, "Charging")
|
&& !GunsTool.getGunBooleanTag(tag, "Charging")
|
||||||
&& GunsTool.getGunIntTag(tag, "ReloadTime") == 0
|
&& GunsTool.getGunIntTag(tag, "ReloadTime") == 0
|
||||||
&& GunsTool.getGunIntTag(tag, "BoltActionTick") == 0
|
&& GunsTool.getGunIntTag(tag, "BoltActionTick") == 0
|
||||||
&& !data.isReloading()
|
&& !data.reloading()
|
||||||
) {
|
) {
|
||||||
boolean canSingleReload = gunItem.isIterativeReload(stack);
|
boolean canSingleReload = gunItem.isIterativeReload(stack);
|
||||||
boolean canReload = gunItem.isMagazineReload(stack) && !gunItem.isClipReload(stack);
|
boolean canReload = gunItem.isMagazineReload(stack) && !gunItem.isClipReload(stack);
|
||||||
boolean clipLoad = data.getAmmo() == 0 && gunItem.isClipReload(stack);
|
boolean clipLoad = data.ammo() == 0 && gunItem.isClipReload(stack);
|
||||||
|
|
||||||
// 检查备弹
|
// 检查备弹
|
||||||
boolean hasCreativeAmmoBox = player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()));
|
boolean hasCreativeAmmoBox = player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()));
|
||||||
|
@ -79,21 +79,21 @@ public record ReloadMessage(int msgType) implements CustomPacketPayload {
|
||||||
|
|
||||||
if (gunItem.isOpenBolt(stack)) {
|
if (gunItem.isOpenBolt(stack)) {
|
||||||
if (gunItem.hasBulletInBarrel(stack)) {
|
if (gunItem.hasBulletInBarrel(stack)) {
|
||||||
if (data.getAmmo() < magazine + 1) {
|
if (data.ammo() < magazine + 1) {
|
||||||
GunsTool.setGunBooleanTag(tag, "StartReload", true);
|
GunsTool.setGunBooleanTag(tag, "StartReload", true);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (data.getAmmo() < magazine) {
|
if (data.ammo() < magazine) {
|
||||||
GunsTool.setGunBooleanTag(tag, "StartReload", true);
|
GunsTool.setGunBooleanTag(tag, "StartReload", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (data.getAmmo() < magazine) {
|
} else if (data.ammo() < magazine) {
|
||||||
GunsTool.setGunBooleanTag(tag, "StartReload", true);
|
GunsTool.setGunBooleanTag(tag, "StartReload", true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canSingleReload && data.getAmmo() < data.magazine()) {
|
if (canSingleReload && data.ammo() < data.magazine()) {
|
||||||
tag.putBoolean("start_single_reload", true);
|
tag.putBoolean("start_single_reload", true);
|
||||||
}
|
}
|
||||||
data.save();
|
data.save();
|
||||||
|
|
|
@ -28,7 +28,7 @@ public record SensitivityMessage(boolean isAdd) implements CustomPacketPayload {
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
if (message.isAdd) {
|
if (message.isAdd) {
|
||||||
tag.putInt("sensitivity", Math.min(10, tag.getInt("sensitivity") + 1));
|
tag.putInt("sensitivity", Math.min(10, tag.getInt("sensitivity") + 1));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -45,14 +45,14 @@ public record ShootMessage(double spread) implements CustomPacketPayload {
|
||||||
public static void pressAction(Player player, double spared) {
|
public static void pressAction(Player player, double spared) {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
|
|
||||||
if (stack.is(ModTags.Items.NORMAL_GUN)) {
|
if (stack.is(ModTags.Items.NORMAL_GUN)) {
|
||||||
int projectileAmount = data.projectileAmount();
|
int projectileAmount = data.projectileAmount();
|
||||||
|
|
||||||
if (data.getAmmo() > 0) {
|
if (data.ammo() > 0) {
|
||||||
// 空仓挂机
|
// 空仓挂机
|
||||||
if (data.getAmmo() == 1) {
|
if (data.ammo() == 1) {
|
||||||
GunsTool.setGunBooleanTag(tag, "HoldOpen", true);
|
GunsTool.setGunBooleanTag(tag, "HoldOpen", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,14 +61,14 @@ public record ShootMessage(double spread) implements CustomPacketPayload {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断是否为栓动武器(BoltActionTime > 0),并在开火后给一个需要上膛的状态
|
// 判断是否为栓动武器(BoltActionTime > 0),并在开火后给一个需要上膛的状态
|
||||||
if (data.boltActionTime() > 0 && data.getAmmo() > (stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) {
|
if (data.boltActionTime() > 0 && data.ammo() > (stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) {
|
||||||
GunsTool.setGunBooleanTag(tag, "NeedBoltAction", true);
|
GunsTool.setGunBooleanTag(tag, "NeedBoltAction", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
data.setAmmo(data.getAmmo() - 1);
|
data.setAmmo(data.ammo() - 1);
|
||||||
tag.putDouble("empty", 1);
|
tag.putDouble("empty", 1);
|
||||||
|
|
||||||
if (stack.getItem() == ModItems.M_60.get() && data.getAmmo() <= 5) {
|
if (stack.getItem() == ModItems.M_60.get() && data.ammo() <= 5) {
|
||||||
GunsTool.setGunBooleanTag(tag, "HideBulletChain", true);
|
GunsTool.setGunBooleanTag(tag, "HideBulletChain", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ public record SwitchScopeMessage(double scroll) implements CustomPacketPayload {
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
|
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
final var tag = data.getTag();
|
final var tag = data.tag();
|
||||||
tag.putBoolean("ScopeAlt", tag.getBoolean("ScopeAlt"));
|
tag.putBoolean("ScopeAlt", tag.getBoolean("ScopeAlt"));
|
||||||
data.save();
|
data.save();
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ public record ZoomMessage(int msgType) implements CustomPacketPayload {
|
||||||
if (player.getMainHandItem().getItem() == ModItems.JAVELIN.get()) {
|
if (player.getMainHandItem().getItem() == ModItems.JAVELIN.get()) {
|
||||||
var handItem = player.getMainHandItem();
|
var handItem = player.getMainHandItem();
|
||||||
var data = GunData.from(handItem);
|
var data = GunData.from(handItem);
|
||||||
var tag = data.getTag();
|
var tag = data.tag();
|
||||||
|
|
||||||
tag.putBoolean("Seeking", false);
|
tag.putBoolean("Seeking", false);
|
||||||
tag.putInt("SeekTime", 0);
|
tag.putInt("SeekTime", 0);
|
||||||
|
|
|
@ -66,7 +66,7 @@ public class PerkHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getItemPerkLevel(Perk perk, GunData data) {
|
public static int getItemPerkLevel(Perk perk, GunData data) {
|
||||||
return getItemPerkLevel(perk, data.getTag());
|
return getItemPerkLevel(perk, data.tag());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getItemPerkLevel(Perk perk, final CompoundTag tag) {
|
public static int getItemPerkLevel(Perk perk, final CompoundTag tag) {
|
||||||
|
@ -89,7 +89,7 @@ public class PerkHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CompoundTag getPerkTag(GunData data, Perk.Type type) {
|
public static CompoundTag getPerkTag(GunData data, Perk.Type type) {
|
||||||
return getPerkTag(data.getTag(), type);
|
return getPerkTag(data.tag(), type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CompoundTag getPerkTag(final CompoundTag tag, Perk.Type type) {
|
public static CompoundTag getPerkTag(final CompoundTag tag, Perk.Type type) {
|
||||||
|
@ -113,7 +113,7 @@ public class PerkHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Perk getPerkByType(GunData data, Perk.Type type) {
|
public static Perk getPerkByType(GunData data, Perk.Type type) {
|
||||||
return getPerkByType(data.getTag(), type);
|
return getPerkByType(data.tag(), type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -55,48 +55,6 @@ public class GunsTool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void initGun(final CompoundTag tag, String location) {
|
|
||||||
if (gunsData != null && gunsData.get(location) != null) {
|
|
||||||
CompoundTag data = tag.getCompound("GunData");
|
|
||||||
|
|
||||||
// gunsData.get(location).forEach(data::putDouble);
|
|
||||||
|
|
||||||
data.putBoolean("Init", true);
|
|
||||||
tag.put("GunData", data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void initCreativeGun(ItemStack stack, String location) {
|
|
||||||
var data = GunData.from(stack);
|
|
||||||
var fillAmmo = !data.getData().getBoolean("Init");
|
|
||||||
|
|
||||||
initGun(data.getTag(), location);
|
|
||||||
data.save();
|
|
||||||
|
|
||||||
if (fillAmmo) {
|
|
||||||
data.setAmmo(data.magazine());
|
|
||||||
data.save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void generateAndSetUUID(final CompoundTag tag) {
|
|
||||||
UUID uuid = UUID.randomUUID();
|
|
||||||
var data = tag.getCompound("GunData");
|
|
||||||
data.putUUID("UUID", uuid);
|
|
||||||
tag.put("GunData", data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static double getGunDefaultData(final CompoundTag tag, String name) {
|
|
||||||
var id = tag.getString("id");
|
|
||||||
|
|
||||||
if (!tag.getBoolean("init")) {
|
|
||||||
return GunsTool.gunsData
|
|
||||||
.getOrDefault(id, new HashMap<>())
|
|
||||||
.getOrDefault(name, 0.0);
|
|
||||||
}
|
|
||||||
return getGunDoubleTag(tag, name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) {
|
public static void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) {
|
||||||
if (event.getEntity() instanceof ServerPlayer player) {
|
if (event.getEntity() instanceof ServerPlayer player) {
|
||||||
|
@ -127,10 +85,10 @@ public class GunsTool {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void reload(Player player, ItemStack stack, GunData gunData, AmmoType type, boolean extraOne) {
|
public static void reload(Player player, ItemStack stack, GunData gunData, AmmoType type, boolean extraOne) {
|
||||||
var data = gunData.getData();
|
var data = gunData.data();
|
||||||
|
|
||||||
int mag = gunData.magazine();
|
int mag = gunData.magazine();
|
||||||
int ammo = gunData.getAmmo();
|
int ammo = gunData.ammo();
|
||||||
int ammoToAdd = mag - ammo + (extraOne ? 1 : 0);
|
int ammoToAdd = mag - ammo + (extraOne ? 1 : 0);
|
||||||
|
|
||||||
// 空仓换弹的栓动武器应该在换弹后取消待上膛标记
|
// 空仓换弹的栓动武器应该在换弹后取消待上膛标记
|
||||||
|
@ -157,6 +115,7 @@ public class GunsTool {
|
||||||
/* PerkData */
|
/* PerkData */
|
||||||
public static void setPerkIntTag(final CompoundTag rootTag, String name, int num) {
|
public static void setPerkIntTag(final CompoundTag rootTag, String name, int num) {
|
||||||
CompoundTag tag = rootTag.getCompound("PerkData");
|
CompoundTag tag = rootTag.getCompound("PerkData");
|
||||||
|
if (!tag.contains(name) && num == 0) return;
|
||||||
tag.putInt(name, num);
|
tag.putInt(name, num);
|
||||||
rootTag.put("PerkData", tag);
|
rootTag.put("PerkData", tag);
|
||||||
}
|
}
|
||||||
|
@ -168,6 +127,7 @@ public class GunsTool {
|
||||||
|
|
||||||
public static void setPerkDoubleTag(final CompoundTag rootTag, String name, double num) {
|
public static void setPerkDoubleTag(final CompoundTag rootTag, String name, double num) {
|
||||||
CompoundTag tag = rootTag.getCompound("PerkData");
|
CompoundTag tag = rootTag.getCompound("PerkData");
|
||||||
|
if (!tag.contains(name) && num == 0) return;
|
||||||
tag.putDouble(name, num);
|
tag.putDouble(name, num);
|
||||||
rootTag.put("PerkData", tag);
|
rootTag.put("PerkData", tag);
|
||||||
}
|
}
|
||||||
|
@ -179,6 +139,7 @@ public class GunsTool {
|
||||||
|
|
||||||
public static void setPerkBooleanTag(final CompoundTag rootTag, String name, boolean flag) {
|
public static void setPerkBooleanTag(final CompoundTag rootTag, String name, boolean flag) {
|
||||||
CompoundTag tag = rootTag.getCompound("PerkData");
|
CompoundTag tag = rootTag.getCompound("PerkData");
|
||||||
|
if (!tag.contains(name) && !flag) return;
|
||||||
tag.putBoolean(name, flag);
|
tag.putBoolean(name, flag);
|
||||||
rootTag.put("PerkData", tag);
|
rootTag.put("PerkData", tag);
|
||||||
}
|
}
|
||||||
|
@ -228,9 +189,7 @@ public class GunsTool {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getGunIntTag(final CompoundTag tag, String name) {
|
public static int getGunIntTag(final CompoundTag tag, String name) {
|
||||||
var data = tag.getCompound("GunData");
|
return getGunIntTag(tag, name, 0);
|
||||||
if (!data.contains(name)) return (int) getGunDefaultData(tag, name);
|
|
||||||
return data.getInt(name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getGunIntTag(final CompoundTag tag, String name, int defaultValue) {
|
public static int getGunIntTag(final CompoundTag tag, String name, int defaultValue) {
|
||||||
|
@ -246,9 +205,7 @@ public class GunsTool {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static double getGunDoubleTag(final CompoundTag tag, String name) {
|
public static double getGunDoubleTag(final CompoundTag tag, String name) {
|
||||||
var data = tag.getCompound("GunData");
|
return getGunDoubleTag(tag, name, 0);
|
||||||
if (!data.contains(name) && !tag.getBoolean("init")) return getGunDefaultData(tag, name);
|
|
||||||
return data.getDouble(name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static double getGunDoubleTag(final CompoundTag tag, String name, double defaultValue) {
|
public static double getGunDoubleTag(final CompoundTag tag, String name, double defaultValue) {
|
||||||
|
@ -265,7 +222,7 @@ public class GunsTool {
|
||||||
|
|
||||||
public static boolean getGunBooleanTag(final CompoundTag tag, String name) {
|
public static boolean getGunBooleanTag(final CompoundTag tag, String name) {
|
||||||
var data = tag.getCompound("GunData");
|
var data = tag.getCompound("GunData");
|
||||||
if (!data.contains(name)) return getGunDefaultData(tag, name) != 0;
|
if (!data.contains(name)) return false;
|
||||||
return data.getBoolean(name);
|
return data.getBoolean(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue