添加海月权杖

This commit is contained in:
Light_Quanta 2025-05-21 01:22:58 +08:00
parent 45156fe81c
commit f85f44dc67
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
18 changed files with 18767 additions and 112 deletions

View file

@ -1,4 +1,4 @@
// 1.21.1 2025-04-30T21:39:38.9407598 Tags for minecraft:item mod id superbwarfare
// 1.21.1 2025-05-21T01:16:55.9839971 Tags for minecraft:item mod id superbwarfare
44a232152f5941d0435a35483b37f8ed22fd10bf data/c/tags/item/dusts.json
0fa06c2ff83bf09797e3ddff90f62d1124e645b4 data/c/tags/item/dusts/coal_coke.json
295ddf906b7133a0558d03e9a60eea18281fe430 data/c/tags/item/dusts/iron.json
@ -32,8 +32,8 @@ b2461a0f5cf318dde060f2b111a01c77234a0681 data/superbwarfare/tags/item/blueprint/
3c4adac76810982986b6cd9845192ae8416324f4 data/superbwarfare/tags/item/blueprint/epic.json
db74863ba36706ced4f45eed4cbc0bb0d87aa0f9 data/superbwarfare/tags/item/blueprint/legendary.json
3154110c8f6b5d1473d558b7d0d2f752396dff34 data/superbwarfare/tags/item/blueprint/rare.json
8d846ffd414f5878a783e5a2a094e72df4354f8f data/superbwarfare/tags/item/gun.json
409af265147e812b6f6558c51f1cb83b0f61b7d3 data/superbwarfare/tags/item/handgun.json
e1b7851d212bf40b90454ce77fd25fad78b8424e data/superbwarfare/tags/item/gun.json
cd469bd18f1d19893b79c9cff9970e4db7e0e484 data/superbwarfare/tags/item/handgun.json
0ab1b2a8f5433e0d1b03446a9d0d9428e9d64feb data/superbwarfare/tags/item/heavy_weapon.json
3cc00928c041f710b50eb1f7a817e0345f6f96b3 data/superbwarfare/tags/item/ingots/cemented_carbide.json
a1c6460b9c956972b74d5ad5cd206e9ae3560b03 data/superbwarfare/tags/item/ingots/steel.json
@ -41,7 +41,7 @@ d39c5c787667ce78c214bc2fbd4931891ebaf936 data/superbwarfare/tags/item/launcher.j
ab580f3989177c0589c43ca346db571011600187 data/superbwarfare/tags/item/launcher/grenade.json
b404c6fd99d2ca68c6738f225cb7d68ee443c10a data/superbwarfare/tags/item/machine_gun.json
a53020091752016da6602ee1b8b7e08823614344 data/superbwarfare/tags/item/military_armor.json
8ea4fb7d3981141a953bd5510e8c76fb790307aa data/superbwarfare/tags/item/normal_gun.json
a38ce936246513bfdbf9c0b58807ae361c6edd78 data/superbwarfare/tags/item/normal_gun.json
aaa533157491a82b8e23b2914deef67c4078cbed data/superbwarfare/tags/item/rifle.json
a249d9d052cdc24b34e0e51ab991329f6c76e8ab data/superbwarfare/tags/item/shotgun.json
4aca0fa3f8b9f2a4920041e35e46dae7e93d5482 data/superbwarfare/tags/item/smg.json

View file

@ -5,6 +5,7 @@
"superbwarfare:glock_18",
"superbwarfare:mp_443",
"superbwarfare:m_1911",
"superbwarfare:aurelia_sceptre",
"superbwarfare:homemade_shotgun",
"superbwarfare:trachelium",
"superbwarfare:vector",

View file

@ -4,6 +4,7 @@
"superbwarfare:glock_17",
"superbwarfare:glock_18",
"superbwarfare:m_1911",
"superbwarfare:mp_443"
"superbwarfare:mp_443",
"superbwarfare:aurelia_sceptre"
]
}

View file

@ -25,6 +25,7 @@
"superbwarfare:rpg",
"superbwarfare:glock_18",
"superbwarfare:m_1911",
"superbwarfare:aurelia_sceptre",
"superbwarfare:qbz_95",
"superbwarfare:k_98",
"superbwarfare:mosin_nagant",

View file

@ -0,0 +1,125 @@
package com.atsuishio.superbwarfare.client.model.item;
import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.item.gun.handgun.AureliaSceptre;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.animation.AnimationState;
import software.bernie.geckolib.model.GeoModel;
public class AureliaSceptreModel extends GeoModel<AureliaSceptre> {
public static float fireRotY = 0f;
public static float fireRotZ = 0f;
@Override
public ResourceLocation getAnimationResource(AureliaSceptre animatable) {
return Mod.loc("animations/aurelia_sceptre.animation.json");
}
@Override
public ResourceLocation getModelResource(AureliaSceptre animatable) {
return Mod.loc("geo/aurelia_sceptre.geo.json");
}
@Override
public ResourceLocation getTextureResource(AureliaSceptre animatable) {
return Mod.loc("textures/item/aurelia_sceptre.png");
}
@Override
public void setCustomAnimations(AureliaSceptre animatable, long instanceId, AnimationState animationState) {
// TODO 动画
// GeoBone gun = getAnimationProcessor().getBone("bone");
// GeoBone slide = getAnimationProcessor().getBone("huatao");
// GeoBone bullet = getAnimationProcessor().getBone("bullet");
//
// Player player = Minecraft.getInstance().player;
// if (player == null) return;
// ItemStack stack = player.getMainHandItem();
// if (!(stack.getItem() instanceof GunItem)) return;
//
// float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
// double zt = ClientEventHandler.zoomTime;
// double zp = ClientEventHandler.zoomPos;
// double zpz = ClientEventHandler.zoomPosZ;
// double fpz = ClientEventHandler.firePosZ * 13 * times;
// double fp = ClientEventHandler.firePos;
// double fr = ClientEventHandler.fireRot;
//
// gun.setPosX(1.23f * (float) zp);
// gun.setPosY(1.43f * (float) zp - (float) (0.2f * zpz));
// gun.setPosZ(7f * (float) zp + (float) (0.3f * zpz));
// gun.setScaleZ(1f - (0.55f * (float) zp));
//
// GeoBone body = getAnimationProcessor().getBone("gun");
//
// fireRotY = (float) Mth.lerp(0.3f * times, fireRotY, 0.6f * ClientEventHandler.recoilHorizon * fpz);
// fireRotZ = (float) Mth.lerp(2f * times, fireRotZ, (0.4f + 0.5 * fpz) * ClientEventHandler.recoilHorizon);
//
// body.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread)));
// body.setPosY((float) (0.15f * fp + 0.18f * fr));
// body.setPosZ((float) (1.935 * fp + 0.16f * fr + 0.925 * fpz));
// body.setRotX((float) (0.08f * fp + 0.1f * fr + 0.35f * fpz));
// body.setRotY(fireRotY);
// body.setRotZ(fireRotZ);
//
// body.setPosX((float) (body.getPosX() * (1 - 0.4 * zt)));
// body.setPosY((float) (body.getPosY() * (-1 + 0.5 * zt)));
// body.setPosZ((float) (body.getPosZ() * (1 - 0.3 * zt)));
// body.setRotX((float) (body.getRotX() * (1 - 0.8 * zt)));
// body.setRotY((float) (body.getRotY() * (1 - 0.7 * zt)));
// body.setRotZ((float) (body.getRotZ() * (1 - 0.65 * zt)));
//
// CrossHairOverlay.gunRot = body.getRotZ();
//
// slide.setPosZ(1.5f * (float) fp);
//
// ClientEventHandler.gunRootMove(getAnimationProcessor());
//
// GeoBone camera = getAnimationProcessor().getBone("camera");
// GeoBone main = getAnimationProcessor().getBone("0");
//
// float numR = (float) (1 - 0.12 * zt);
// float numP = (float) (1 - 0.68 * zt);
//
// var data = GunData.from(stack);
//
// if (data.reload.time() > 0) {
// main.setRotX(numR * main.getRotX());
// main.setRotY(numR * main.getRotY());
// main.setRotZ(numR * main.getRotZ());
// main.setPosX(numP * main.getPosX());
// main.setPosY(numP * main.getPosY());
// main.setPosZ(numP * main.getPosZ());
// camera.setRotX(numR * camera.getRotX());
// camera.setRotY(numR * camera.getRotY());
// camera.setRotZ(numR * camera.getRotZ());
// }
//
// ClientEventHandler.handleReloadShake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ());
// AnimationHelper.handleShellsAnimation(getAnimationProcessor(), 0.7f, 1f);
//
// GeoBone shell = getAnimationProcessor().getBone("shell");
// GeoBone barrel = getAnimationProcessor().getBone("guan");
// if (data.holdOpen.get()) {
// slide.setPosZ(1.5f);
// barrel.setRotX(4 * Mth.DEG_TO_RAD);
// bullet.setScaleX(0);
// bullet.setScaleY(0);
// bullet.setScaleZ(0);
//
// shell.setScaleX(0);
// shell.setScaleY(0);
// shell.setScaleZ(0);
// } else {
// barrel.setRotX(0);
// bullet.setScaleX(1);
// bullet.setScaleY(1);
// bullet.setScaleZ(1);
//
// shell.setScaleX(1);
// shell.setScaleY(1);
// shell.setScaleZ(1);
// }
}
}

View file

@ -1,19 +1,9 @@
package com.atsuishio.superbwarfare.client.model.item;
import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.client.AnimationHelper;
import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay;
import com.atsuishio.superbwarfare.data.gun.GunData;
import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.handgun.Glock17Item;
import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import software.bernie.geckolib.animation.AnimationState;
import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.model.GeoModel;
public class Glock17ItemModel extends GeoModel<Glock17Item> {
@ -23,112 +13,113 @@ public class Glock17ItemModel extends GeoModel<Glock17Item> {
@Override
public ResourceLocation getAnimationResource(Glock17Item animatable) {
return Mod.loc("animations/glock17.animation.json");
return Mod.loc("animations/aurelia_sceptre.animation.json");
}
@Override
public ResourceLocation getModelResource(Glock17Item animatable) {
return Mod.loc("geo/glock17.geo.json");
return Mod.loc("geo/aurelia_sceptre.geo.json");
}
@Override
public ResourceLocation getTextureResource(Glock17Item animatable) {
return Mod.loc("textures/item/glock17.png");
return Mod.loc("textures/item/aurelia_sceptre.png");
}
@Override
public void setCustomAnimations(Glock17Item animatable, long instanceId, AnimationState animationState) {
GeoBone gun = getAnimationProcessor().getBone("bone");
GeoBone slide = getAnimationProcessor().getBone("huatao");
GeoBone bullet = getAnimationProcessor().getBone("bullet");
Player player = Minecraft.getInstance().player;
if (player == null) return;
ItemStack stack = player.getMainHandItem();
if (!(stack.getItem() instanceof GunItem)) return;
float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
double zt = ClientEventHandler.zoomTime;
double zp = ClientEventHandler.zoomPos;
double zpz = ClientEventHandler.zoomPosZ;
double fpz = ClientEventHandler.firePosZ * 13 * times;
double fp = ClientEventHandler.firePos;
double fr = ClientEventHandler.fireRot;
gun.setPosX(1.23f * (float) zp);
gun.setPosY(1.43f * (float) zp - (float) (0.2f * zpz));
gun.setPosZ(7f * (float) zp + (float) (0.3f * zpz));
gun.setScaleZ(1f - (0.55f * (float) zp));
GeoBone body = getAnimationProcessor().getBone("gun");
fireRotY = (float) Mth.lerp(0.3f * times, fireRotY, 0.6f * ClientEventHandler.recoilHorizon * fpz);
fireRotZ = (float) Mth.lerp(2f * times, fireRotZ, (0.4f + 0.5 * fpz) * ClientEventHandler.recoilHorizon);
body.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread)));
body.setPosY((float) (0.15f * fp + 0.18f * fr));
body.setPosZ((float) (1.935 * fp + 0.16f * fr + 0.925 * fpz));
body.setRotX((float) (0.08f * fp + 0.1f * fr + 0.35f * fpz));
body.setRotY(fireRotY);
body.setRotZ(fireRotZ);
body.setPosX((float) (body.getPosX() * (1 - 0.4 * zt)));
body.setPosY((float) (body.getPosY() * (-1 + 0.5 * zt)));
body.setPosZ((float) (body.getPosZ() * (1 - 0.3 * zt)));
body.setRotX((float) (body.getRotX() * (1 - 0.8 * zt)));
body.setRotY((float) (body.getRotY() * (1 - 0.7 * zt)));
body.setRotZ((float) (body.getRotZ() * (1 - 0.65 * zt)));
CrossHairOverlay.gunRot = body.getRotZ();
slide.setPosZ(1.5f * (float) fp);
ClientEventHandler.gunRootMove(getAnimationProcessor());
GeoBone camera = getAnimationProcessor().getBone("camera");
GeoBone main = getAnimationProcessor().getBone("0");
float numR = (float) (1 - 0.12 * zt);
float numP = (float) (1 - 0.68 * zt);
var data = GunData.from(stack);
if (data.reload.time() > 0) {
main.setRotX(numR * main.getRotX());
main.setRotY(numR * main.getRotY());
main.setRotZ(numR * main.getRotZ());
main.setPosX(numP * main.getPosX());
main.setPosY(numP * main.getPosY());
main.setPosZ(numP * main.getPosZ());
camera.setRotX(numR * camera.getRotX());
camera.setRotY(numR * camera.getRotY());
camera.setRotZ(numR * camera.getRotZ());
}
ClientEventHandler.handleReloadShake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ());
AnimationHelper.handleShellsAnimation(getAnimationProcessor(), 0.7f, 1f);
GeoBone shell = getAnimationProcessor().getBone("shell");
GeoBone barrel = getAnimationProcessor().getBone("guan");
if (data.holdOpen.get()) {
slide.setPosZ(1.5f);
barrel.setRotX(4 * Mth.DEG_TO_RAD);
bullet.setScaleX(0);
bullet.setScaleY(0);
bullet.setScaleZ(0);
shell.setScaleX(0);
shell.setScaleY(0);
shell.setScaleZ(0);
} else {
barrel.setRotX(0);
bullet.setScaleX(1);
bullet.setScaleY(1);
bullet.setScaleZ(1);
shell.setScaleX(1);
shell.setScaleY(1);
shell.setScaleZ(1);
}
// TODO 动画
// GeoBone gun = getAnimationProcessor().getBone("bone");
// GeoBone slide = getAnimationProcessor().getBone("huatao");
// GeoBone bullet = getAnimationProcessor().getBone("bullet");
//
// Player player = Minecraft.getInstance().player;
// if (player == null) return;
// ItemStack stack = player.getMainHandItem();
// if (!(stack.getItem() instanceof GunItem)) return;
//
// float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
// double zt = ClientEventHandler.zoomTime;
// double zp = ClientEventHandler.zoomPos;
// double zpz = ClientEventHandler.zoomPosZ;
// double fpz = ClientEventHandler.firePosZ * 13 * times;
// double fp = ClientEventHandler.firePos;
// double fr = ClientEventHandler.fireRot;
//
// gun.setPosX(1.23f * (float) zp);
// gun.setPosY(1.43f * (float) zp - (float) (0.2f * zpz));
// gun.setPosZ(7f * (float) zp + (float) (0.3f * zpz));
// gun.setScaleZ(1f - (0.55f * (float) zp));
//
// GeoBone body = getAnimationProcessor().getBone("gun");
//
// fireRotY = (float) Mth.lerp(0.3f * times, fireRotY, 0.6f * ClientEventHandler.recoilHorizon * fpz);
// fireRotZ = (float) Mth.lerp(2f * times, fireRotZ, (0.4f + 0.5 * fpz) * ClientEventHandler.recoilHorizon);
//
// body.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread)));
// body.setPosY((float) (0.15f * fp + 0.18f * fr));
// body.setPosZ((float) (1.935 * fp + 0.16f * fr + 0.925 * fpz));
// body.setRotX((float) (0.08f * fp + 0.1f * fr + 0.35f * fpz));
// body.setRotY(fireRotY);
// body.setRotZ(fireRotZ);
//
// body.setPosX((float) (body.getPosX() * (1 - 0.4 * zt)));
// body.setPosY((float) (body.getPosY() * (-1 + 0.5 * zt)));
// body.setPosZ((float) (body.getPosZ() * (1 - 0.3 * zt)));
// body.setRotX((float) (body.getRotX() * (1 - 0.8 * zt)));
// body.setRotY((float) (body.getRotY() * (1 - 0.7 * zt)));
// body.setRotZ((float) (body.getRotZ() * (1 - 0.65 * zt)));
//
// CrossHairOverlay.gunRot = body.getRotZ();
//
// slide.setPosZ(1.5f * (float) fp);
//
// ClientEventHandler.gunRootMove(getAnimationProcessor());
//
// GeoBone camera = getAnimationProcessor().getBone("camera");
// GeoBone main = getAnimationProcessor().getBone("0");
//
// float numR = (float) (1 - 0.12 * zt);
// float numP = (float) (1 - 0.68 * zt);
//
// var data = GunData.from(stack);
//
// if (data.reload.time() > 0) {
// main.setRotX(numR * main.getRotX());
// main.setRotY(numR * main.getRotY());
// main.setRotZ(numR * main.getRotZ());
// main.setPosX(numP * main.getPosX());
// main.setPosY(numP * main.getPosY());
// main.setPosZ(numP * main.getPosZ());
// camera.setRotX(numR * camera.getRotX());
// camera.setRotY(numR * camera.getRotY());
// camera.setRotZ(numR * camera.getRotZ());
// }
//
// ClientEventHandler.handleReloadShake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ());
// AnimationHelper.handleShellsAnimation(getAnimationProcessor(), 0.7f, 1f);
//
// GeoBone shell = getAnimationProcessor().getBone("shell");
// GeoBone barrel = getAnimationProcessor().getBone("guan");
// if (data.holdOpen.get()) {
// slide.setPosZ(1.5f);
// barrel.setRotX(4 * Mth.DEG_TO_RAD);
// bullet.setScaleX(0);
// bullet.setScaleY(0);
// bullet.setScaleZ(0);
//
// shell.setScaleX(0);
// shell.setScaleY(0);
// shell.setScaleZ(0);
// } else {
// barrel.setRotX(0);
// bullet.setScaleX(1);
// bullet.setScaleY(1);
// bullet.setScaleZ(1);
//
// shell.setScaleX(1);
// shell.setScaleY(1);
// shell.setScaleZ(1);
// }
}
}

View file

@ -0,0 +1,47 @@
package com.atsuishio.superbwarfare.client.renderer.gun;
import com.atsuishio.superbwarfare.client.AnimationHelper;
import com.atsuishio.superbwarfare.client.model.item.AureliaSceptreModel;
import com.atsuishio.superbwarfare.client.renderer.CustomGunRenderer;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.handgun.AureliaSceptre;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.world.item.ItemStack;
import software.bernie.geckolib.cache.object.GeoBone;
public class AureliaSceptreRenderer extends CustomGunRenderer<AureliaSceptre> {
public AureliaSceptreRenderer() {
super(new AureliaSceptreModel());
}
@Override
public void renderRecursively(PoseStack stack, AureliaSceptre animatable, GeoBone bone, RenderType type, MultiBufferSource buffer, VertexConsumer bufferIn, boolean isReRender, float partialTick, int packedLightIn, int packedOverlayIn, int color) {
Minecraft mc = Minecraft.getInstance();
String name = bone.getName();
boolean renderingArms = false;
if (name.equals("Lefthand") || name.equals("Righthand")) {
bone.setHidden(true);
renderingArms = true;
} else {
bone.setHidden(false);
}
var player = mc.player;
if (player == null) return;
ItemStack itemStack = player.getMainHandItem();
if (!(itemStack.getItem() instanceof GunItem)) return;
// TODO 准心
AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 0.3022, 0.3);
if (renderingArms) {
AnimationHelper.renderArms(player, this.transformType, stack, name, bone, this.currentBuffer, type, packedLightIn, false);
}
super.renderRecursively(stack, animatable, bone, type, buffer, bufferIn, isReRender, partialTick, packedLightIn, packedOverlayIn, color);
}
}

View file

@ -75,11 +75,18 @@ public class ModItemTagProvider extends ItemTagsProvider {
this.tag(cTag("plates")).addTags(cTag("plates/copper"));
this.tag(cTag("plates/copper")).add(ModItems.COPPER_PLATE.get());
// TODO 清理枪械Tag
ModItems.GUNS.getEntries().forEach(registryObject -> this.tag(ModTags.Items.GUN).add(registryObject.get()));
this.tag(ModTags.Items.SMG).add(ModItems.VECTOR.get());
this.tag(ModTags.Items.HANDGUN).add(ModItems.TRACHELIUM.get(), ModItems.GLOCK_17.get(), ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.MP_443.get());
this.tag(ModTags.Items.HANDGUN).add(ModItems.TRACHELIUM.get(),
ModItems.GLOCK_17.get(),
ModItems.GLOCK_18.get(),
ModItems.M_1911.get(),
ModItems.MP_443.get(),
ModItems.AURELIA_SCEPTRE.get()
);
this.tag(ModTags.Items.RIFLE).add(ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.SKS.get(),
ModItems.MK_14.get(), ModItems.MARLIN.get(), ModItems.AK_47.get(), ModItems.AK_12.get(), ModItems.QBZ_95.get());
@ -97,7 +104,7 @@ public class ModItemTagProvider extends ItemTagsProvider {
ModItems.HOMEMADE_SHOTGUN.get(), ModItems.AK_47.get(), ModItems.AK_12.get(), ModItems.SVD.get(), ModItems.M_60.get(), ModItems.MK_14.get(), ModItems.VECTOR.get(),
ModItems.SKS.get(), ModItems.RPK.get(), ModItems.HK_416.get(), ModItems.AA_12.get(), ModItems.M_4.get(), ModItems.DEVOTION.get(), ModItems.TRACHELIUM.get(), ModItems.M_79.get(),
ModItems.HUNTING_RIFLE.get(), ModItems.NTW_20.get(), ModItems.M_98B.get(), ModItems.SENTINEL.get(), ModItems.M_870.get(), ModItems.MARLIN.get(), ModItems.GLOCK_17.get(), ModItems.RPG.get(),
ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.QBZ_95.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get(), ModItems.MP_443.get(), ModItems.INSIDIOUS.get(), ModItems.SECONDARY_CATACLYSM.get(),
ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.AURELIA_SCEPTRE.get(), ModItems.QBZ_95.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get(), ModItems.MP_443.get(), ModItems.INSIDIOUS.get(), ModItems.SECONDARY_CATACLYSM.get(),
ModItems.TASER.get(), ModItems.MINIGUN.get());
this.tag(ModTags.Items.LAUNCHER).add(ModItems.RPG.get(), ModItems.JAVELIN.get())

View file

@ -55,6 +55,7 @@ public class ModItems {
public static final DeferredHolder<Item, Glock18Item> GLOCK_18 = GUNS.register("glock_18", Glock18Item::new);
public static final DeferredHolder<Item, Mp443Item> MP_443 = GUNS.register("mp_443", Mp443Item::new);
public static final DeferredHolder<Item, M1911Item> M_1911 = GUNS.register("m_1911", M1911Item::new);
public static final DeferredHolder<Item, AureliaSceptre> AURELIA_SCEPTRE = GUNS.register("aurelia_sceptre", AureliaSceptre::new);
public static final DeferredHolder<Item, HomemadeShotgunItem> HOMEMADE_SHOTGUN = GUNS.register("homemade_shotgun", HomemadeShotgunItem::new);
public static final DeferredHolder<Item, Trachelium> TRACHELIUM = GUNS.register("trachelium", Trachelium::new);
public static final DeferredHolder<Item, VectorItem> VECTOR = GUNS.register("vector", VectorItem::new);

View file

@ -0,0 +1,111 @@
package com.atsuishio.superbwarfare.item.gun.handgun;
import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.client.renderer.gun.AureliaSceptreRenderer;
import com.atsuishio.superbwarfare.data.gun.GunData;
import com.atsuishio.superbwarfare.init.ModEnumExtensions;
import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.animation.*;
import software.bernie.geckolib.renderer.GeoItemRenderer;
import software.bernie.geckolib.util.GeckoLibUtil;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Supplier;
public class AureliaSceptre extends GunItem implements GeoItem {
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public AureliaSceptre() {
super(new Properties().stacksTo(1).rarity(ModEnumExtensions.getLegendary()));
}
@Override
public Supplier<GeoItemRenderer<? extends Item>> getRenderer() {
return AureliaSceptreRenderer::new;
}
private PlayState fireAnimPredicate(AnimationState<AureliaSceptre> event) {
LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP;
ItemStack stack = player.getMainHandItem();
if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP;
// TODO 装填动画
// if (GunData.from(stack).reload.empty()) {
// return event.setAndContinue(RawAnimation.begin().thenPlay("animation.aurelia_sceptre.reload_empty"));
// }
//
// if (GunData.from(stack).reload.normal()) {
// return event.setAndContinue(RawAnimation.begin().thenPlay("animation.aurelia_sceptre.reload_normal"));
// }
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.aurelia_sceptre.idle"));
}
private PlayState idlePredicate(AnimationState<AureliaSceptre> event) {
LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP;
ItemStack stack = player.getMainHandItem();
if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP;
// TODO 冲刺动画
// if (player.isSprinting() && player.onGround()
// && ClientEventHandler.cantSprint == 0
// && !(GunData.from(stack).reload.normal() || GunData.from(stack).reload.empty()) && ClientEventHandler.drawTime < 0.01) {
// if (ClientEventHandler.tacticalSprint) {
// return event.setAndContinue(RawAnimation.begin().thenLoop("animation.aurelia_sceptre.run_fast"));
// } else {
// return event.setAndContinue(RawAnimation.begin().thenLoop("animation.aurelia_sceptre.run"));
// }
// }
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.aurelia_sceptre.idle"));
}
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
var fireAnimController = new AnimationController<>(this, "fireAnimController", 1, this::fireAnimPredicate);
data.add(fireAnimController);
var idleController = new AnimationController<>(this, "idleController", 2, this::idlePredicate);
data.add(idleController);
}
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return this.cache;
}
@Override
public Set<SoundEvent> getReloadSound() {
// TODO 音效
return Set.of(ModSounds.GLOCK_17_RELOAD_EMPTY.get(), ModSounds.GLOCK_17_RELOAD_NORMAL.get());
}
@Override
public ResourceLocation getGunIcon() {
// TODO 图标
return Mod.loc("textures/gun_icon/aurelia_sceptre_icon.png");
}
@Override
public String getGunDisplayName() {
return "AURELIA SCEPTRE";
}
@Override
public void addReloadTimeBehavior(Map<Integer, Consumer<GunData>> behaviors) {
super.addReloadTimeBehavior(behaviors);
}
}

View file

@ -0,0 +1,17 @@
{
"format_version": "1.8.0",
"animations": {
"animation.aurelia_sceptre.idle": {
"loop": true,
"bones": {
"group": {
"rotation": [
90,
0,
0
]
}
}
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -43,6 +43,7 @@
"item.superbwarfare.glock_18": "GLOCK-18",
"item.superbwarfare.m_1911": "M1911A1",
"item.superbwarfare.mp_443": "MP-443",
"item.superbwarfare.aurelia_sceptre": "Aurelia Sceptre",
"item.superbwarfare.qbz_95": "QBZ-95-1",
"item.superbwarfare.k_98": "KAR-98K",
"item.superbwarfare.mosin_nagant": "Mosin Nagant",

View file

@ -43,6 +43,7 @@
"item.superbwarfare.glock_18": "格洛克18手枪",
"item.superbwarfare.m_1911": "M1911手枪",
"item.superbwarfare.mp_443": "MP-443手枪",
"item.superbwarfare.aurelia_sceptre": "海月权杖",
"item.superbwarfare.qbz_95": "95-1式自动步枪",
"item.superbwarfare.k_98": "KAR-98K",
"item.superbwarfare.mosin_nagant": "莫辛纳甘",

View file

@ -0,0 +1,27 @@
{
"loader": "neoforge:separate_transforms",
"gui_light": "front",
"base": {
"parent": "superbwarfare:item/aurelia_sceptre_base"
},
"perspectives": {
"gui": {
"parent": "superbwarfare:item/aurelia_sceptre_icon"
},
"thirdperson_righthand": {
"parent": "superbwarfare:item/aurelia_sceptre_3d"
},
"thirdperson_lefthand": {
"parent": "superbwarfare:item/aurelia_sceptre_3d"
},
"ground": {
"parent": "superbwarfare:item/aurelia_sceptre_3d"
},
"fixed": {
"parent": "superbwarfare:item/aurelia_sceptre_3d"
},
"head": {
"parent": "superbwarfare:item/aurelia_sceptre_3d"
}
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "superbwarfare:displaysettings/aurelia_sceptre.item",
"textures": {
"layer0": "superbwarfare:item/aurelia_sceptre"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,39 @@
{
"Spread": 0.5,
"RecoilX": 0,
"RecoilY": 0,
"Damage": 26,
"Headshot": 1.5,
"Velocity": 14,
"Magazine": 4,
"Weight": 1,
"NormalReloadTime": 20,
"EmptyReloadTime": 20,
"BypassesArmor": 0.44,
"SoundRadius": 2,
"RPM": 1100,
"BurstAmount": 4,
"AvailableFireModes": [
"Burst"
],
"DefaultFireMode": "Burst",
"AmmoType": "@HandgunAmmo",
"AvailablePerks": [
"@Ammo",
"superbwarfare:heal_clip",
"superbwarfare:field_doctor",
"superbwarfare:fourth_times_charm",
"superbwarfare:subsistence",
"superbwarfare:powerful_attraction",
"superbwarfare:intelligent_chip",
"superbwarfare:kill_clip",
"superbwarfare:gutshot_straight",
"superbwarfare:monster_hunter",
"superbwarfare:vorpal_weapon",
"superbwarfare:firefly",
"!superbwarfare:micro_missile",
"!superbwarfare:longer_wire",
"!superbwarfare:butterfly_bullet",
"!superbwarfare:cupid_arrow"
]
}