调整武器数据,添加霰弹专用HUD

This commit is contained in:
Atsuihsio 2024-09-23 18:52:19 +08:00
parent 971828241f
commit f941cdc5f1
30 changed files with 206 additions and 104 deletions

View file

@ -35,6 +35,9 @@ public class M98bItemModel extends GeoModel<M98bItem> {
public void setCustomAnimations(M98bItem animatable, long instanceId, AnimationState animationState) { public void setCustomAnimations(M98bItem animatable, long instanceId, AnimationState animationState) {
CoreGeoBone gun = getAnimationProcessor().getBone("bone"); CoreGeoBone gun = getAnimationProcessor().getBone("bone");
CoreGeoBone shen = getAnimationProcessor().getBone("shen"); CoreGeoBone shen = getAnimationProcessor().getBone("shen");
CoreGeoBone camera = getAnimationProcessor().getBone("camera");
CoreGeoBone main = getAnimationProcessor().getBone("0");
CoreGeoBone scope = getAnimationProcessor().getBone("scope2");
Player player = Minecraft.getInstance().player; Player player = Minecraft.getInstance().player;
if (player == null) return; if (player == null) return;
@ -68,14 +71,12 @@ public class M98bItemModel extends GeoModel<M98bItem> {
shen.setRotX(0.15f * (float) (0.18f * fp + fr)); shen.setRotX(0.15f * (float) (0.18f * fp + fr));
shen.setRotZ(-0.01f * (float) (fp + 1.3 * fr)); shen.setRotZ(-0.01f * (float) (fp + 1.3 * fr));
} }
scope.setPosZ(75.2f * (float) (fp + 0.54f * fr));
shen.setPosX(0.5f * (float)fr * (float)((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).recoilHorizon * fp)); shen.setPosX(0.5f * (float)fr * (float)((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).recoilHorizon * fp));
gun.setPosX(2.245f * (float) zp); gun.setPosX(2.245f * (float) zp);
gun.setPosY(0.3f * (float) zp - (float) (0.2f * zpz)); gun.setPosY(0.3f * (float) zp - (float) (0.2f * zpz));
gun.setPosZ(4.2f * (float) zp + (float) (0.3f * zpz)); gun.setPosZ(4.2f * (float) zp + (float) (0.3f * zpz));
gun.setRotZ((float) (0.02f * zpz)); gun.setRotZ((float) (0.02f * zpz));
stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 1.8)); stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 1.8));
@ -99,10 +100,6 @@ public class M98bItemModel extends GeoModel<M98bItem> {
move.setRotY(Mth.DEG_TO_RAD * (float) turnRotY); move.setRotY(Mth.DEG_TO_RAD * (float) turnRotY);
move.setRotZ(2.7f * (float) mph + Mth.DEG_TO_RAD * (float) turnRotZ); move.setRotZ(2.7f * (float) mph + Mth.DEG_TO_RAD * (float) turnRotZ);
CoreGeoBone camera = getAnimationProcessor().getBone("camera");
CoreGeoBone main = getAnimationProcessor().getBone("0");
CoreGeoBone scope = getAnimationProcessor().getBone("scope2");
float numR = (float) (1 - 0.88 * zt); float numR = (float) (1 - 0.88 * zt);
float numP = (float) (1 - 0.68 * zt); float numP = (float) (1 - 0.68 * zt);

View file

@ -91,7 +91,6 @@ public class CannonHudOverlay {
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/cannon/indicator.png"), k + (float) Math.tan(Mth.clamp(Mth.DEG_TO_RAD * diffY, -1.5, 1.5)) * 5 * i / 1.4f * (90 - Math.abs(player.getXRot())) / 90, l + (float) Math.tan(Mth.clamp(Mth.DEG_TO_RAD * diffX, -1.5, 1.5)) * 5 * j / 1.4f, 0, 0.0F, i, j, i, j); preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/cannon/indicator.png"), k + (float) Math.tan(Mth.clamp(Mth.DEG_TO_RAD * diffY, -1.5, 1.5)) * 5 * i / 1.4f * (90 - Math.abs(player.getXRot())) / 90, l + (float) Math.tan(Mth.clamp(Mth.DEG_TO_RAD * diffX, -1.5, 1.5)) * 5 * j / 1.4f, 0, 0.0F, i, j, i, j);
} else { } else {
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/cannon/cannon_crosshair_notzoom.png"), k, l, 0, 0.0F, i, j, i, j); preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/cannon/cannon_crosshair_notzoom.png"), k, l, 0, 0.0F, i, j, i, j);
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/cannon/indicator.png"), k + (float) Math.tan(Mth.clamp(Mth.DEG_TO_RAD * diffY, -1.5, 1.5)) * i / 1.4f * (90 - Math.abs(player.getXRot())) / 90, l + (float) Math.tan(Mth.clamp(Mth.DEG_TO_RAD * diffX, -1.5, 1.5)) * j / 1.4f, 0, 0.0F, i, j, i, j);
} }
} }
RenderSystem.depthMask(true); RenderSystem.depthMask(true);

View file

@ -12,6 +12,7 @@ import net.minecraft.client.gui.Font;
import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
@ -28,6 +29,7 @@ public class CrossHairOverlay {
public static int HIT_INDICATOR = 0; public static int HIT_INDICATOR = 0;
public static int HEAD_INDICATOR = 0; public static int HEAD_INDICATOR = 0;
public static int KILL_INDICATOR = 0; public static int KILL_INDICATOR = 0;
private static float scopeScale = 1f;
@SubscribeEvent(priority = EventPriority.NORMAL) @SubscribeEvent(priority = EventPriority.NORMAL)
public static void eventHandler(RenderGuiEvent.Pre event) { public static void eventHandler(RenderGuiEvent.Pre event) {
@ -39,6 +41,9 @@ public class CrossHairOverlay {
} }
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
double spread = ClientEventHandler.gunSpread + 3 * ClientEventHandler.firePos; double spread = ClientEventHandler.gunSpread + 3 * ClientEventHandler.firePos;
float deltaFrame = Minecraft.getInstance().getDeltaFrameTime();
float moveX = (float) (-6 * ClientEventHandler.turnRot[1] - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosX);
float moveY = (float) (-6 * ClientEventHandler.turnRot[0] + 6 * (float)ClientEventHandler.velocityY - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosY - 2 * ClientEventHandler.firePos);
RenderSystem.disableDepthTest(); RenderSystem.disableDepthTest();
RenderSystem.depthMask(false); RenderSystem.depthMask(false);
@ -47,16 +52,42 @@ public class CrossHairOverlay {
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);
float moveX = (float) (-6 * ClientEventHandler.turnRot[1] - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosX); scopeScale = (float) Mth.lerp(0.5F * deltaFrame, scopeScale, 1 + 1.5f * spread);
float moveY = (float) (-6 * ClientEventHandler.turnRot[0] + 6 * (float)ClientEventHandler.velocityY - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosY - 2 * ClientEventHandler.firePos); float f = (float)Math.min(w, h);
float f1 = Math.min((float)w / f, (float)h / f) * 0.012f * scopeScale;
float i = Mth.floor(f * f1);
float j = Mth.floor(f * f1);
float k = ((w - i) / 2) + moveX;
float l = ((h - j) / 2) + moveY;
if (shouldRenderCrossHair(player) || stack.is(ModItems.MINIGUN.get()) || (stack.is(ModItems.BOCEK.get()) && stack.getOrCreateTag().getBoolean("HoloHidden"))) { if (shouldRenderCrossHair(player) || stack.is(ModItems.MINIGUN.get())) {
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/point.png"), w / 2f - 7.5f + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/point.png"), w / 2f - 7.5f + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
if (!player.isSprinting() || player.getPersistentData().getDouble("noRun") > 0) { if (!player.isSprinting() || player.getPersistentData().getDouble("noRun") > 0) {
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 13.5f - 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); if (stack.is(ModTags.Items.SHOTGUN)) {
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 2.5f + 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/shotgun_hud.png"), k, l, 0, 0.0F, i, j, i, j);
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 2.5f + 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16); } else {
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 13.5f - 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16); preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 13.5f - 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 2.5f + 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 2.5f + 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16);
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 13.5f - 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16);
}
}
}
if (stack.is(ModItems.BOCEK.get())) {
if (stack.getOrCreateTag().getBoolean("HoloHidden")) {
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/point.png"), w / 2f - 7.5f + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
if (!player.isSprinting() || player.getPersistentData().getDouble("noRun") > 0 || ClientEventHandler.pullPos > 0) {
if (ClientEventHandler.zoomTime < 0.1) {
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/shotgun_hud.png"), k, l, 0, 0.0F, i, j, i, j);
} else {
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 13.5f - 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 2.5f + 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 2.5f + 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16);
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 13.5f - 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16);
}
}
} }
} }

View file

@ -411,7 +411,7 @@ public class ClientEventHandler {
fireSpread += 0.2; fireSpread += 0.2;
} }
fireSpread = Mth.clamp(fireSpread - 0.1 * (Math.pow(fireSpread, 2) * times), 0, 100); fireSpread = Mth.clamp(fireSpread - 0.6 * (Math.pow(fireSpread, 2) * times), 0, 100);
firePosZ = Mth.clamp(firePosZ - 0.02 * times, 0, 0.6); firePosZ = Mth.clamp(firePosZ - 0.02 * times, 0, 0.6);
if (0 < firePosTimer) { if (0 < firePosTimer) {
@ -527,7 +527,13 @@ public class ClientEventHandler {
return; return;
} }
double p = zoomPos; double p;
if (stack.is(ModItems.BOCEK.get())) {
p = (pullPos + 0.25) * zoomTime;
} else {
p = zoomPos;
}
double zoom = stack.getOrCreateTag().getDouble("zoom") + stack.getOrCreateTag().getDouble("custom_zoom"); double zoom = stack.getOrCreateTag().getDouble("zoom") + stack.getOrCreateTag().getDouble("custom_zoom");
event.setFOV(event.getFOV() / (1.0 + p * (zoom - 1)) * (1 - 0.4 * breathTime)); event.setFOV(event.getFOV() / (1.0 + p * (zoom - 1)) * (1 - 0.4 * breathTime));

View file

@ -256,7 +256,6 @@ public class GunEventHandler {
//启动换弹 //启动换弹
if (tag.getBoolean("start_reload")) { if (tag.getBoolean("start_reload")) {
MinecraftForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack)); MinecraftForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack));
if (stack.is(ModTags.Items.OPEN_BOLT)) { if (stack.is(ModTags.Items.OPEN_BOLT)) {
if (tag.getInt("ammo") == 0) { if (tag.getInt("ammo") == 0) {
tag.putInt("gun_reloading_time", (int) tag.getDouble("empty_reload_time") + 2); tag.putInt("gun_reloading_time", (int) tag.getDouble("empty_reload_time") + 2);
@ -272,6 +271,9 @@ public class GunEventHandler {
stack.getOrCreateTag().putBoolean("is_empty_reloading", true); stack.getOrCreateTag().putBoolean("is_empty_reloading", true);
playGunEmptyReloadSounds(player); playGunEmptyReloadSounds(player);
} }
if (stack.getItem() == ModItems.DEVOTION.get()) {
tag.putInt("customRpm", 0);
}
tag.putBoolean("start_reload", false); tag.putBoolean("start_reload", false);
} }

View file

@ -280,7 +280,7 @@ public class PlayerEventHandler {
* 判断玩家是否在奔跑 * 判断玩家是否在奔跑
*/ */
private static void handlePlayerSprint(Player player) { private static void handlePlayerSprint(Player player) {
if (player.getMainHandItem().getOrCreateTag().getInt("flash_time") > 0) { if (player.getMainHandItem().getOrCreateTag().getInt("flash_time") > 0 || player.getMainHandItem().getOrCreateTag().getInt("fire_animation") > 0) {
player.getPersistentData().putDouble("noRun", 20); player.getPersistentData().putDouble("noRun", 20);
} }
@ -383,8 +383,10 @@ public class PlayerEventHandler {
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
capability.bowPull = true; capability.bowPull = true;
capability.tacticalSprint = false;
capability.syncPlayerVariables(player); capability.syncPlayerVariables(player);
}); });
player.setSprinting(false);
} }
if (tag.getDouble("power") == 1) { if (tag.getDouble("power") == 1) {
if (!player.level().isClientSide() && player instanceof ServerPlayer serverPlayer) { if (!player.level().isClientSide() && player instanceof ServerPlayer serverPlayer) {
@ -401,6 +403,14 @@ public class PlayerEventHandler {
capability.syncPlayerVariables(player); capability.syncPlayerVariables(player);
}); });
} }
if (tag.getDouble("power") > 0) {
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
capability.tacticalSprint = false;
capability.syncPlayerVariables(player);
});
player.setSprinting(false);
}
} }
private static void handleGunRecoil(Player player) { private static void handleGunRecoil(Player player) {

View file

@ -75,17 +75,13 @@ public class M98bItem extends GunItem implements GeoItem, AnimatedItem {
transformType = type; transformType = type;
} }
private PlayState idlePredicate(AnimationState<M98bItem> event) { private PlayState fireAnimPredicate(AnimationState<M98bItem> event) {
LocalPlayer player = Minecraft.getInstance().player; LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP; if (player == null) return PlayState.STOP;
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;
if (this.animationProcedure.equals("empty")) { if (this.animationProcedure.equals("empty")) {
if (stack.getOrCreateTag().getInt("draw_time") < 16) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.draw"));
}
if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) { if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.shift")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.shift"));
} }
@ -102,7 +98,25 @@ public class M98bItem extends GunItem implements GeoItem, AnimatedItem {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.reload_normal")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.reload_normal"));
} }
if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0) { return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.idle"));
}
return PlayState.STOP;
}
private PlayState idlePredicate(AnimationState<M98bItem> event) {
LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP;
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
if (this.animationProcedure.equals("empty")) {
if (stack.getOrCreateTag().getInt("draw_time") < 16) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.draw"));
}
if (player.isSprinting() && player.onGround()
&& player.getPersistentData().getDouble("noRun") == 0
&& !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading"))) {
if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) { if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.run_fast")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.run_fast"));
} else { } else {
@ -115,25 +129,10 @@ public class M98bItem extends GunItem implements GeoItem, AnimatedItem {
return PlayState.STOP; return PlayState.STOP;
} }
private PlayState procedurePredicate(AnimationState<M98bItem> event) {
if (transformType != null && transformType.firstPerson()) {
if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) {
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure));
if (event.getController().getAnimationState() == AnimationController.State.STOPPED) {
this.animationProcedure = "empty";
event.getController().forceAnimationReset();
}
} else if (this.animationProcedure.equals("empty")) {
return PlayState.STOP;
}
}
return PlayState.CONTINUE;
}
@Override @Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) { public void registerControllers(AnimatableManager.ControllerRegistrar data) {
var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); var fireAnimController = new AnimationController<>(this, "fireAnimController", 1, this::fireAnimPredicate);
data.add(procedureController); data.add(fireAnimController);
var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate);
data.add(idleController); data.add(idleController);
} }

View file

@ -188,7 +188,7 @@ public class ShootMessage {
stack.getOrCreateTag().putBoolean("shoot", true); stack.getOrCreateTag().putBoolean("shoot", true);
for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) { for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) {
gunShoot(player, 2 * stack.getOrCreateTag().getDouble("spread")); gunShoot(player, spared);
} }
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {

View file

@ -40,6 +40,7 @@ public class TooltipTool {
addLevelTips(tooltip, stack); addLevelTips(tooltip, stack);
addBypassTips(tooltip, stack); addBypassTips(tooltip, stack);
addPerkTips(tooltip, stack); addPerkTips(tooltip, stack);
addRpmTips(tooltip, stack);
} }
public static void addShotgunTips(List<Component> tooltip, ItemStack stack, int count) { public static void addShotgunTips(List<Component> tooltip, ItemStack stack, int count) {
@ -55,6 +56,13 @@ public class TooltipTool {
addLevelTips(tooltip, stack); addLevelTips(tooltip, stack);
addBypassTips(tooltip, stack); addBypassTips(tooltip, stack);
addPerkTips(tooltip, stack); addPerkTips(tooltip, stack);
addRpmTips(tooltip, stack);
}
private static void addRpmTips(List<Component> tooltip, ItemStack stack) {
tooltip.add(Component.translatable("des.superbwarfare.tips.rpm").withStyle(ChatFormatting.GRAY)
.append(Component.literal("").withStyle(ChatFormatting.RESET))
.append(Component.literal(new DecimalFormat("##").format(ItemNBTTool.getDouble(stack, "rpm", 0) + ItemNBTTool.getDouble(stack, "customRpm", 0))).withStyle(ChatFormatting.GREEN)));
} }
private static void addLevelTips(List<Component> tooltip, ItemStack stack) { private static void addLevelTips(List<Component> tooltip, ItemStack stack) {
@ -186,6 +194,7 @@ public class TooltipTool {
addLevelTips(tooltip, stack); addLevelTips(tooltip, stack);
addBypassTips(tooltip, stack); addBypassTips(tooltip, stack);
addPerkTips(tooltip, stack); addPerkTips(tooltip, stack);
addRpmTips(tooltip, stack);
stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(
e -> tooltip.add(Component.literal(e.getEnergyStored() + " / " + e.getMaxEnergyStored() + " FE").withStyle(ChatFormatting.GRAY)) e -> tooltip.add(Component.literal(e.getEnergyStored() + " / " + e.getMaxEnergyStored() + " FE").withStyle(ChatFormatting.GRAY))
@ -202,7 +211,11 @@ public class TooltipTool {
.append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal("").withStyle(ChatFormatting.RESET))
.append(Component.literal(new DecimalFormat("##.#").format(damage)).withStyle(ChatFormatting.GREEN))); .append(Component.literal(new DecimalFormat("##.#").format(damage)).withStyle(ChatFormatting.GREEN)));
addLevelTips(tooltip, stack); int upgradePoint = Mth.floor(ItemNBTTool.getDouble(stack, "UpgradePoint", 0));
tooltip.add(Component.translatable("des.superbwarfare.tips.upgradepoint").withStyle(ChatFormatting.GRAY)
.append(Component.literal("").withStyle(ChatFormatting.RESET))
.append(Component.literal(String.valueOf(upgradePoint)).withStyle(ChatFormatting.GRAY).withStyle(ChatFormatting.BOLD)));
addPerkTips(tooltip, stack); addPerkTips(tooltip, stack);
stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(

View file

@ -243,61 +243,96 @@
}, },
"animation.m98b.shift": { "animation.m98b.shift": {
"loop": "hold_on_last_frame", "loop": "hold_on_last_frame",
"animation_length": 1, "animation_length": 1.1,
"override_previous_animation": true, "override_previous_animation": true,
"bones": { "bones": {
"0": { "0": {
"rotation": { "rotation": {
"0.0": { "0.0": {
"vector": [0, 0, 0]
},
"0.05": {
"vector": [-1, 0, -3],
"easing": "easeInOutSine"
},
"0.15": {
"vector": [-5.06695, -0.89397, 0.2229],
"easing": "easeInSine"
},
"0.3": {
"vector": [-4.64234, 4.23541, 7.63209],
"easing": "easeInOutSine"
},
"0.5": {
"vector": [-3.1436, -1.5688, -3.26245],
"easing": "easeInOutSine"
},
"0.6": {
"vector": [-0.70997, -1.32962, -4.26107],
"easing": "easeInOutSine"
},
"0.7": {
"vector": [0, 0, 0], "vector": [0, 0, 0],
"easing": "easeInOutSine" "easing": "easeInOutSine"
},
"0.2": {
"vector": [-0.2, 0, -1],
"easing": "easeInElastic"
},
"0.3": {
"vector": [-0.2584, -0.4688, 5.16075],
"easing": "easeInSine"
},
"0.35": {
"vector": [-0.1745, -0.1155, 4.6568],
"easing": "easeInElastic"
},
"0.45": {
"vector": [-0.6993, -0.252, -1.4861],
"easing": "easeInElastic"
},
"0.6": {
"vector": [-2.25, -1, 4.82]
},
"0.65": {
"vector": [-0.25, -0.5, 4.82]
},
"0.7": {
"vector": [0.53655, 1.56915, 2.11954]
},
"0.75": {
"vector": [0.9659, 0.52169, -2.4819],
"easing": "easeInOutSine"
},
"0.85": {
"vector": [0.7935, 0.19563, -2.80573]
},
"0.9": {
"vector": [0.49, 0, 0]
},
"1.0": {
"vector": [0, 0, 0]
} }
}, },
"position": { "position": {
"0.0": { "0.0": {
"vector": [0, 0, 0]
},
"0.1": {
"vector": [0, -0.1, -0.2],
"easing": "easeInOutSine"
},
"0.3": {
"vector": [0, 0, 1.7],
"easing": "easeInElastic"
},
"0.5": {
"vector": [-0.02, -0.1, -0.5],
"easing": "easeInElastic"
},
"0.6": {
"vector": [-0.03, 0.1, 0.3]
},
"0.7": {
"vector": [0, 0, 0], "vector": [0, 0, 0],
"easing": "easeInOutSine" "easing": "easeInOutSine"
},
"0.15": {
"vector": [0, 0, 0],
"easing": "linear"
},
"0.3": {
"vector": [-0.41, -0.23, 0.32]
},
"0.45": {
"vector": [-0.1, -0.5, 0.3],
"easing": "easeInElastic"
},
"0.55": {
"vector": [-0.1, -0.5, 0.6]
},
"0.6": {
"vector": [-0.3, -0.5, -0.6]
},
"0.65": {
"vector": [-0.3, -0.5, -0.6]
},
"0.7": {
"vector": [-0.1, -0.2, 0.1],
"easing": "easeInElastic"
},
"0.8": {
"vector": [0.2, -0.3, -0.1]
},
"0.85": {
"vector": [0.14, -0.05, 0.2],
"easing": "easeInSine"
},
"0.9": {
"vector": [0.04, 0.1, 0.24478]
},
"1.0": {
"vector": [0, 0, 0],
"easing": "easeOutSine"
} }
} }
}, },
@ -395,6 +430,12 @@
}, },
"0.6": { "0.6": {
"vector": [-15.7, -8.7, 13.8] "vector": [-15.7, -8.7, 13.8]
},
"0.65": {
"vector": [-3072.7, -8.7, 13.8]
},
"0.7": {
"vector": [0, 0, 0]
} }
} }
}, },

View file

@ -51,6 +51,7 @@
"des.superbwarfare.tips.bypass": "Armor Piercing: ", "des.superbwarfare.tips.bypass": "Armor Piercing: ",
"des.superbwarfare.tips.distance": "Drone Distance: ", "des.superbwarfare.tips.distance": "Drone Distance: ",
"des.superbwarfare.tips.upgradepoint": "Upgrade Point: ", "des.superbwarfare.tips.upgradepoint": "Upgrade Point: ",
"des.superbwarfare.tips.rpm": "Rpm: ",
"item.superbwarfare.vector_blueprint": "VECTOR Blueprint", "item.superbwarfare.vector_blueprint": "VECTOR Blueprint",
"item.superbwarfare.m_60_blueprint": "M60 Blueprint", "item.superbwarfare.m_60_blueprint": "M60 Blueprint",

View file

@ -51,6 +51,7 @@
"des.superbwarfare.tips.level": "等级: ", "des.superbwarfare.tips.level": "等级: ",
"des.superbwarfare.tips.bypass": "护甲穿透: ", "des.superbwarfare.tips.bypass": "护甲穿透: ",
"des.superbwarfare.tips.distance": "无人机距离你: ", "des.superbwarfare.tips.distance": "无人机距离你: ",
"des.superbwarfare.tips.rpm": "射速: ",
"item.superbwarfare.vector_blueprint": "短剑冲锋枪蓝图", "item.superbwarfare.vector_blueprint": "短剑冲锋枪蓝图",
"item.superbwarfare.m_60_blueprint": "M60通用机枪蓝图", "item.superbwarfare.m_60_blueprint": "M60通用机枪蓝图",

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View file

@ -19,5 +19,5 @@
"empty_reload_time": 85, "empty_reload_time": 85,
"BypassesArmor": 0.05, "BypassesArmor": 0.05,
"SoundRadius": 18, "SoundRadius": 18,
"rpm": 400 "rpm": 360
} }

View file

@ -6,7 +6,7 @@
"recoil_x": 0.005, "recoil_x": 0.005,
"recoil_y": 0.003, "recoil_y": 0.003,
"headshot": 2.5, "headshot": 2.5,
"damage": 24, "damage": 36,
"weight": 1, "weight": 1,
"BypassesArmor": 0.25 "BypassesArmor": 0.25
} }

View file

@ -5,7 +5,7 @@
"bipod": 1, "bipod": 1,
"recoil_x": 0.0018, "recoil_x": 0.0018,
"recoil_y": 0.01, "recoil_y": 0.01,
"damage": 7, "damage": 9.5,
"headshot": 2, "headshot": 2,
"velocity": 25, "velocity": 25,
"mag": 55, "mag": 55,

View file

@ -19,5 +19,5 @@
"empty_reload_time": 35, "empty_reload_time": 35,
"BypassesArmor": 0.15, "BypassesArmor": 0.15,
"SoundRadius": 10, "SoundRadius": 10,
"rpm": 600 "rpm": 400
} }

View file

@ -19,5 +19,5 @@
"empty_reload_time": 35, "empty_reload_time": 35,
"BypassesArmor": 0.15, "BypassesArmor": 0.15,
"SoundRadius": 16, "SoundRadius": 16,
"rpm": 1200 "rpm": 1300
} }

View file

@ -19,5 +19,5 @@
"empty_reload_time": 64, "empty_reload_time": 64,
"BypassesArmor": 0.25, "BypassesArmor": 0.25,
"SoundRadius": 14, "SoundRadius": 14,
"rpm": 800 "rpm": 900
} }

View file

@ -17,5 +17,6 @@
"burst_size": 1, "burst_size": 1,
"empty_reload_time": 64, "empty_reload_time": 64,
"BypassesArmor": 0.7, "BypassesArmor": 0.7,
"SoundRadius": 20 "SoundRadius": 20,
"rpm": 120
} }

View file

@ -23,5 +23,5 @@
"finish_time": 18, "finish_time": 18,
"BypassesArmor": 0.5, "BypassesArmor": 0.5,
"SoundRadius": 18, "SoundRadius": 18,
"rpm": 100 "rpm": 240
} }

View file

@ -18,5 +18,6 @@
"normal_reload_time": 30, "normal_reload_time": 30,
"empty_reload_time": 35, "empty_reload_time": 35,
"BypassesArmor": 0.2, "BypassesArmor": 0.2,
"SoundRadius": 10 "SoundRadius": 10,
"rpm": 400
} }

View file

@ -19,5 +19,5 @@
"empty_reload_time": 64, "empty_reload_time": 64,
"BypassesArmor": 0.25, "BypassesArmor": 0.25,
"SoundRadius": 14, "SoundRadius": 14,
"rpm": 800 "rpm": 850
} }

View file

@ -22,5 +22,5 @@
"empty_reload_time": 86, "empty_reload_time": 86,
"BypassesArmor": 0.6, "BypassesArmor": 0.6,
"SoundRadius": 18, "SoundRadius": 18,
"rpm": 90 "rpm": 240
} }

View file

@ -22,5 +22,5 @@
"empty_reload_time": 81, "empty_reload_time": 81,
"BypassesArmor": 0.4, "BypassesArmor": 0.4,
"SoundRadius": 16, "SoundRadius": 16,
"rpm": 600 "rpm": 700
} }

View file

@ -22,5 +22,5 @@
"finish_time": 18, "finish_time": 18,
"BypassesArmor": 0.54, "BypassesArmor": 0.54,
"SoundRadius": 18, "SoundRadius": 18,
"rpm": 90 "rpm": 240
} }

View file

@ -23,5 +23,5 @@
"empty_reload_time": 87, "empty_reload_time": 87,
"BypassesArmor": 1, "BypassesArmor": 1,
"SoundRadius": 22, "SoundRadius": 22,
"rpm": 40 "rpm": 180
} }

View file

@ -4,7 +4,7 @@
"spread": 3.7, "spread": 3.7,
"recoil_x": 0.0013, "recoil_x": 0.0013,
"recoil_y": 0.009, "recoil_y": 0.009,
"damage": 7.5, "damage": 8.25,
"headshot": 2, "headshot": 2,
"velocity": 27, "velocity": 27,
"mag": 30, "mag": 30,
@ -19,5 +19,5 @@
"empty_reload_time": 74, "empty_reload_time": 74,
"BypassesArmor": 0.28, "BypassesArmor": 0.28,
"SoundRadius": 13, "SoundRadius": 13,
"rpm": 750 "rpm": 650
} }

View file

@ -20,5 +20,5 @@
"empty_reload_time": 89, "empty_reload_time": 89,
"BypassesArmor": 0.8, "BypassesArmor": 0.8,
"SoundRadius": 20, "SoundRadius": 20,
"rpm": 90 "rpm": 240
} }

View file

@ -19,5 +19,5 @@
"empty_reload_time": 64, "empty_reload_time": 64,
"BypassesArmor": 0.15, "BypassesArmor": 0.15,
"SoundRadius": 4, "SoundRadius": 4,
"rpm": 1100 "rpm": 1200
} }