实现Perk相关功能

This commit is contained in:
Light_Quanta 2025-03-29 05:54:48 +08:00
parent 9439922828
commit 860ecc63ae
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
48 changed files with 1128 additions and 893 deletions

View file

@ -10,7 +10,6 @@ import com.atsuishio.superbwarfare.entity.vehicle.base.WeaponVehicleEntity;
import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.init.*; import com.atsuishio.superbwarfare.init.*;
import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.network.ModVariables;
import com.atsuishio.superbwarfare.network.message.send.DoubleJumpMessage; import com.atsuishio.superbwarfare.network.message.send.DoubleJumpMessage;
import com.atsuishio.superbwarfare.perk.PerkHelper; import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
@ -30,11 +29,11 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items; import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.client.settings.KeyConflictContext;
import net.neoforged.api.distmarker.Dist; import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.InputEvent; import net.neoforged.neoforge.client.event.InputEvent;
import net.neoforged.neoforge.client.settings.KeyConflictContext;
import net.neoforged.neoforge.network.PacketDistributor; import net.neoforged.neoforge.network.PacketDistributor;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
@ -202,9 +201,12 @@ public class ClickHandler {
if (key == Minecraft.getInstance().options.keyJump.getKey().getValue()) { if (key == Minecraft.getInstance().options.keyJump.getKey().getValue()) {
handleDoubleJump(player); handleDoubleJump(player);
} }
if (key == ModKeyMappings.CONFIG.getKey().getValue() && ModKeyMappings.CONFIG.getKeyModifier().isActive(KeyConflictContext.IN_GAME)) {
handleConfigScreen(player); // TODO do we need cloth config?
} // if (key == ModKeyMappings.CONFIG.getKey().getValue() && ModKeyMappings.CONFIG.getKeyModifier().isActive(KeyConflictContext.IN_GAME)) {
// handleConfigScreen(player);
// }
if (key == ModKeyMappings.RELOAD.getKey().getValue()) { if (key == ModKeyMappings.RELOAD.getKey().getValue()) {
PacketDistributor.sendToServer(new ReloadMessage(0)); PacketDistributor.sendToServer(new ReloadMessage(0));
} }
@ -222,7 +224,8 @@ public class ClickHandler {
PacketDistributor.sendToServer(new EditModeMessage(0)); PacketDistributor.sendToServer(new EditModeMessage(0));
} }
if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) { var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
if (cap != null && cap.edit) {
if (!(stack.getItem() instanceof GunItem gunItem)) return; if (!(stack.getItem() instanceof GunItem gunItem)) return;
if (ModKeyMappings.EDIT_GRIP.getKeyModifier().isActive(KeyConflictContext.IN_GAME)) { if (ModKeyMappings.EDIT_GRIP.getKeyModifier().isActive(KeyConflictContext.IN_GAME)) {
if (key == ModKeyMappings.EDIT_GRIP.getKey().getValue() && gunItem.hasCustomGrip(stack)) { if (key == ModKeyMappings.EDIT_GRIP.getKey().getValue() && gunItem.hasCustomGrip(stack)) {

View file

@ -1,5 +1,9 @@
package com.atsuishio.superbwarfare.client; package com.atsuishio.superbwarfare.client;
import com.atsuishio.superbwarfare.init.ModPerks;
import com.atsuishio.superbwarfare.perk.AmmoPerk;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -19,26 +23,24 @@ public class TooltipTool {
tooltip.add(Component.translatable("des.superbwarfare.developing").withStyle(ChatFormatting.LIGHT_PURPLE).withStyle(ChatFormatting.BOLD)); tooltip.add(Component.translatable("des.superbwarfare.developing").withStyle(ChatFormatting.LIGHT_PURPLE).withStyle(ChatFormatting.BOLD));
} }
// TODO perk
public static double perkDamage(ItemStack stack) { public static double perkDamage(ItemStack stack) {
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// if (perk instanceof AmmoPerk ammoPerk) { if (perk instanceof AmmoPerk ammoPerk) {
// return ammoPerk.damageRate; return ammoPerk.damageRate;
// } }
return 1; return 1;
} }
public static boolean heBullet(ItemStack stack) { public static boolean heBullet(ItemStack stack) {
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// return perk == ModPerks.HE_BULLET.get(); return perk == ModPerks.HE_BULLET.get();
return false;
} }
public static int heBulletLevel(ItemStack stack) { public static int heBulletLevel(ItemStack stack) {
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// if (perk == ModPerks.HE_BULLET.get()) { if (perk == ModPerks.HE_BULLET.get()) {
// return PerkHelper.getItemPerkLevel(perk, stack); return PerkHelper.getItemPerkLevel(perk, stack);
// } }
return 0; return 0;
} }
} }

View file

@ -3,9 +3,14 @@ package com.atsuishio.superbwarfare.client.overlay;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.capability.ModCapabilities; import com.atsuishio.superbwarfare.capability.ModCapabilities;
import com.atsuishio.superbwarfare.config.client.DisplayConfig; import com.atsuishio.superbwarfare.config.client.DisplayConfig;
import com.atsuishio.superbwarfare.entity.vehicle.Ah6Entity;
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.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.perk.AmmoPerk;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
@ -53,9 +58,8 @@ public class CrossHairOverlay {
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
if (cap != null && cap.edit) return; if (cap != null && cap.edit) return;
// todo ban hand if (!player.getMainHandItem().is(ModTags.Items.GUN) || (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player)))
// if (!player.getMainHandItem().is(ModTags.Items.GUN) || (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player))) return;
// return;
GuiGraphics guiGraphics = event.getGuiGraphics(); GuiGraphics guiGraphics = event.getGuiGraphics();
@ -65,8 +69,7 @@ public class CrossHairOverlay {
float moveX = 0; float moveX = 0;
float moveY = 0; float moveY = 0;
// TODO perk var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
if (DisplayConfig.FLOAT_CROSS_HAIR.get() && player.getVehicle() == null) { if (DisplayConfig.FLOAT_CROSS_HAIR.get() && player.getVehicle() == null) {
moveX = (float) (-6 * ClientEventHandler.turnRot[1] - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosX); moveX = (float) (-6 * ClientEventHandler.turnRot[1] - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosX);
@ -91,11 +94,11 @@ public class CrossHairOverlay {
preciseBlit(guiGraphics, ModUtils.loc("textures/screens/point.png"), w / 2f - 7.5f + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); preciseBlit(guiGraphics, ModUtils.loc("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) {
if (stack.is(ModTags.Items.SHOTGUN)) { if (stack.is(ModTags.Items.SHOTGUN)) {
// if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) { if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
// normalCrossHair(guiGraphics, w, h, spread, moveX, moveY); normalCrossHair(guiGraphics, w, h, spread, moveX, moveY);
// } else { } else {
shotgunCrossHair(guiGraphics, finPosX, finPosY, finLength); shotgunCrossHair(guiGraphics, finPosX, finPosY, finLength);
// } }
} else { } else {
normalCrossHair(guiGraphics, w, h, spread, moveX, moveY); normalCrossHair(guiGraphics, w, h, spread, moveX, moveY);
} }
@ -107,11 +110,11 @@ public class CrossHairOverlay {
preciseBlit(guiGraphics, ModUtils.loc("textures/screens/point.png"), w / 2f - 7.5f + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); preciseBlit(guiGraphics, ModUtils.loc("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 (!player.isSprinting() || player.getPersistentData().getDouble("noRun") > 0 || ClientEventHandler.pullPos > 0) {
if (ClientEventHandler.zoomTime < 0.1) { if (ClientEventHandler.zoomTime < 0.1) {
// if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) { if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
// normalCrossHair(guiGraphics, w, h, spread, moveX, moveY); normalCrossHair(guiGraphics, w, h, spread, moveX, moveY);
// } else { } else {
shotgunCrossHair(guiGraphics, finPosX, finPosY, finLength); shotgunCrossHair(guiGraphics, finPosX, finPosY, finLength);
// } }
} else { } else {
normalCrossHair(guiGraphics, w, h, spread, moveX, moveY); normalCrossHair(guiGraphics, w, h, spread, moveX, moveY);
} }
@ -120,10 +123,7 @@ public class CrossHairOverlay {
} }
// 在开启伤害指示器时才进行渲染 // 在开启伤害指示器时才进行渲染
if (DisplayConfig.KILL_INDICATION.get() if (DisplayConfig.KILL_INDICATION.get() && !(player.getVehicle() instanceof Ah6Entity ah6Entity && ah6Entity.getFirstPassenger() == player)) {
// TODO ah6
// && !(player.getVehicle() instanceof Ah6Entity ah6Entity && ah6Entity.getFirstPassenger() == player)
) {
renderKillIndicator(guiGraphics, w, h, moveX, moveY); renderKillIndicator(guiGraphics, w, h, moveX, moveY);
} }

View file

@ -5,7 +5,9 @@ import com.atsuishio.superbwarfare.capability.ModCapabilities;
import com.atsuishio.superbwarfare.client.RenderHelper; 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.ModPerks;
import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.SeekTool; import com.atsuishio.superbwarfare.tools.SeekTool;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
@ -48,9 +50,8 @@ public class HandsomeFrameOverlay {
if (stack.getItem() instanceof GunItem && Minecraft.getInstance().options.getCameraType().isFirstPerson()) { if (stack.getItem() instanceof GunItem && Minecraft.getInstance().options.getCameraType().isFirstPerson()) {
// TODO intelligent chip perk
// int level = PerkHelper.getItemPerkLevel(ModPerks.INTELLIGENT_CHIP.get(), stack); int level = PerkHelper.getItemPerkLevel(ModPerks.INTELLIGENT_CHIP.get(), stack);
int level = 0;
if (level == 0) return; if (level == 0) return;
RenderSystem.disableDepthTest(); RenderSystem.disableDepthTest();

View file

@ -1,6 +1,13 @@
package com.atsuishio.superbwarfare.client.tooltip; package com.atsuishio.superbwarfare.client.tooltip;
import com.atsuishio.superbwarfare.client.TooltipTool;
import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent; import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent;
import com.atsuishio.superbwarfare.perk.AmmoPerk;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.FormatTool;
import com.atsuishio.superbwarfare.tools.GunsTool;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
public class ClientBocekImageTooltip extends ClientGunImageTooltip { public class ClientBocekImageTooltip extends ClientGunImageTooltip {
@ -13,26 +20,24 @@ public class ClientBocekImageTooltip extends ClientGunImageTooltip {
protected Component getDamageComponent() { protected Component getDamageComponent() {
boolean slug = false; boolean slug = false;
// TODO perk var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
// if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) { slug = true;
// slug = true; }
// }
//
// double total = GunsTool.getGunDoubleTag(stack, "Damage", 0) * TooltipTool.perkDamage(stack);
// if (slug) { double total = GunsTool.getGunDoubleTag(stack, "Damage", 0) * TooltipTool.perkDamage(stack);
// return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
// .append(Component.literal("").withStyle(ChatFormatting.RESET)) if (slug) {
// .append(Component.literal(FormatTool.format1D(total) + (TooltipTool.heBullet(stack) ? " + " + return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
// FormatTool.format1D(0.8 * total * (1 + 0.1 * TooltipTool.heBulletLevel(stack))) : "")).withStyle(ChatFormatting.GREEN)); .append(Component.literal("").withStyle(ChatFormatting.RESET))
// } else { .append(Component.literal(FormatTool.format1D(total) + (TooltipTool.heBullet(stack) ? " + " +
// return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY) FormatTool.format1D(0.8 * total * (1 + 0.1 * TooltipTool.heBulletLevel(stack))) : "")).withStyle(ChatFormatting.GREEN));
// .append(Component.literal("").withStyle(ChatFormatting.RESET)) } else {
// .append(Component.literal(FormatTool.format1D(total * 0.1, " * 10")).withStyle(ChatFormatting.GREEN)) return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
// .append(Component.literal(" / ").withStyle(ChatFormatting.RESET)) .append(Component.literal("").withStyle(ChatFormatting.RESET))
// .append(Component.literal(FormatTool.format1D(total)).withStyle(ChatFormatting.GREEN)); .append(Component.literal(FormatTool.format1D(total * 0.1, " * 10")).withStyle(ChatFormatting.GREEN))
// } .append(Component.literal(" / ").withStyle(ChatFormatting.RESET))
return Component.literal(""); .append(Component.literal(FormatTool.format1D(total)).withStyle(ChatFormatting.GREEN));
}
} }
} }

View file

@ -1,17 +1,26 @@
package com.atsuishio.superbwarfare.client.tooltip; package com.atsuishio.superbwarfare.client.tooltip;
import com.atsuishio.superbwarfare.client.TooltipTool;
import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent; import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent;
import com.atsuishio.superbwarfare.init.ModKeyMappings; import com.atsuishio.superbwarfare.init.ModKeyMappings;
import com.atsuishio.superbwarfare.init.ModPerks;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.perk.AmmoPerk;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.FormatTool;
import com.atsuishio.superbwarfare.tools.GunsTool;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.Font; import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.util.Mth;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
// TODO perk相关信息渲染
public class ClientGunImageTooltip implements ClientTooltipComponent { public class ClientGunImageTooltip implements ClientTooltipComponent {
protected final int width; protected final int width;
@ -53,20 +62,18 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
} }
protected boolean shouldRenderBypassAndHeadshotTooltip() { protected boolean shouldRenderBypassAndHeadshotTooltip() {
// return GunsTool.getGunDoubleTag(stack, "BypassesArmor", 0) > 0 || GunsTool.getGunDoubleTag(stack, "Headshot", 0) > 0; return GunsTool.getGunDoubleTag(stack, "BypassesArmor", 0) > 0 || GunsTool.getGunDoubleTag(stack, "Headshot", 0) > 0;
return false;
} }
protected boolean shouldRenderEditTooltip() { protected boolean shouldRenderEditTooltip() {
// if (this.stack.getItem() instanceof GunItem gunItem) { if (this.stack.getItem() instanceof GunItem gunItem) {
// return gunItem.isCustomizable(stack); return gunItem.isCustomizable(stack);
// } }
return false; return false;
} }
protected boolean shouldRenderPerks() { protected boolean shouldRenderPerks() {
// return PerkHelper.getPerkByType(stack, Perk.Type.AMMO) != null || PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE) != null || PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL) != null; return PerkHelper.getPerkByType(stack, Perk.Type.AMMO) != null || PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE) != null || PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL) != null;
return false;
} }
/** /**
@ -82,24 +89,23 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
* 获取武器伤害的文本组件 * 获取武器伤害的文本组件
*/ */
protected Component getDamageComponent() { protected Component getDamageComponent() {
// double damage = GunsTool.getGunDoubleTag(stack, "Damage", 0) * TooltipTool.perkDamage(stack); double damage = GunsTool.getGunDoubleTag(stack, "Damage", 0) * 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))
// .append(Component.literal(FormatTool.format1D(damage) + (TooltipTool.heBullet(stack) ? " + " .append(Component.literal(FormatTool.format1D(damage) + (TooltipTool.heBullet(stack) ? " + "
// + FormatTool.format1D(0.8 * damage * (1 + 0.1 * TooltipTool.heBulletLevel(stack))) : "")).withStyle(ChatFormatting.GREEN)); + FormatTool.format1D(0.8 * damage * (1 + 0.1 * TooltipTool.heBulletLevel(stack))) : "")).withStyle(ChatFormatting.GREEN));
return Component.literal("");
} }
/** /**
* 获取武器射速的文本组件 * 获取武器射速的文本组件
*/ */
protected Component getRpmComponent() { protected Component getRpmComponent() {
// if (this.stack.getItem() instanceof GunItem gunItem && gunItem.isAutoWeapon(this.stack)) { if (this.stack.getItem() instanceof GunItem gunItem && gunItem.isAutoWeapon(this.stack)) {
// return Component.translatable("des.superbwarfare.guns.rpm").withStyle(ChatFormatting.GRAY) return Component.translatable("des.superbwarfare.guns.rpm").withStyle(ChatFormatting.GRAY)
// .append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal("").withStyle(ChatFormatting.RESET))
// .append(Component.literal(FormatTool.format0D(GunsTool.getGunIntTag(stack, "RPM", 0))) .append(Component.literal(FormatTool.format0D(GunsTool.getGunIntTag(stack, "RPM", 0)))
// .withStyle(ChatFormatting.GREEN)); .withStyle(ChatFormatting.GREEN));
// } }
return Component.literal(""); return Component.literal("");
} }
@ -116,39 +122,37 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
* 获取武器等级文本组件 * 获取武器等级文本组件
*/ */
protected Component getLevelComponent() { protected Component getLevelComponent() {
// int level = GunsTool.getGunIntTag(stack, "Level", 0); int level = GunsTool.getGunIntTag(stack, "Level", 0);
// double rate = GunsTool.getGunDoubleTag(stack, "Exp", 0) / (20 * Math.pow(level, 2) + 160 * level + 20); double rate = GunsTool.getGunDoubleTag(stack, "Exp", 0) / (20 * Math.pow(level, 2) + 160 * level + 20);
ChatFormatting formatting; ChatFormatting formatting;
// if (level < 10) { if (level < 10) {
// formatting = ChatFormatting.WHITE; formatting = ChatFormatting.WHITE;
// } else if (level < 20) { } else if (level < 20) {
// formatting = ChatFormatting.AQUA; formatting = ChatFormatting.AQUA;
// } else if (level < 30) { } else if (level < 30) {
// formatting = ChatFormatting.LIGHT_PURPLE; formatting = ChatFormatting.LIGHT_PURPLE;
// } else if (level < 40) { } else if (level < 40) {
// formatting = ChatFormatting.GOLD; formatting = ChatFormatting.GOLD;
// } else { } else {
// formatting = ChatFormatting.RED; formatting = ChatFormatting.RED;
// } }
// return Component.translatable("des.superbwarfare.guns.level").withStyle(ChatFormatting.GRAY) return Component.translatable("des.superbwarfare.guns.level").withStyle(ChatFormatting.GRAY)
// .append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal("").withStyle(ChatFormatting.RESET))
// .append(Component.literal(level + "").withStyle(formatting).withStyle(ChatFormatting.BOLD)) .append(Component.literal(level + "").withStyle(formatting).withStyle(ChatFormatting.BOLD))
// .append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal("").withStyle(ChatFormatting.RESET))
// .append(Component.literal(" (" + FormatTool.DECIMAL_FORMAT_2ZZZ.format(rate * 100) + "%)").withStyle(ChatFormatting.GRAY)); .append(Component.literal(" (" + FormatTool.DECIMAL_FORMAT_2ZZZ.format(rate * 100) + "%)").withStyle(ChatFormatting.GRAY));
return Component.literal("");
} }
/** /**
* 获取武器强化点数文本组件 * 获取武器强化点数文本组件
*/ */
protected Component getUpgradePointComponent() { protected Component getUpgradePointComponent() {
// int upgradePoint = Mth.floor(GunsTool.getGunDoubleTag(stack, "UpgradePoint", 0)); int upgradePoint = Mth.floor(GunsTool.getGunDoubleTag(stack, "UpgradePoint", 0));
// 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));
return Component.literal("");
} }
/** /**
@ -165,29 +169,27 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
*/ */
protected Component getBypassComponent() { protected Component getBypassComponent() {
double perkBypassArmorRate = 0; double perkBypassArmorRate = 0;
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
//
// if (perk instanceof AmmoPerk ammoPerk) {
// int level = PerkHelper.getItemPerkLevel(perk, stack);
// perkBypassArmorRate = ammoPerk.bypassArmorRate + (perk == ModPerks.AP_BULLET.get() ? 0.05f * (level - 1) : 0);
// }
// double bypassRate = Math.max(GunsTool.getGunDoubleTag(stack, "BypassesArmor", 0) + perkBypassArmorRate, 0);
// return Component.translatable("des.superbwarfare.guns.bypass").withStyle(ChatFormatting.GRAY) if (perk instanceof AmmoPerk ammoPerk) {
// .append(Component.literal("").withStyle(ChatFormatting.RESET)) int level = PerkHelper.getItemPerkLevel(perk, stack);
// .append(Component.literal(FormatTool.format2D(bypassRate * 100, "%")).withStyle(ChatFormatting.GOLD)); perkBypassArmorRate = ammoPerk.bypassArmorRate + (perk == ModPerks.AP_BULLET.get() ? 0.05f * (level - 1) : 0);
return Component.literal(""); }
double bypassRate = Math.max(GunsTool.getGunDoubleTag(stack, "BypassesArmor", 0) + perkBypassArmorRate, 0);
return Component.translatable("des.superbwarfare.guns.bypass").withStyle(ChatFormatting.GRAY)
.append(Component.literal("").withStyle(ChatFormatting.RESET))
.append(Component.literal(FormatTool.format2D(bypassRate * 100, "%")).withStyle(ChatFormatting.GOLD));
} }
/** /**
* 获取武器爆头倍率文本组件 * 获取武器爆头倍率文本组件
*/ */
protected Component getHeadshotComponent() { protected Component getHeadshotComponent() {
// double headshot = GunsTool.getGunDoubleTag(stack, "Headshot", 0); double headshot = GunsTool.getGunDoubleTag(stack, "Headshot", 0);
// return Component.translatable("des.superbwarfare.guns.headshot").withStyle(ChatFormatting.GRAY) return Component.translatable("des.superbwarfare.guns.headshot").withStyle(ChatFormatting.GRAY)
// .append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal("").withStyle(ChatFormatting.RESET))
// .append(Component.literal(FormatTool.format1D(headshot, "x")).withStyle(ChatFormatting.AQUA)); .append(Component.literal(FormatTool.format1D(headshot, "x")).withStyle(ChatFormatting.AQUA));
return Component.literal("");
} }
/** /**
@ -213,55 +215,55 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
int xOffset = -20; int xOffset = -20;
// Perk ammoPerk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); Perk ammoPerk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// if (ammoPerk != null && PerkHelper.getPerkItem(ammoPerk).isPresent()) { if (ammoPerk != null && PerkHelper.getPerkItem(ammoPerk).isPresent()) {
// xOffset += 20; xOffset += 20;
//
// var ammoItem = PerkHelper.getPerkItem(ammoPerk).get().get(); var ammoItem = PerkHelper.getPerkItem(ammoPerk).get().get();
// ItemStack perkStack = ammoItem.getDefaultInstance(); ItemStack perkStack = ammoItem.getDefaultInstance();
//
// CompoundTag ammoTag = PerkHelper.getPerkTag(stack, Perk.Type.AMMO); CompoundTag ammoTag = PerkHelper.getPerkTag(stack, Perk.Type.AMMO);
// if (!ammoTag.isEmpty()) { if (!ammoTag.isEmpty()) {
// int level = PerkHelper.getItemPerkLevel(ammoPerk, stack); int level = PerkHelper.getItemPerkLevel(ammoPerk, stack);
// perkStack.setCount(level); perkStack.setCount(level);
// } }
// guiGraphics.renderItem(perkStack, x + xOffset, y + 2); guiGraphics.renderItem(perkStack, x + xOffset, y + 2);
// guiGraphics.renderItemDecorations(font, perkStack, x + xOffset, y + 2); guiGraphics.renderItemDecorations(font, perkStack, x + xOffset, y + 2);
// } }
//
// Perk funcPerk = PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL); Perk funcPerk = PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL);
// if (funcPerk != null && PerkHelper.getPerkItem(funcPerk).isPresent()) { if (funcPerk != null && PerkHelper.getPerkItem(funcPerk).isPresent()) {
// xOffset += 20; xOffset += 20;
//
// var funcItem = PerkHelper.getPerkItem(funcPerk).get().get(); var funcItem = PerkHelper.getPerkItem(funcPerk).get().get();
// ItemStack perkStack = funcItem.getDefaultInstance(); ItemStack perkStack = funcItem.getDefaultInstance();
//
// CompoundTag funcTag = PerkHelper.getPerkTag(stack, Perk.Type.FUNCTIONAL); CompoundTag funcTag = PerkHelper.getPerkTag(stack, Perk.Type.FUNCTIONAL);
// if (!funcTag.isEmpty()) { if (!funcTag.isEmpty()) {
// int level = PerkHelper.getItemPerkLevel(funcPerk, stack); int level = PerkHelper.getItemPerkLevel(funcPerk, stack);
// perkStack.setCount(level); perkStack.setCount(level);
// } }
//
// guiGraphics.renderItem(perkStack, x + xOffset, y + 2); guiGraphics.renderItem(perkStack, x + xOffset, y + 2);
// guiGraphics.renderItemDecorations(font, perkStack, x + xOffset, y + 2); guiGraphics.renderItemDecorations(font, perkStack, x + xOffset, y + 2);
// } }
//
// Perk damagePerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE); Perk damagePerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
// if (damagePerk != null && PerkHelper.getPerkItem(damagePerk).isPresent()) { if (damagePerk != null && PerkHelper.getPerkItem(damagePerk).isPresent()) {
// xOffset += 20; xOffset += 20;
//
// var damageItem = PerkHelper.getPerkItem(damagePerk).get().get(); var damageItem = PerkHelper.getPerkItem(damagePerk).get().get();
// ItemStack perkStack = damageItem.getDefaultInstance(); ItemStack perkStack = damageItem.getDefaultInstance();
//
// CompoundTag damageTag = PerkHelper.getPerkTag(stack, Perk.Type.DAMAGE); CompoundTag damageTag = PerkHelper.getPerkTag(stack, Perk.Type.DAMAGE);
// if (!damageTag.isEmpty()) { if (!damageTag.isEmpty()) {
// int level = PerkHelper.getItemPerkLevel(damagePerk, stack); int level = PerkHelper.getItemPerkLevel(damagePerk, stack);
// perkStack.setCount(level); perkStack.setCount(level);
// } }
//
// guiGraphics.renderItem(perkStack, x + xOffset, y + 2); guiGraphics.renderItem(perkStack, x + xOffset, y + 2);
// guiGraphics.renderItemDecorations(font, perkStack, x + xOffset, y + 2); guiGraphics.renderItemDecorations(font, perkStack, x + xOffset, y + 2);
// } }
guiGraphics.pose().popPose(); guiGraphics.pose().popPose();
} }
@ -276,71 +278,71 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
int yOffset = -5; int yOffset = -5;
// Perk ammoPerk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); Perk ammoPerk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// if (ammoPerk != null && PerkHelper.getPerkItem(ammoPerk).isPresent()) { if (ammoPerk != null && PerkHelper.getPerkItem(ammoPerk).isPresent()) {
// yOffset += 25; yOffset += 25;
// var ammoItem = PerkHelper.getPerkItem(ammoPerk).get().get(); var ammoItem = PerkHelper.getPerkItem(ammoPerk).get().get();
// guiGraphics.renderItem(ammoItem.getDefaultInstance(), x, y + 4 + yOffset); guiGraphics.renderItem(ammoItem.getDefaultInstance(), x, y + 4 + yOffset);
//
// CompoundTag ammoTag = PerkHelper.getPerkTag(stack, Perk.Type.AMMO); CompoundTag ammoTag = PerkHelper.getPerkTag(stack, Perk.Type.AMMO);
// if (!ammoTag.isEmpty()) { if (!ammoTag.isEmpty()) {
// var ids = ammoTag.getString("id").split(":"); var ids = ammoTag.getString("id").split(":");
// if (ids.length > 1) { if (ids.length > 1) {
// String id = ids[1]; String id = ids[1];
// var ammoComponent = Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.YELLOW) var ammoComponent = Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.YELLOW)
// .append(Component.literal(" ").withStyle(ChatFormatting.RESET)) .append(Component.literal(" ").withStyle(ChatFormatting.RESET))
// .append(Component.literal(" Lvl. " + ammoTag.getInt("level")).withStyle(ChatFormatting.WHITE)); .append(Component.literal(" Lvl. " + ammoTag.getInt("level")).withStyle(ChatFormatting.WHITE));
// var ammoDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY); var ammoDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
//
// guiGraphics.drawString(font, ammoComponent, x + 20, y + yOffset + 2, 0xFFFFFF); guiGraphics.drawString(font, ammoComponent, x + 20, y + yOffset + 2, 0xFFFFFF);
// guiGraphics.drawString(font, ammoDesComponent, x + 20, y + yOffset + 12, 0xFFFFFF); guiGraphics.drawString(font, ammoDesComponent, x + 20, y + yOffset + 12, 0xFFFFFF);
// } }
// } }
// } }
//
// Perk funcPerk = PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL); Perk funcPerk = PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL);
// if (funcPerk != null && PerkHelper.getPerkItem(funcPerk).isPresent()) { if (funcPerk != null && PerkHelper.getPerkItem(funcPerk).isPresent()) {
// yOffset += 25; yOffset += 25;
// var funcItem = PerkHelper.getPerkItem(funcPerk).get().get(); var funcItem = PerkHelper.getPerkItem(funcPerk).get().get();
// guiGraphics.renderItem(funcItem.getDefaultInstance(), x, y + 4 + yOffset); guiGraphics.renderItem(funcItem.getDefaultInstance(), x, y + 4 + yOffset);
//
// CompoundTag funcTag = PerkHelper.getPerkTag(stack, Perk.Type.FUNCTIONAL); CompoundTag funcTag = PerkHelper.getPerkTag(stack, Perk.Type.FUNCTIONAL);
// if (!funcTag.isEmpty()) { if (!funcTag.isEmpty()) {
// var ids = funcTag.getString("id").split(":"); var ids = funcTag.getString("id").split(":");
// if (ids.length > 1) { if (ids.length > 1) {
// String id = ids[1]; String id = ids[1];
// var funcComponent = Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.GREEN) var funcComponent = Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.GREEN)
// .append(Component.literal(" ").withStyle(ChatFormatting.RESET)) .append(Component.literal(" ").withStyle(ChatFormatting.RESET))
// .append(Component.literal(" Lvl. " + funcTag.getInt("level")).withStyle(ChatFormatting.WHITE)); .append(Component.literal(" Lvl. " + funcTag.getInt("level")).withStyle(ChatFormatting.WHITE));
// var funcDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY); var funcDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
//
// guiGraphics.drawString(font, funcComponent, x + 20, y + yOffset + 2, 0xFFFFFF); guiGraphics.drawString(font, funcComponent, x + 20, y + yOffset + 2, 0xFFFFFF);
// guiGraphics.drawString(font, funcDesComponent, x + 20, y + yOffset + 12, 0xFFFFFF); guiGraphics.drawString(font, funcDesComponent, x + 20, y + yOffset + 12, 0xFFFFFF);
// } }
// } }
// } }
//
// Perk damagePerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE); Perk damagePerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
// if (damagePerk != null && PerkHelper.getPerkItem(damagePerk).isPresent()) { if (damagePerk != null && PerkHelper.getPerkItem(damagePerk).isPresent()) {
// yOffset += 25; yOffset += 25;
// var damageItem = PerkHelper.getPerkItem(damagePerk).get().get(); var damageItem = PerkHelper.getPerkItem(damagePerk).get().get();
// guiGraphics.renderItem(damageItem.getDefaultInstance(), x, y + 4 + yOffset); guiGraphics.renderItem(damageItem.getDefaultInstance(), x, y + 4 + yOffset);
//
// CompoundTag damageTag = PerkHelper.getPerkTag(stack, Perk.Type.DAMAGE); CompoundTag damageTag = PerkHelper.getPerkTag(stack, Perk.Type.DAMAGE);
// if (!damageTag.isEmpty()) { if (!damageTag.isEmpty()) {
// var ids = damageTag.getString("id").split(":"); var ids = damageTag.getString("id").split(":");
// if (ids.length > 1) { if (ids.length > 1) {
// String id = ids[1]; String id = ids[1];
// var damageComponent = Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.RED) var damageComponent = Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.RED)
// .append(Component.literal(" ").withStyle(ChatFormatting.RESET)) .append(Component.literal(" ").withStyle(ChatFormatting.RESET))
// .append(Component.literal(" Lvl. " + damageTag.getInt("level")).withStyle(ChatFormatting.WHITE)); .append(Component.literal(" Lvl. " + damageTag.getInt("level")).withStyle(ChatFormatting.WHITE));
// var damageDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY); var damageDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
//
// guiGraphics.drawString(font, damageComponent, x + 20, y + yOffset + 2, 0xFFFFFF); guiGraphics.drawString(font, damageComponent, x + 20, y + yOffset + 2, 0xFFFFFF);
// guiGraphics.drawString(font, damageDesComponent, x + 20, y + yOffset + 12, 0xFFFFFF); guiGraphics.drawString(font, damageDesComponent, x + 20, y + yOffset + 12, 0xFFFFFF);
// } }
// } }
// } }
guiGraphics.pose().popPose(); guiGraphics.pose().popPose();
} }
@ -363,35 +365,35 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
int width = 0; int width = 0;
// CompoundTag ammoTag = PerkHelper.getPerkTag(stack, Perk.Type.AMMO); CompoundTag ammoTag = PerkHelper.getPerkTag(stack, Perk.Type.AMMO);
// if (!ammoTag.isEmpty()) { if (!ammoTag.isEmpty()) {
// var ids = ammoTag.getString("id").split(":"); var ids = ammoTag.getString("id").split(":");
// if (ids.length > 1) { if (ids.length > 1) {
// String id = ids[1]; String id = ids[1];
// var ammoDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY); var ammoDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
// width = Math.max(width, font.width(ammoDesComponent)); width = Math.max(width, font.width(ammoDesComponent));
// } }
// } }
//
// CompoundTag funcTag = PerkHelper.getPerkTag(stack, Perk.Type.FUNCTIONAL); CompoundTag funcTag = PerkHelper.getPerkTag(stack, Perk.Type.FUNCTIONAL);
// if (!funcTag.isEmpty()) { if (!funcTag.isEmpty()) {
// var ids = funcTag.getString("id").split(":"); var ids = funcTag.getString("id").split(":");
// if (ids.length > 1) { if (ids.length > 1) {
// String id = ids[1]; String id = ids[1];
// var funcDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY); var funcDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
// width = Math.max(width, font.width(funcDesComponent)); width = Math.max(width, font.width(funcDesComponent));
// } }
// } }
//
// CompoundTag damageTag = PerkHelper.getPerkTag(stack, Perk.Type.DAMAGE); CompoundTag damageTag = PerkHelper.getPerkTag(stack, Perk.Type.DAMAGE);
// if (!damageTag.isEmpty()) { if (!damageTag.isEmpty()) {
// var ids = damageTag.getString("id").split(":"); var ids = damageTag.getString("id").split(":");
// if (ids.length > 1) { if (ids.length > 1) {
// String id = ids[1]; String id = ids[1];
// var damageDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY); var damageDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
// width = Math.max(width, font.width(damageDesComponent)); width = Math.max(width, font.width(damageDesComponent));
// } }
// } }
return width + 25; return width + 25;
} }
@ -407,15 +409,15 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
height += 16; height += 16;
} else { } else {
height += 16; height += 16;
// if (PerkHelper.getPerkByType(stack, Perk.Type.AMMO) != null) { if (PerkHelper.getPerkByType(stack, Perk.Type.AMMO) != null) {
// height += 25; height += 25;
// } }
// if (PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL) != null) { if (PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL) != null) {
// height += 25; height += 25;
// } }
// if (PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE) != null) { if (PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE) != null) {
// height += 25; height += 25;
// } }
} }
} }

View file

@ -1,6 +1,13 @@
package com.atsuishio.superbwarfare.client.tooltip; package com.atsuishio.superbwarfare.client.tooltip;
import com.atsuishio.superbwarfare.client.TooltipTool;
import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent; import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent;
import com.atsuishio.superbwarfare.perk.AmmoPerk;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.FormatTool;
import com.atsuishio.superbwarfare.tools.GunsTool;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
public class ClientShotgunImageTooltip extends ClientGunImageTooltip { public class ClientShotgunImageTooltip extends ClientGunImageTooltip {
@ -13,25 +20,22 @@ public class ClientShotgunImageTooltip extends ClientGunImageTooltip {
protected Component getDamageComponent() { protected Component getDamageComponent() {
boolean slug = false; boolean slug = false;
// TODO perk var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
// if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) { slug = true;
// slug = true; }
// }
//
// if (slug) {
// double damage = GunsTool.getGunDoubleTag(stack, "Damage", 0) * GunsTool.getGunIntTag(stack, "ProjectileAmount", 1) * TooltipTool.perkDamage(stack);
// return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
// .append(Component.literal("").withStyle(ChatFormatting.RESET))
// .append(Component.literal(FormatTool.format1D(damage) + (TooltipTool.heBullet(stack) ? " + " +
// FormatTool.format1D(0.8 * damage * (1 + 0.1 * TooltipTool.heBulletLevel(stack))) : "")).withStyle(ChatFormatting.GREEN));
// } else {
// double damage = GunsTool.getGunDoubleTag(stack, "Damage", 0) * TooltipTool.perkDamage(stack);
// return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
// .append(Component.literal("").withStyle(ChatFormatting.RESET))
// .append(Component.literal(FormatTool.format1D(damage) + " * " + FormatTool.format0D(GunsTool.getGunIntTag(stack, "ProjectileAmount", 1))).withStyle(ChatFormatting.GREEN));
// }
return Component.literal(""); if (slug) {
double damage = GunsTool.getGunDoubleTag(stack, "Damage", 0) * GunsTool.getGunIntTag(stack, "ProjectileAmount", 1) * TooltipTool.perkDamage(stack);
return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
.append(Component.literal("").withStyle(ChatFormatting.RESET))
.append(Component.literal(FormatTool.format1D(damage) + (TooltipTool.heBullet(stack) ? " + " +
FormatTool.format1D(0.8 * damage * (1 + 0.1 * TooltipTool.heBulletLevel(stack))) : "")).withStyle(ChatFormatting.GREEN));
} else {
double damage = GunsTool.getGunDoubleTag(stack, "Damage", 0) * TooltipTool.perkDamage(stack);
return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
.append(Component.literal("").withStyle(ChatFormatting.RESET))
.append(Component.literal(FormatTool.format1D(damage) + " * " + FormatTool.format0D(GunsTool.getGunIntTag(stack, "ProjectileAmount", 1))).withStyle(ChatFormatting.GREEN));
}
} }
} }

View file

@ -14,6 +14,9 @@ import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.network.message.send.LaserShootMessage; import com.atsuishio.superbwarfare.network.message.send.LaserShootMessage;
import com.atsuishio.superbwarfare.network.message.send.ShootMessage; import com.atsuishio.superbwarfare.network.message.send.ShootMessage;
import com.atsuishio.superbwarfare.network.message.send.VehicleMovementMessage; import com.atsuishio.superbwarfare.network.message.send.VehicleMovementMessage;
import com.atsuishio.superbwarfare.perk.AmmoPerk;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.*; import com.atsuishio.superbwarfare.tools.*;
import com.atsuishio.superbwarfare.tools.animation.AnimationCurves; import com.atsuishio.superbwarfare.tools.animation.AnimationCurves;
import net.minecraft.client.CameraType; import net.minecraft.client.CameraType;
@ -391,8 +394,7 @@ public class ClientEventHandler {
return; return;
} }
// TODO perk var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
int mode = GunsTool.getGunIntTag(stack, "FireMode"); int mode = GunsTool.getGunIntTag(stack, "FireMode");
// 精准度 // 精准度
@ -411,15 +413,13 @@ public class ClientEventHandler {
if (stack.is(ModTags.Items.SNIPER_RIFLE) || stack.is(ModTags.Items.HEAVY_WEAPON)) { if (stack.is(ModTags.Items.SNIPER_RIFLE) || stack.is(ModTags.Items.HEAVY_WEAPON)) {
zoomSpread = 1 - (0.995 * zoomTime); zoomSpread = 1 - (0.995 * zoomTime);
} else if (stack.is(ModTags.Items.SHOTGUN)) { } else if (stack.is(ModTags.Items.SHOTGUN)) {
// if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) { if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
// zoomSpread = 1 - (0.85 * zoomTime); zoomSpread = 1 - (0.85 * zoomTime);
// } else { } else {
// zoomSpread = 1 - (0.25 * zoomTime); zoomSpread = 1 - (0.25 * zoomTime);
// } }
// } else if (stack.is(ModItems.MINIGUN.get())) { } else if (stack.is(ModItems.MINIGUN.get())) {
// zoomSpread = 1 - (0.25 * zoomTime); zoomSpread = 1 - (0.25 * zoomTime);
zoomSpread = 1 - (0.9 * zoomTime);
// TODO perk
} else { } else {
zoomSpread = 1 - (0.9 * zoomTime); zoomSpread = 1 - (0.9 * zoomTime);
} }
@ -444,9 +444,8 @@ public class ClientEventHandler {
} }
if (GunsTool.getPerkIntTag(stack, "DesperadoTimePost") > 0) { if (GunsTool.getPerkIntTag(stack, "DesperadoTimePost") > 0) {
// TODO perk int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack);
// int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack); rpm *= (int) (1.285 + 0.015 * perkLevel);
// rpm *= (int) (1.285 + 0.015 * perkLevel);
} }
double rps = (double) rpm / 60; double rps = (double) rpm / 60;
@ -570,9 +569,8 @@ public class ClientEventHandler {
} }
if (stack.is(ModItems.DEVOTION.get())) { if (stack.is(ModItems.DEVOTION.get())) {
// TODO perk int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.TURBO_CHARGER.get(), stack);
// int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.TURBO_CHARGER.get(), stack); customRpm = Math.min(customRpm + 15 + ((perkLevel > 0 ? 5 : 0) + 3 * perkLevel), 500);
// customRpm = Math.min(customRpm + 15 + ((perkLevel > 0 ? 5 : 0) + 3 * perkLevel), 500);
} }
if (stack.getItem() == ModItems.SENTINEL.get()) { if (stack.getItem() == ModItems.SENTINEL.get()) {
@ -599,15 +597,14 @@ public class ClientEventHandler {
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
if (cap != null && cap.rifleAmmo > 0 || InventoryTool.hasCreativeAmmoBox(player)) { if (cap != null && cap.rifleAmmo > 0 || InventoryTool.hasCreativeAmmoBox(player)) {
// TODO perk var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
float pitch = tag.getDouble("heat") <= 40 ? 1 : (float) (1 - 0.025 * Math.abs(40 - tag.getDouble("heat"))); float pitch = tag.getDouble("heat") <= 40 ? 1 : (float) (1 - 0.025 * Math.abs(40 - tag.getDouble("heat")));
player.playSound(ModSounds.MINIGUN_FIRE_1P.get(), 1f, pitch); player.playSound(ModSounds.MINIGUN_FIRE_1P.get(), 1f, pitch);
// if (perk == ModPerks.BEAST_BULLET.get()) { if (perk == ModPerks.BEAST_BULLET.get()) {
// player.playSound(ModSounds.HENG.get(), 1f, 1f); player.playSound(ModSounds.HENG.get(), 1f, 1f);
// } }
double shooterHeight = player.getEyePosition().distanceTo((Vec3.atLowerCornerOf(player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(new Vec3(0, -1, 0).scale(10)), double shooterHeight = player.getEyePosition().distanceTo((Vec3.atLowerCornerOf(player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(new Vec3(0, -1, 0).scale(10)),
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos()))); ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos())));
@ -682,12 +679,11 @@ public class ClientEventHandler {
} }
} }
// TODO perk var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// if (perk == ModPerks.BEAST_BULLET.get()) { if (perk == ModPerks.BEAST_BULLET.get()) {
// player.playSound(ModSounds.HENG.get(), 1f, 1f); player.playSound(ModSounds.HENG.get(), 1f, 1f);
// } }
int barrelType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.BARREL); int barrelType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.BARREL);
@ -1403,18 +1399,17 @@ public class ClientEventHandler {
&& cap != null && cap != null
&& !cap.edit) { && !cap.edit) {
if (!player.isShiftKeyDown()) { if (!player.isShiftKeyDown()) {
// TODO perk int intelligentChipLevel = PerkHelper.getItemPerkLevel(ModPerks.INTELLIGENT_CHIP.get(), stack);
// int intelligentChipLevel = PerkHelper.getItemPerkLevel(ModPerks.INTELLIGENT_CHIP.get(), stack);
// if (intelligentChipLevel > 0) {
// if (intelligentChipLevel > 0) { if (ClientEventHandler.entity == null || !entity.isAlive()) {
// if (ClientEventHandler.entity == null || !entity.isAlive()) { ClientEventHandler.entity = SeekTool.seekLivingEntity(player, player.level(), 32 + 8 * (intelligentChipLevel - 1), 16 / zoomFov);
// ClientEventHandler.entity = SeekTool.seekLivingEntity(player, player.level(), 32 + 8 * (intelligentChipLevel - 1), 16 / zoomFov); }
// } if (entity != null && entity.isAlive()) {
// if (entity != null && entity.isAlive()) { Vec3 toVec = getVec3(event, player);
// Vec3 toVec = getVec3(event, player); look(player, toVec);
// look(player, toVec); }
// } }
// }
} else { } else {
entity = null; entity = null;
} }

View file

@ -6,16 +6,22 @@ import com.atsuishio.superbwarfare.capability.player.PlayerVariable;
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity; import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
import com.atsuishio.superbwarfare.event.events.ReloadEvent; import com.atsuishio.superbwarfare.event.events.ReloadEvent;
import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModPerks;
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.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.perk.AmmoPerk;
import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.*; import com.atsuishio.superbwarfare.tools.*;
import net.minecraft.core.Holder;
import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.effect.MobEffect;
import net.minecraft.world.effect.MobEffectInstance;
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.minecraft.world.level.ClipContext; import net.minecraft.world.level.ClipContext;
@ -27,6 +33,7 @@ import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.event.tick.PlayerTickEvent; import net.neoforged.neoforge.event.tick.PlayerTickEvent;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.ArrayList;
import static com.atsuishio.superbwarfare.tools.NBTTool.saveTag; import static com.atsuishio.superbwarfare.tools.NBTTool.saveTag;
@ -107,12 +114,11 @@ public class GunEventHandler {
} }
} }
// TODO perk var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// if (perk == ModPerks.BEAST_BULLET.get()) {
// if (perk == ModPerks.BEAST_BULLET.get()) { player.playSound(ModSounds.HENG.get(), 4f, 1f);
// player.playSound(ModSounds.HENG.get(), 4f, 1f); }
// }
float soundRadius = (float) (GunsTool.getGunDoubleTag(stack, "SoundRadius") * GunsTool.getGunDoubleTag(stack, "CustomSoundRadius", 1)); float soundRadius = (float) (GunsTool.getGunDoubleTag(stack, "SoundRadius") * GunsTool.getGunDoubleTag(stack, "CustomSoundRadius", 1));
@ -181,104 +187,101 @@ public class GunEventHandler {
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
boolean zoom = cap != null && cap.zoom; boolean zoom = cap != null && cap.zoom;
// TODO perk var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// if (perk != null && perk.descriptionId.equals("butterfly_bullet")) {
// if (perk != null && perk.descriptionId.equals("butterfly_bullet")) { if (handleButterflyBullet(perk, stack, player)) return;
// if (handleButterflyBullet(perk, stack, player)) return; }
// }
ProjectileEntity projectile = new ProjectileEntity(player.level()) ProjectileEntity projectile = new ProjectileEntity(player.level())
.shooter(player) .shooter(player)
// .damage(perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? projectileAmount * damage : damage) .damage(perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? projectileAmount * damage : damage)
.damage(damage) .damage(damage)
.headShot(headshot) .headShot(headshot)
.zoom(zoom); .zoom(zoom);
// if (perk instanceof AmmoPerk ammoPerk) { if (perk instanceof AmmoPerk ammoPerk) {
// int level = PerkHelper.getItemPerkLevel(perk, stack); int level = PerkHelper.getItemPerkLevel(perk, stack);
//
// bypassArmorRate += ammoPerk.bypassArmorRate + (perk == ModPerks.AP_BULLET.get() ? 0.05f * (level - 1) : 0); bypassArmorRate += ammoPerk.bypassArmorRate + (perk == ModPerks.AP_BULLET.get() ? 0.05f * (level - 1) : 0);
// projectile.setRGB(ammoPerk.rgb); projectile.setRGB(ammoPerk.rgb);
//
// if (!ammoPerk.mobEffects.get().isEmpty()) { if (!ammoPerk.mobEffects.get().isEmpty()) {
// int amplifier; int amplifier;
// if (perk.descriptionId.equals("blade_bullet")) { if (perk.descriptionId.equals("blade_bullet")) {
// amplifier = level / 3; amplifier = level / 3;
// } else if (perk.descriptionId.equals("bread_bullet")) { } else if (perk.descriptionId.equals("bread_bullet")) {
// amplifier = 1; amplifier = 1;
// } else { } else {
// amplifier = level - 1; amplifier = level - 1;
// } }
//
// ArrayList<MobEffectInstance> mobEffectInstances = new ArrayList<>(); ArrayList<MobEffectInstance> mobEffectInstances = new ArrayList<>();
// for (MobEffect effect : ammoPerk.mobEffects.get()) { for (MobEffect effect : ammoPerk.mobEffects.get()) {
// mobEffectInstances.add(new MobEffectInstance(effect, 70 + 30 * level, amplifier)); mobEffectInstances.add(new MobEffectInstance(Holder.direct(effect), 70 + 30 * level, amplifier));
// } }
// projectile.effect(mobEffectInstances); projectile.effect(mobEffectInstances);
// } }
//
// if (perk.descriptionId.equals("bread_bullet")) { if (perk.descriptionId.equals("bread_bullet")) {
// projectile.knockback(level * 0.3f); projectile.knockback(level * 0.3f);
// projectile.forceKnockback(); projectile.forceKnockback();
// } }
// } }
bypassArmorRate = Math.max(bypassArmorRate, 0); bypassArmorRate = Math.max(bypassArmorRate, 0);
projectile.bypassArmorRate(bypassArmorRate); projectile.bypassArmorRate(bypassArmorRate);
// if (perk == ModPerks.SILVER_BULLET.get()) { if (perk == ModPerks.SILVER_BULLET.get()) {
// int level = PerkHelper.getItemPerkLevel(perk, stack); int level = PerkHelper.getItemPerkLevel(perk, stack);
// projectile.undeadMultiple(1.0f + 0.5f * level); projectile.undeadMultiple(1.0f + 0.5f * level);
// } else if (perk == ModPerks.BEAST_BULLET.get()) { } else if (perk == ModPerks.BEAST_BULLET.get()) {
// projectile.beast(); projectile.beast();
// } else if (perk == ModPerks.JHP_BULLET.get()) { } else if (perk == ModPerks.JHP_BULLET.get()) {
// int level = PerkHelper.getItemPerkLevel(perk, stack); int level = PerkHelper.getItemPerkLevel(perk, stack);
// projectile.jhpBullet(level); projectile.jhpBullet(level);
// } else if (perk == ModPerks.HE_BULLET.get()) { } else if (perk == ModPerks.HE_BULLET.get()) {
// int level = PerkHelper.getItemPerkLevel(perk, stack); int level = PerkHelper.getItemPerkLevel(perk, stack);
// projectile.heBullet(level); projectile.heBullet(level);
// } else if (perk == ModPerks.INCENDIARY_BULLET.get()) { } else if (perk == ModPerks.INCENDIARY_BULLET.get()) {
// int level = PerkHelper.getItemPerkLevel(perk, stack); int level = PerkHelper.getItemPerkLevel(perk, stack);
// projectile.fireBullet(level, stack.is(ModTags.Items.SHOTGUN)); projectile.fireBullet(level, stack.is(ModTags.Items.SHOTGUN));
// } }
//
// var dmgPerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE); var dmgPerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
// if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) { if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
// int level = PerkHelper.getItemPerkLevel(dmgPerk, stack); int level = PerkHelper.getItemPerkLevel(dmgPerk, stack);
// projectile.monsterMultiple(0.1f + 0.1f * level); projectile.monsterMultiple(0.1f + 0.1f * level);
// } }
projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x, player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z); projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x, player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z);
projectile.shoot(player, player.getLookAngle().x, player.getLookAngle().y + 0.001f, player.getLookAngle().z, projectile.shoot(player, player.getLookAngle().x, player.getLookAngle().y + 0.001f, player.getLookAngle().z, stack.is(ModTags.Items.SHOTGUN) && perk == ModPerks.INCENDIARY_BULLET.get() ? 4.5f : velocity, (float) spared);
// TODO perk incendiary bullet
// stack.is(ModTags.Items.SHOTGUN) && perk == ModPerks.INCENDIARY_BULLET.get() ? 4.5f : velocity,
velocity,
(float) spared);
player.level().addFreshEntity(projectile); player.level().addFreshEntity(projectile);
} }
} }
public static double perkDamage(ItemStack stack) { public static double perkDamage(ItemStack stack) {
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// if (perk instanceof AmmoPerk ammoPerk) { if (perk instanceof AmmoPerk ammoPerk) {
// return ammoPerk.damageRate; return ammoPerk.damageRate;
// } }
return 1; return 1;
} }
public static double perkSpeed(ItemStack stack) { public static double perkSpeed(ItemStack stack) {
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// if (perk instanceof AmmoPerk ammoPerk) { if (perk instanceof AmmoPerk ammoPerk) {
// return ammoPerk.speedRate; return ammoPerk.speedRate;
// } }
return 1; return 1;
} }
// TODO 这还有联动的必要吗
@SuppressWarnings("ConstantValue") @SuppressWarnings("ConstantValue")
private static boolean handleButterflyBullet(Perk perk, ItemStack heldItem, Player player) { private static boolean handleButterflyBullet(Perk perk, ItemStack heldItem, Player player) {
return true;
// int perkLevel = PerkHelper.getItemPerkLevel(perk, heldItem); // int perkLevel = PerkHelper.getItemPerkLevel(perk, heldItem);
//
// var entityType = CompatHolder.VRC_RAIN_SHOWER_BUTTERFLY; // var entityType = CompatHolder.VRC_RAIN_SHOWER_BUTTERFLY;
// if (entityType != null) { // if (entityType != null) {
// Projectile projectile = entityType.create(player.level()); // Projectile projectile = entityType.create(player.level());
@ -304,8 +307,8 @@ public class GunEventHandler {
// player.level().addFreshEntity(projectile); // player.level().addFreshEntity(projectile);
// return true; // return true;
// } // }
//
return false; // return false;
} }
/** /**

View file

@ -16,6 +16,10 @@ import com.atsuishio.superbwarfare.event.events.PreKillEvent;
import com.atsuishio.superbwarfare.init.*; import com.atsuishio.superbwarfare.init.*;
import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.network.message.receive.ClientIndicatorMessage; import com.atsuishio.superbwarfare.network.message.receive.ClientIndicatorMessage;
import com.atsuishio.superbwarfare.network.message.receive.PlayerGunKillMessage;
import com.atsuishio.superbwarfare.perk.AmmoPerk;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.*; import com.atsuishio.superbwarfare.tools.*;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -129,19 +133,19 @@ public class LivingEventHandler {
ItemStack stack = sourceEntity instanceof LivingEntity living ? living.getMainHandItem() : ItemStack.EMPTY; ItemStack stack = sourceEntity instanceof LivingEntity living ? living.getMainHandItem() : ItemStack.EMPTY;
// TODO perk
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// 距离衰减 // 距离衰减
if (DamageTypeTool.isGunDamage(source)) { if (DamageTypeTool.isGunDamage(source)) {
double distance = entity.position().distanceTo(sourceEntity.position()); double distance = entity.position().distanceTo(sourceEntity.position());
if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) {
// if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) { if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
// damage = reduceDamageByDistance(amount, distance, 0.015, 30); damage = reduceDamageByDistance(amount, distance, 0.015, 30);
// } else { } else {
damage = reduceDamageByDistance(amount, distance, 0.05, 15); damage = reduceDamageByDistance(amount, distance, 0.05, 15);
// } }
} else if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) {
damage = reduceDamageByDistance(amount, distance, 0.001, 150); damage = reduceDamageByDistance(amount, distance, 0.001, 150);
} else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) {
@ -208,10 +212,7 @@ public class LivingEventHandler {
// 先处理发射器类武器或高爆弹的爆炸伤害 // 先处理发射器类武器或高爆弹的爆炸伤害
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) { if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
if (stack.is(ModTags.Items.LAUNCHER) if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), stack) > 0) {
// TODO perk
// || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), stack) > 0
) {
GunsTool.setGunDoubleTag(stack, "Exp", GunsTool.getGunDoubleTag(stack, "Exp", 0) + amount); GunsTool.setGunDoubleTag(stack, "Exp", GunsTool.getGunDoubleTag(stack, "Exp", 0) + amount);
} }
} }
@ -234,10 +235,7 @@ public class LivingEventHandler {
// 先处理发射器类武器或高爆弹的爆炸伤害 // 先处理发射器类武器或高爆弹的爆炸伤害
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) { if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
if (stack.is(ModTags.Items.LAUNCHER) if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), stack) > 0) {
// TODO perk
// || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), stack) > 0
) {
GunsTool.setGunDoubleTag(stack, "Exp", GunsTool.getGunDoubleTag(stack, "Exp", 0) + amount); GunsTool.setGunDoubleTag(stack, "Exp", GunsTool.getGunDoubleTag(stack, "Exp", 0) + amount);
} }
} }
@ -299,9 +297,13 @@ public class LivingEventHandler {
if (!sourceEntity.level().isClientSide() && sourceEntity instanceof ServerPlayer player) { if (!sourceEntity.level().isClientSide() && sourceEntity instanceof ServerPlayer player) {
// TODO pre kill event // TODO pre kill event
// if (NeoForge.EVENT_BUS.post(new PreKillEvent.Indicator(player, source, event.getEntity()))) { if (false
// return; // NeoForge.EVENT_BUS.post(
// } // new PreKillEvent.Indicator(player, source, event.getEntity())
// )
) {
return;
}
SoundTool.playLocalSound(player, ModSounds.TARGET_DOWN.get(), 3f, 1f); SoundTool.playLocalSound(player, ModSounds.TARGET_DOWN.get(), 3f, 1f);
PacketDistributor.sendToPlayer(player, new ClientIndicatorMessage(2, 8)); PacketDistributor.sendToPlayer(player, new ClientIndicatorMessage(2, 8));
@ -416,15 +418,15 @@ public class LivingEventHandler {
} }
NBTTool.saveTag(newStack, newTag); NBTTool.saveTag(newStack, newTag);
// TODO perk int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), newStack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), newStack); if (level != 0) {
// if (level != 0) { GunsTool.setPerkIntTag(newStack, "KillingTally", 0);
// GunsTool.setPerkIntTag(newStack, "KillingTally", 0); }
// }
// if (player.level() instanceof ServerLevel) {
// if (player.level() instanceof ServerLevel) { // TODO draw client msg
// ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new DrawClientMessage(true)); // ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new DrawClientMessage(true));
// } }
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
if (cap != null) { if (cap != null) {
@ -468,10 +470,9 @@ public class LivingEventHandler {
if (attacker != null && MiscConfig.SEND_KILL_FEEDBACK.get()) { if (attacker != null && MiscConfig.SEND_KILL_FEEDBACK.get()) {
if (DamageTypeTool.isHeadshotDamage(source)) { if (DamageTypeTool.isHeadshotDamage(source)) {
// TODO player gun kill msg PacketDistributor.sendToAllPlayers(new PlayerGunKillMessage(attacker.getId(), entity.getId(), true, damageTypeResourceKey));
// ModUtils.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new PlayerGunKillMessage(attacker.getId(), entity.getId(), true, damageTypeResourceKey));
} else { } else {
// ModUtils.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new PlayerGunKillMessage(attacker.getId(), entity.getId(), false, damageTypeResourceKey)); PacketDistributor.sendToAllPlayers(new PlayerGunKillMessage(attacker.getId(), entity.getId(), false, damageTypeResourceKey));
} }
} }
} }
@ -514,15 +515,14 @@ public class LivingEventHandler {
} }
if (source.getDirectEntity() instanceof ProjectileEntity projectile) { if (source.getDirectEntity() instanceof ProjectileEntity projectile) {
// TODO perk if (PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack) > 0) {
// if (PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack) > 0) { float bypassArmorRate = projectile.getBypassArmorRate();
// float bypassArmorRate = projectile.getBypassArmorRate(); if (bypassArmorRate >= 1.0f && source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE)) {
// if (bypassArmorRate >= 1.0f && source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE)) { handleFourthTimesCharm(stack);
// handleFourthTimesCharm(stack); } else if (source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) {
// } else if (source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) { handleFourthTimesCharm(stack);
// handleFourthTimesCharm(stack); }
// } }
// }
if (!projectile.isZoom()) { if (!projectile.isZoom()) {
handleFieldDoctor(stack, event, attacker); handleFieldDoctor(stack, event, attacker);
@ -569,91 +569,83 @@ public class LivingEventHandler {
} }
private static void handleClipPerks(ItemStack stack) { private static void handleClipPerks(ItemStack stack) {
// TODO perk int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), stack);
// int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), stack); if (healClipLevel != 0) {
// if (healClipLevel != 0) { GunsTool.setPerkIntTag(stack, "HealClipTime", 80 + healClipLevel * 20);
// GunsTool.setPerkIntTag(stack, "HealClipTime", 80 + healClipLevel * 20); }
// }
// int killClipLevel = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), stack);
// int killClipLevel = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), stack); if (killClipLevel != 0) {
// if (killClipLevel != 0) { GunsTool.setPerkIntTag(stack, "KillClipReloadTime", 80);
// GunsTool.setPerkIntTag(stack, "KillClipReloadTime", 80); }
// }
} }
private static void handleKillClipDamage(ItemStack stack, LivingIncomingDamageEvent event) { private static void handleKillClipDamage(ItemStack stack, LivingIncomingDamageEvent event) {
// TODO perk if (GunsTool.getPerkIntTag(stack, "KillClipTime") > 0) {
// if (GunsTool.getPerkIntTag(stack, "KillClipTime") > 0) { int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), stack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), stack); if (level == 0) {
// if (level == 0) { return;
// return; }
// }
// event.setAmount(event.getAmount() * (1.2f + 0.05f * level));
// event.setAmount(event.getAmount() * (1.2f + 0.05f * level)); }
// }
} }
private static void handleGutshotStraightDamage(ItemStack stack, LivingIncomingDamageEvent event) { private static void handleGutshotStraightDamage(ItemStack stack, LivingIncomingDamageEvent event) {
// TODO perk int level = PerkHelper.getItemPerkLevel(ModPerks.GUTSHOT_STRAIGHT.get(), stack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.GUTSHOT_STRAIGHT.get(), stack); if (level == 0) {
// if (level == 0) { return;
// return; }
// }
// event.setAmount(event.getAmount() * (1.15f + 0.05f * level)); event.setAmount(event.getAmount() * (1.15f + 0.05f * level));
} }
private static void handleKillingTallyDamage(ItemStack stack, LivingIncomingDamageEvent event) { private static void handleKillingTallyDamage(ItemStack stack, LivingIncomingDamageEvent event) {
// TODO perk int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), stack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), stack); if (level == 0) {
// if (level == 0) { return;
// return; }
// }
// int killTally = GunsTool.getPerkIntTag(stack, "KillingTally");
// int killTally = GunsTool.getPerkIntTag(stack, "KillingTally"); if (killTally == 0) {
// if (killTally == 0) { return;
// return; }
// }
// event.setAmount(event.getAmount() * (1.0f + (0.1f * level) * killTally));
// event.setAmount(event.getAmount() * (1.0f + (0.1f * level) * killTally));
} }
private static void handleKillingTallyAddCount(ItemStack stack) { private static void handleKillingTallyAddCount(ItemStack stack) {
// TODO perk int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), stack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), stack); if (level != 0) {
// if (level != 0) { GunsTool.setPerkIntTag(stack, "KillingTally", Math.min(3, GunsTool.getPerkIntTag(stack, "KillingTally") + 1));
// GunsTool.setPerkIntTag(stack, "KillingTally", Math.min(3, GunsTool.getPerkIntTag(stack, "KillingTally") + 1)); }
// }
} }
private static void handleFourthTimesCharm(ItemStack stack) { private static void handleFourthTimesCharm(ItemStack stack) {
// TODO perk int level = PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack); if (level == 0) {
// if (level == 0) { return;
// return; }
// }
// int fourthTimesCharmTick = GunsTool.getPerkIntTag(stack, "FourthTimesCharmTick");
// int fourthTimesCharmTick = GunsTool.getPerkIntTag(stack, "FourthTimesCharmTick"); if (fourthTimesCharmTick <= 0) {
// if (fourthTimesCharmTick <= 0) { GunsTool.setPerkIntTag(stack, "FourthTimesCharmTick", 40 + 10 * level);
// GunsTool.setPerkIntTag(stack, "FourthTimesCharmTick", 40 + 10 * level); GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", 1);
// GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", 1); } else {
// } else { int count = GunsTool.getPerkIntTag(stack, "FourthTimesCharmCount");
// int count = GunsTool.getPerkIntTag(stack, "FourthTimesCharmCount"); if (count < 4) {
// if (count < 4) { GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", Math.min(4, count + 1));
// GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", Math.min(4, count + 1)); }
// } }
// }
} }
private static void handleSubsistence(ItemStack stack, Player player) { private static void handleSubsistence(ItemStack stack, Player player) {
// TODO perk int level = PerkHelper.getItemPerkLevel(ModPerks.SUBSISTENCE.get(), stack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.SUBSISTENCE.get(), stack); if (level == 0) {
// if (level == 0) { return;
// return; }
// }
// float rate = level * 0.1f + (stack.is(ModTags.Items.SMG) || stack.is(ModTags.Items.RIFLE) ? 0.07f : 0f);
// float rate = level * 0.1f + (stack.is(ModTags.Items.SMG) || stack.is(ModTags.Items.RIFLE) ? 0.07f : 0f);
float rate = 1;
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
if (cap == null) return; if (cap == null) return;
@ -687,48 +679,44 @@ public class LivingEventHandler {
private static void handleFieldDoctor(ItemStack stack, LivingIncomingDamageEvent event, Player player) { private static void handleFieldDoctor(ItemStack stack, LivingIncomingDamageEvent event, Player player) {
// TODO perk int level = PerkHelper.getItemPerkLevel(ModPerks.FIELD_DOCTOR.get(), stack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.FIELD_DOCTOR.get(), stack); if (level == 0) {
// if (level == 0) { return;
// return; }
// }
// if (event.getEntity().isAlliedTo(player)) {
// if (event.getEntity().isAlliedTo(player)) { event.getEntity().heal(event.getAmount() * Math.min(1.0f, 0.25f + 0.05f * level));
// event.getEntity().heal(event.getAmount() * Math.min(1.0f, 0.25f + 0.05f * level)); event.setCanceled(true);
// event.setCanceled(true); }
// }
} }
private static void handleHeadSeekerTime(ItemStack stack) { private static void handleHeadSeekerTime(ItemStack stack) {
// TODO perk int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), stack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), stack); if (level == 0) {
// if (level == 0) { return;
// return; }
// }
// GunsTool.setPerkIntTag(stack, "HeadSeeker", 11 + level * 2);
// GunsTool.setPerkIntTag(stack, "HeadSeeker", 11 + level * 2);
} }
private static void handleHeadSeekerDamage(ItemStack stack, LivingIncomingDamageEvent event) { private static void handleHeadSeekerDamage(ItemStack stack, LivingIncomingDamageEvent event) {
// TODO perk int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), stack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), stack); if (level == 0) {
// if (level == 0) { return;
// return; }
// }
// if (GunsTool.getPerkIntTag(stack, "HeadSeeker") > 0) {
// if (GunsTool.getPerkIntTag(stack, "HeadSeeker") > 0) { event.setAmount(event.getAmount() * (1.095f + 0.0225f * level));
// event.setAmount(event.getAmount() * (1.095f + 0.0225f * level)); }
// }
} }
private static void handleDesperado(ItemStack stack) { private static void handleDesperado(ItemStack stack) {
// TODO perk int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack); if (level == 0) {
// if (level == 0) { return;
// return; }
// }
// GunsTool.setPerkIntTag(stack, "DesperadoTime", 90 + level * 10);
// GunsTool.setPerkIntTag(stack, "DesperadoTime", 90 + level * 10);
} }
/** /**
@ -793,17 +781,16 @@ public class LivingEventHandler {
return; return;
} }
// TODO perk if (stack.is(ModTags.Items.GUN) && PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack) > 0 && (DamageTypeTool.isGunDamage(source) || DamageTypeTool.isExplosionDamage(source))) {
// if (stack.is(ModTags.Items.GUN) && PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack) > 0 && (DamageTypeTool.isGunDamage(source) || DamageTypeTool.isExplosionDamage(source))) { var drops = event.getDrops();
// var drops = event.getDrops(); drops.forEach(itemEntity -> {
// drops.forEach(itemEntity -> { ItemStack item = itemEntity.getItem();
// ItemStack item = itemEntity.getItem(); if (!player.addItem(item)) {
// if (!player.addItem(item)) { player.drop(item, false);
// player.drop(item, false); }
// } });
// }); event.setCanceled(true);
// event.setCanceled(true); }
// }
} }
@SubscribeEvent @SubscribeEvent
@ -820,13 +807,12 @@ public class LivingEventHandler {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
// TODO perk int level = PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack); if (level > 0) {
// if (level > 0) { player.giveExperiencePoints((int) (event.getDroppedExperience() * (0.8f + 0.2f * level)));
// player.giveExperiencePoints((int) (event.getDroppedExperience() * (0.8f + 0.2f * level)));
// event.setCanceled(true);
// event.setCanceled(true); }
// }
} }
public static void handlePlayerBeamReset(Player player) { public static void handlePlayerBeamReset(Player player) {
@ -838,9 +824,8 @@ public class LivingEventHandler {
private static void handleVorpalWeaponDamage(ItemStack stack, LivingIncomingDamageEvent event) { private static void handleVorpalWeaponDamage(ItemStack stack, LivingIncomingDamageEvent event) {
var entity = event.getEntity(); var entity = event.getEntity();
// TODO perk
// int level = PerkHelper.getItemPerkLevel(ModPerks.VORPAL_WEAPON.get(), stack); int level = PerkHelper.getItemPerkLevel(ModPerks.VORPAL_WEAPON.get(), stack);
int level = 0;
if (level <= 0) return; if (level <= 0) return;
if (entity.getHealth() < 100.0f) return; if (entity.getHealth() < 100.0f) return;

View file

@ -1,13 +1,17 @@
package com.atsuishio.superbwarfare.event; package com.atsuishio.superbwarfare.event;
import com.atsuishio.superbwarfare.event.events.ReloadEvent; import com.atsuishio.superbwarfare.event.events.ReloadEvent;
import com.atsuishio.superbwarfare.init.ModPerks;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
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.neoforged.bus.api.SubscribeEvent; import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.common.EventBusSubscriber;
import java.util.List;
@EventBusSubscriber @EventBusSubscriber
public class ReloadEventHandler { public class ReloadEventHandler {
@ -61,17 +65,16 @@ public class ReloadEventHandler {
return; return;
} }
// TODO perk int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), stack);
// int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), stack); if (healClipLevel == 0) {
// if (healClipLevel == 0) { healClipLevel = 1;
// healClipLevel = 1; }
// }
// player.heal(12.0f * (0.8f + 0.2f * healClipLevel));
// player.heal(12.0f * (0.8f + 0.2f * healClipLevel)); List<Player> players = player.level().getEntitiesOfClass(Player.class, player.getBoundingBox().inflate(5))
// List<Player> players = player.level().getEntitiesOfClass(Player.class, player.getBoundingBox().inflate(5)) .stream().filter(p -> p.isAlliedTo(player)).toList();
// .stream().filter(p -> p.isAlliedTo(player)).toList(); int finalHealClipLevel = healClipLevel;
// int finalHealClipLevel = healClipLevel; players.forEach(p -> p.heal(6.0f * (0.8f + 0.2f * finalHealClipLevel)));
// players.forEach(p -> p.heal(6.0f * (0.8f + 0.2f * finalHealClipLevel)));
} }
private static void handleKillClipPre(ItemStack stack) { private static void handleKillClipPre(ItemStack stack) {
@ -89,19 +92,17 @@ public class ReloadEventHandler {
return; return;
} }
// TODO perk int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), stack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), stack); GunsTool.setPerkIntTag(stack, "KillClipTime", 90 + 10 * level);
// GunsTool.setPerkIntTag(stack, "KillClipTime", 90 + 10 * level);
} }
private static void handleKillingTallyPre(ItemStack stack) { private static void handleKillingTallyPre(ItemStack stack) {
// TODO perk int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), stack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), stack); if (level == 0) {
// if (level == 0) { return;
// return; }
// }
// GunsTool.setPerkIntTag(stack, "KillingTally", 0);
// GunsTool.setPerkIntTag(stack, "KillingTally", 0);
} }
private static void handleDesperadoPre(ItemStack stack) { private static void handleDesperadoPre(ItemStack stack) {
@ -115,12 +116,11 @@ public class ReloadEventHandler {
} }
private static void handleDesperadoPost(ItemStack stack) { private static void handleDesperadoPost(ItemStack stack) {
// TODO perk if (!GunsTool.getPerkBooleanTag(stack, "Desperado")) {
// if (!GunsTool.getPerkBooleanTag(stack, "Desperado")) { return;
// return; }
// }
// int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack);
// int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack); GunsTool.setPerkIntTag(stack, "DesperadoTimePost", 110 + level * 10);
// GunsTool.setPerkIntTag(stack, "DesperadoTimePost", 110 + level * 10);
} }
} }

View file

@ -5,9 +5,11 @@ import com.atsuishio.superbwarfare.capability.ModCapabilities;
import com.atsuishio.superbwarfare.client.PoseTool; import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent; import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent;
import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModPerks;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.CustomRendererItem; import com.atsuishio.superbwarfare.item.CustomRendererItem;
import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.AmmoType; import com.atsuishio.superbwarfare.tools.AmmoType;
import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
@ -180,17 +182,16 @@ public abstract class GunItem extends Item implements CustomRendererItem {
reducePerkTagCoolDown(stack, "HealClipTime", "KillClipReloadTime", "KillClipTime", "FourthTimesCharmTick", "HeadSeeker", reducePerkTagCoolDown(stack, "HealClipTime", "KillClipReloadTime", "KillClipTime", "FourthTimesCharmTick", "HeadSeeker",
"DesperadoTime", "DesperadoTimePost"); "DesperadoTime", "DesperadoTimePost");
// TODO perk if (PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack) > 0) {
// if (PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack) > 0) { int count = GunsTool.getPerkIntTag(stack, "FourthTimesCharmCount");
// int count = GunsTool.getPerkIntTag(stack, "FourthTimesCharmCount"); if (count >= 4) {
// if (count >= 4) { GunsTool.setPerkIntTag(stack, "FourthTimesCharmTick", 0);
// GunsTool.setPerkIntTag(stack, "FourthTimesCharmTick", 0); GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", 0);
// GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", 0);
// int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + GunsTool.getGunIntTag(stack, "CustomMagazine", 0);
// int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + GunsTool.getGunIntTag(stack, "CustomMagazine", 0); GunsTool.setGunIntTag(stack, "Ammo", Math.min(mag, GunsTool.getGunIntTag(stack, "Ammo", 0) + 2));
// GunsTool.setGunIntTag(stack, "Ammo", Math.min(mag, GunsTool.getGunIntTag(stack, "Ammo", 0) + 2)); }
// } }
// }
} }
private void handleGunAttachment(ItemStack stack) { private void handleGunAttachment(ItemStack stack) {

View file

@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -118,9 +119,7 @@ public class Glock17Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// TODO perk
// return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -4,10 +4,12 @@ import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.renderer.item.Glock18ItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.Glock18ItemRenderer;
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.init.ModPerks;
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.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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -120,9 +122,7 @@ public class Glock18Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
// todo perk
// return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
} }
@Override @Override

View file

@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -121,9 +122,7 @@ public class M1911Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// todo perk
// return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -118,9 +119,7 @@ public class Mp443Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// todo perk
// return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -10,6 +10,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
@ -293,9 +294,7 @@ public class Trachelium extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.HANDGUN_PERKS.test(perk);
// todo perk
// return PerkHelper.HANDGUN_PERKS.test(perk);
} }
@Override @Override

View file

@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -166,9 +167,7 @@ public class Ntw20Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// todo perk
// return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -11,6 +11,7 @@ import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon; import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.*; import com.atsuishio.superbwarfare.tools.*;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
@ -221,9 +222,7 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.LAUNCHER_PERKS.test(perk);
// todo perk
// return PerkHelper.LAUNCHER_PERKS.test(perk);
} }
@Override @Override

View file

@ -6,11 +6,13 @@ import com.atsuishio.superbwarfare.client.renderer.item.M79ItemRenderer;
import com.atsuishio.superbwarfare.client.tooltip.component.LauncherImageComponent; import com.atsuishio.superbwarfare.client.tooltip.component.LauncherImageComponent;
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.init.ModPerks;
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.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon; import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -142,9 +144,7 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.LAUNCHER_PERKS.test(perk) || perk == ModPerks.MICRO_MISSILE.get();
// todo perk
// return PerkHelper.LAUNCHER_PERKS.test(perk) || perk == ModPerks.MICRO_MISSILE.get();
} }
@Override @Override

View file

@ -6,11 +6,13 @@ import com.atsuishio.superbwarfare.client.renderer.item.RpgItemRenderer;
import com.atsuishio.superbwarfare.client.tooltip.component.LauncherImageComponent; import com.atsuishio.superbwarfare.client.tooltip.component.LauncherImageComponent;
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.init.ModPerks;
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.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon; import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -156,9 +158,7 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.LAUNCHER_PERKS.test(perk) || perk == ModPerks.MICRO_MISSILE.get();
// todo perk
// return PerkHelper.LAUNCHER_PERKS.test(perk) || perk == ModPerks.MICRO_MISSILE.get();
} }
@Override @Override

View file

@ -6,10 +6,12 @@ import com.atsuishio.superbwarfare.client.renderer.item.SecondaryCataclysmRender
import com.atsuishio.superbwarfare.client.tooltip.component.SecondaryCataclysmImageComponent; import com.atsuishio.superbwarfare.client.tooltip.component.SecondaryCataclysmImageComponent;
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.init.ModPerks;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon; import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -221,9 +223,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.LAUNCHER_PERKS.test(perk) || perk == ModPerks.MICRO_MISSILE.get();
// todo perk
// return PerkHelper.LAUNCHER_PERKS.test(perk) || perk == ModPerks.MICRO_MISSILE.get();
} }
@Override @Override

View file

@ -4,10 +4,12 @@ import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.renderer.item.DevotionItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.DevotionItemRenderer;
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.init.ModPerks;
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.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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -103,9 +105,7 @@ public class DevotionItem extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get() || perk == ModPerks.TURBO_CHARGER.get();
// todo perk
// return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get() || perk == ModPerks.TURBO_CHARGER.get();
} }
@Override @Override

View file

@ -4,10 +4,12 @@ import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.renderer.item.M60ItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.M60ItemRenderer;
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.init.ModPerks;
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.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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -134,9 +136,7 @@ public class M60Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
// todo perk
// return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
} }
@Override @Override

View file

@ -4,10 +4,12 @@ import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.renderer.item.RpkItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.RpkItemRenderer;
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.init.ModPerks;
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.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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -103,9 +105,7 @@ public class RpkItem extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
// todo perk
// return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
} }
@Override @Override

View file

@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -175,9 +176,7 @@ public class AK12Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// todo perk
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -185,9 +186,7 @@ public class AK47Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// todo perk
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -185,9 +186,7 @@ public class Hk416Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// todo perk
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -27,6 +28,7 @@ import software.bernie.geckolib.animation.*;
import software.bernie.geckolib.renderer.GeoItemRenderer; import software.bernie.geckolib.renderer.GeoItemRenderer;
import software.bernie.geckolib.util.GeckoLibUtil; import software.bernie.geckolib.util.GeckoLibUtil;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Set; import java.util.Set;
public class M4Item extends GunItem implements GeoItem { public class M4Item extends GunItem implements GeoItem {
@ -146,6 +148,7 @@ public class M4Item extends GunItem implements GeoItem {
} }
@Override @Override
@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) {
super.inventoryTick(stack, world, entity, slot, selected); super.inventoryTick(stack, world, entity, slot, selected);
@ -184,9 +187,7 @@ public class M4Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// todo perk
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -139,9 +140,7 @@ public class MarlinItem extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// todo perk
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -183,9 +184,7 @@ public class Mk14Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// todo perk
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -187,9 +188,7 @@ public class Qbz95Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// todo perk
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -119,9 +120,7 @@ public class SksItem extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// todo perk
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -5,10 +5,12 @@ import com.atsuishio.superbwarfare.client.renderer.item.Aa12ItemRenderer;
import com.atsuishio.superbwarfare.client.tooltip.component.ShotgunImageComponent; import com.atsuishio.superbwarfare.client.tooltip.component.ShotgunImageComponent;
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.init.ModPerks;
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.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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -131,9 +133,7 @@ public class Aa12Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.SHOTGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
// todo perk
// return PerkHelper.SHOTGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
} }
@Override @Override

View file

@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -107,9 +108,7 @@ public class HomemadeShotgunItem extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.SHOTGUN_PERKS.test(perk);
// todo perk
// return PerkHelper.SHOTGUN_PERKS.test(perk);
} }
@Override @Override

View file

@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -141,9 +142,7 @@ public class M870Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.SHOTGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// todo perk
// return PerkHelper.SHOTGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -164,9 +165,7 @@ public class VectorItem extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
// TODO perk return PerkHelper.SMG_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// return PerkHelper.SMG_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
return false;
} }
@Override @Override

View file

@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -98,9 +99,7 @@ public class HuntingRifleItem extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.SNIPER_RIFLE_PERKS.test(perk);
// todo perk
// return PerkHelper.SNIPER_RIFLE_PERKS.test(perk);
} }
@Override @Override

View file

@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -143,9 +144,7 @@ public class K98Item extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
// TODO perk return PerkHelper.SNIPER_RIFLE_PERKS.test(perk);
// return PerkHelper.SNIPER_RIFLE_PERKS.test(perk);
return false;
} }
@Override @Override

View file

@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -120,9 +121,7 @@ public class M98bItem extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// todo perk
// return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -143,9 +144,7 @@ public class MosinNagantItem extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.SNIPER_RIFLE_PERKS.test(perk);
// todo perk
// return PerkHelper.SNIPER_RIFLE_PERKS.test(perk);
} }
@Override @Override

View file

@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -184,9 +185,7 @@ public class SentinelItem extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// TODO perk
// return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
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.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -147,9 +148,7 @@ public class SvdItem extends GunItem implements GeoItem {
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return false; return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
// todo perk
// return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
} }
@Override @Override

View file

@ -12,6 +12,7 @@ import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon; import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.InventoryTool; import com.atsuishio.superbwarfare.tools.InventoryTool;
import com.atsuishio.superbwarfare.tools.SoundTool; import com.atsuishio.superbwarfare.tools.SoundTool;
@ -165,8 +166,7 @@ public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
// TODO perk var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
if (player instanceof ServerPlayer serverPlayer) { if (player instanceof ServerPlayer serverPlayer) {
SoundTool.stopSound(serverPlayer, ModSounds.BOCEK_PULL_1P.getId(), SoundSource.PLAYERS); SoundTool.stopSound(serverPlayer, ModSounds.BOCEK_PULL_1P.getId(), SoundSource.PLAYERS);
@ -193,13 +193,13 @@ public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon {
player.playSound(ModSounds.BOCEK_SHATTER_CAP_FIRE_3P.get(), 2, 1); player.playSound(ModSounds.BOCEK_SHATTER_CAP_FIRE_3P.get(), 2, 1);
} }
// if (perk == ModPerks.BEAST_BULLET.get()) { if (perk == ModPerks.BEAST_BULLET.get()) {
// player.playSound(ModSounds.HENG.get(), 4f, 1f); player.playSound(ModSounds.HENG.get(), 4f, 1f);
//
// if (player instanceof ServerPlayer serverPlayer) { if (player instanceof ServerPlayer serverPlayer) {
// SoundTool.playLocalSound(serverPlayer, ModSounds.HENG.get(), 4f, 1f); SoundTool.playLocalSound(serverPlayer, ModSounds.HENG.get(), 4f, 1f);
// } }
// } }
player.getCooldowns().addCooldown(stack.getItem(), 7); player.getCooldowns().addCooldown(stack.getItem(), 7);
GunsTool.setGunIntTag(stack, "ArrowEmpty", 7); GunsTool.setGunIntTag(stack, "ArrowEmpty", 7);

View file

@ -4,6 +4,7 @@ import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.capability.ModCapabilities; import com.atsuishio.superbwarfare.capability.ModCapabilities;
import com.atsuishio.superbwarfare.client.renderer.item.TaserItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.TaserItemRenderer;
import com.atsuishio.superbwarfare.client.tooltip.component.EnergyImageComponent; import com.atsuishio.superbwarfare.client.tooltip.component.EnergyImageComponent;
import com.atsuishio.superbwarfare.entity.projectile.TaserBulletEntity;
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.init.ModPerks; import com.atsuishio.superbwarfare.init.ModPerks;
@ -12,6 +13,7 @@ import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon; import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import com.atsuishio.superbwarfare.tools.SoundTool; import com.atsuishio.superbwarfare.tools.SoundTool;
@ -37,6 +39,7 @@ import software.bernie.geckolib.animation.*;
import software.bernie.geckolib.renderer.GeoItemRenderer; import software.bernie.geckolib.renderer.GeoItemRenderer;
import software.bernie.geckolib.util.GeckoLibUtil; import software.bernie.geckolib.util.GeckoLibUtil;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.function.Supplier; import java.util.function.Supplier;
@ -145,6 +148,7 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon {
} }
@Override @Override
@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) {
super.inventoryTick(stack, world, entity, slot, selected); super.inventoryTick(stack, world, entity, slot, selected);
@ -152,13 +156,12 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon {
GunsTool.setGunIntTag(stack, "MaxAmmo", getAmmoCount(player)); GunsTool.setGunIntTag(stack, "MaxAmmo", getAmmoCount(player));
} }
// TODO perk int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.REGENERATION.get(), stack);
// int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.REGENERATION.get(), stack);
var stackStorage = stack.getCapability(Capabilities.EnergyStorage.ITEM); var stackStorage = stack.getCapability(Capabilities.EnergyStorage.ITEM);
// if (stackStorage != null) { if (stackStorage != null) {
// stackStorage.receiveEnergy(perkLevel, false); stackStorage.receiveEnergy(perkLevel, false);
// } }
if (entity instanceof Player player) { if (entity instanceof Player player) {
for (var cell : player.getInventory().items) { for (var cell : player.getInventory().items) {
@ -231,9 +234,7 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (GunsTool.getGunBooleanTag(stack, "Reloading")) return; if (GunsTool.getGunBooleanTag(stack, "Reloading")) return;
// TODO perk int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), stack);
// int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), stack);
int perkLevel = 0;
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;
@ -249,27 +250,24 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon {
boolean zoom = cap != null && cap.zoom; boolean zoom = cap != null && cap.zoom;
double spread = GunsTool.getGunDoubleTag(stack, "Spread"); double spread = GunsTool.getGunDoubleTag(stack, "Spread");
// TODO perk int volt = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), stack);
// int volt = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), stack); int wireLength = PerkHelper.getItemPerkLevel(ModPerks.LONGER_WIRE.get(), stack);
// int wireLength = PerkHelper.getItemPerkLevel(ModPerks.LONGER_WIRE.get(), stack);
int volt = 0;
int wireLength = 0;
SoundTool.playLocalSound(serverPlayer, ModSounds.TASER_FIRE_1P.get(), 1, 1); SoundTool.playLocalSound(serverPlayer, ModSounds.TASER_FIRE_1P.get(), 1, 1);
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.TASER_FIRE_3P.get(), SoundSource.PLAYERS, 1, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.TASER_FIRE_3P.get(), SoundSource.PLAYERS, 1, 1);
var level = serverPlayer.level(); var level = serverPlayer.level();
// TODO taser bullet TaserBulletEntity taserBulletProjectile = new TaserBulletEntity(player, level,
// TaserBulletEntity taserBulletProjectile = new TaserBulletEntity(player, level, (float) GunsTool.getGunDoubleTag(stack, "Damage", 0), volt, wireLength);
// (float) GunsTool.getGunDoubleTag(stack, "Damage", 0), volt, wireLength);
// taserBulletProjectile.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ());
// taserBulletProjectile.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ()); taserBulletProjectile.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) GunsTool.getGunDoubleTag(stack, "Velocity", 0),
// taserBulletProjectile.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) GunsTool.getGunDoubleTag(stack, "Velocity", 0), (float) (zoom ? 0.1 : spread));
// (float) (zoom ? 0.1 : spread)); level.addFreshEntity(taserBulletProjectile);
// level.addFreshEntity(taserBulletProjectile);
// // TODO shoot client msg
// ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShootClientMessage(10)); // PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
} }
GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1); GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1);

View file

@ -4,7 +4,10 @@ import com.atsuishio.superbwarfare.init.ModBlocks;
import com.atsuishio.superbwarfare.init.ModMenuTypes; import com.atsuishio.superbwarfare.init.ModMenuTypes;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.PerkItem; import com.atsuishio.superbwarfare.item.PerkItem;
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.tools.GunsTool;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.Container; import net.minecraft.world.Container;
import net.minecraft.world.SimpleContainer; import net.minecraft.world.SimpleContainer;
@ -161,10 +164,9 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
ItemStack itemstack = this.container.getItem(i); ItemStack itemstack = this.container.getItem(i);
if (itemstack.getItem() instanceof PerkItem<?> perkItem) { if (itemstack.getItem() instanceof PerkItem<?> perkItem) {
// TODO PerkHelper if (!copy.isEmpty() && PerkHelper.getItemPerkLevel(perkItem.getPerk(), copy) > 0) {
// if (!copy.isEmpty() && PerkHelper.getItemPerkLevel(perkItem.getPerk(), copy) > 0) { continue;
// continue; }
// }
} }
if (!itemstack.isEmpty()) { if (!itemstack.isEmpty()) {
@ -200,70 +202,69 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
} }
public void handleUpgradePoint(ItemStack stack) { public void handleUpgradePoint(ItemStack stack) {
// TODO GunItem GunsTool if (!(stack.getItem() instanceof GunItem)) {
// if (!(stack.getItem() instanceof GunItem)) { return;
// return; }
// }
// double oldPoint = GunsTool.getGunDoubleTag(stack, "UpgradePoint", 0);
// double oldPoint = GunsTool.getGunDoubleTag(stack, "UpgradePoint", 0); 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(stack, "UpgradePoint", oldPoint + delta);
// GunsTool.setGunDoubleTag(stack, "UpgradePoint", oldPoint + delta); }
// }
} }
/** /**
* 根据输入槽的枪械和Perk槽中的物品与等级生成重铸后的武器并放入输出槽中 * 根据输入槽的枪械和Perk槽中的物品与等级生成重铸后的武器并放入输出槽中
*/ */
public void generateResult() { public void generateResult() {
// ItemStack gun = this.container.getItem(INPUT_SLOT); ItemStack gun = this.container.getItem(INPUT_SLOT);
// if (!(gun.getItem() instanceof GunItem gunItem)) { if (!(gun.getItem() instanceof GunItem gunItem)) {
// return; return;
// } }
//
// ItemStack ammo = this.container.getItem(AMMO_PERK_SLOT);
// ItemStack func = this.container.getItem(FUNC_PERK_SLOT);
// ItemStack damage = this.container.getItem(DAMAGE_PERK_SLOT);
// if (ammo.isEmpty() && func.isEmpty() && damage.isEmpty()) {
// return;
// }
//
// ItemStack result = gun.copy();
//
// if (!ammo.isEmpty() && ammo.getItem() instanceof PerkItem perkItem) {
// if (gunItem.canApplyPerk(perkItem.getPerk())) {
// PerkHelper.setPerk(result, perkItem.getPerk(), this.ammoPerkLevel.get());
// this.container.setItem(AMMO_PERK_SLOT, ItemStack.EMPTY);
// }
// }
//
// if (!func.isEmpty() && func.getItem() instanceof PerkItem perkItem) {
// if (gunItem.canApplyPerk(perkItem.getPerk())) {
// PerkHelper.setPerk(result, perkItem.getPerk(), this.funcPerkLevel.get());
// this.container.setItem(FUNC_PERK_SLOT, ItemStack.EMPTY);
// }
// }
//
// if (!damage.isEmpty() && damage.getItem() instanceof PerkItem perkItem) {
// if (gunItem.canApplyPerk(perkItem.getPerk())) {
// PerkHelper.setPerk(result, perkItem.getPerk(), this.damagePerkLevel.get());
// this.container.setItem(DAMAGE_PERK_SLOT, ItemStack.EMPTY);
// }
// }
// handleUpgradePoint(result); ItemStack ammo = this.container.getItem(AMMO_PERK_SLOT);
// ItemStack func = this.container.getItem(FUNC_PERK_SLOT);
// this.ammoPerkLevel.set(0); ItemStack damage = this.container.getItem(DAMAGE_PERK_SLOT);
// this.funcPerkLevel.set(0); if (ammo.isEmpty() && func.isEmpty() && damage.isEmpty()) {
// this.damagePerkLevel.set(0); return;
// this.upgradePoint.set(0); }
//
// this.container.setItem(INPUT_SLOT, ItemStack.EMPTY); ItemStack result = gun.copy();
// this.container.setItem(RESULT_SLOT, result);
// this.container.setChanged(); if (!ammo.isEmpty() && ammo.getItem() instanceof PerkItem perkItem) {
if (gunItem.canApplyPerk(perkItem.getPerk())) {
PerkHelper.setPerk(result, perkItem.getPerk(), this.ammoPerkLevel.get());
this.container.setItem(AMMO_PERK_SLOT, ItemStack.EMPTY);
}
}
if (!func.isEmpty() && func.getItem() instanceof PerkItem perkItem) {
if (gunItem.canApplyPerk(perkItem.getPerk())) {
PerkHelper.setPerk(result, perkItem.getPerk(), this.funcPerkLevel.get());
this.container.setItem(FUNC_PERK_SLOT, ItemStack.EMPTY);
}
}
if (!damage.isEmpty() && damage.getItem() instanceof PerkItem perkItem) {
if (gunItem.canApplyPerk(perkItem.getPerk())) {
PerkHelper.setPerk(result, perkItem.getPerk(), this.damagePerkLevel.get());
this.container.setItem(DAMAGE_PERK_SLOT, ItemStack.EMPTY);
}
}
handleUpgradePoint(result);
this.ammoPerkLevel.set(0);
this.funcPerkLevel.set(0);
this.damagePerkLevel.set(0);
this.upgradePoint.set(0);
this.container.setItem(INPUT_SLOT, ItemStack.EMPTY);
this.container.setItem(RESULT_SLOT, result);
this.container.setChanged();
} }
/** /**
@ -272,33 +273,33 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
* @param perk Perk物品 * @param perk Perk物品
*/ */
private void onTakePerk(ItemStack perk) { private void onTakePerk(ItemStack perk) {
// ItemStack gun = this.container.getItem(INPUT_SLOT); ItemStack gun = this.container.getItem(INPUT_SLOT);
// if (!(gun.getItem() instanceof GunItem)) { if (!(gun.getItem() instanceof GunItem)) {
// return; return;
// } }
//
// if (perk.getItem() instanceof PerkItem perkItem) { if (perk.getItem() instanceof PerkItem perkItem) {
// switch (perkItem.getPerk().type) { switch (perkItem.getPerk().type) {
// case AMMO -> this.ammoPerkLevel.set(0); case AMMO -> this.ammoPerkLevel.set(0);
// case FUNCTIONAL -> this.funcPerkLevel.set(0); case FUNCTIONAL -> this.funcPerkLevel.set(0);
// case DAMAGE -> this.damagePerkLevel.set(0); case DAMAGE -> this.damagePerkLevel.set(0);
// } }
//
// int level = PerkHelper.getItemPerkLevel(perkItem.getPerk(), gun); int level = PerkHelper.getItemPerkLevel(perkItem.getPerk(), gun);
//
// if (level <= 0) { if (level <= 0) {
// this.upgradePoint.set((int) GunsTool.getGunDoubleTag(gun, "UpgradePoint", 0)); this.upgradePoint.set((int) GunsTool.getGunDoubleTag(gun, "UpgradePoint", 0));
// return; return;
// } }
//
// ItemStack output = gun.copy(); ItemStack output = gun.copy();
// PerkHelper.removePerkByType(output, perkItem.getPerk().type); PerkHelper.removePerkByType(output, perkItem.getPerk().type);
// GunsTool.setGunDoubleTag(output, "UpgradePoint", Math.min(MAX_UPGRADE_POINT, level - 1 + GunsTool.getGunDoubleTag(output, "UpgradePoint", 0))); GunsTool.setGunDoubleTag(output, "UpgradePoint", Math.min(MAX_UPGRADE_POINT, level - 1 + GunsTool.getGunDoubleTag(output, "UpgradePoint", 0)));
// this.upgradePoint.set((int) GunsTool.getGunDoubleTag(output, "UpgradePoint", 0)); this.upgradePoint.set((int) GunsTool.getGunDoubleTag(output, "UpgradePoint", 0));
//
// this.container.setItem(INPUT_SLOT, output); this.container.setItem(INPUT_SLOT, output);
// this.container.setChanged(); this.container.setChanged();
// } }
} }
/** /**
@ -324,33 +325,33 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
* @param stack 输入的枪械 * @param stack 输入的枪械
*/ */
private void onPlaceGun(ItemStack stack) { private void onPlaceGun(ItemStack stack) {
// if (!(stack.getItem() instanceof GunItem)) { if (!(stack.getItem() instanceof GunItem)) {
// return; return;
// } }
//
// int point = (int) GunsTool.getGunDoubleTag(stack, "UpgradePoint", 0); int point = (int) GunsTool.getGunDoubleTag(stack, "UpgradePoint", 0);
// this.upgradePoint.set(Mth.clamp(point, 0, MAX_UPGRADE_POINT)); this.upgradePoint.set(Mth.clamp(point, 0, MAX_UPGRADE_POINT));
//
// var ammoPerk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); var ammoPerk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// if (ammoPerk != null) { if (ammoPerk != null) {
// this.ammoPerkLevel.set(PerkHelper.getItemPerkLevel(ammoPerk, stack)); this.ammoPerkLevel.set(PerkHelper.getItemPerkLevel(ammoPerk, stack));
// var ammoPerkItem = PerkHelper.getPerkItem(ammoPerk); var ammoPerkItem = PerkHelper.getPerkItem(ammoPerk);
// ammoPerkItem.ifPresent(registryObject -> this.container.setItem(AMMO_PERK_SLOT, registryObject.get().getDefaultInstance())); ammoPerkItem.ifPresent(registryObject -> this.container.setItem(AMMO_PERK_SLOT, registryObject.get().getDefaultInstance()));
// } }
//
// var funcPerk = PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL); var funcPerk = PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL);
// if (funcPerk != null) { if (funcPerk != null) {
// this.funcPerkLevel.set(PerkHelper.getItemPerkLevel(funcPerk, stack)); this.funcPerkLevel.set(PerkHelper.getItemPerkLevel(funcPerk, stack));
// var funcPerkItem = PerkHelper.getPerkItem(funcPerk); var funcPerkItem = PerkHelper.getPerkItem(funcPerk);
// funcPerkItem.ifPresent(registryObject -> this.container.setItem(FUNC_PERK_SLOT, registryObject.get().getDefaultInstance())); funcPerkItem.ifPresent(registryObject -> this.container.setItem(FUNC_PERK_SLOT, registryObject.get().getDefaultInstance()));
// } }
//
// var damagePerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE); var damagePerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
// if (damagePerk != null) { if (damagePerk != null) {
// this.damagePerkLevel.set(PerkHelper.getItemPerkLevel(damagePerk, stack)); this.damagePerkLevel.set(PerkHelper.getItemPerkLevel(damagePerk, stack));
// var damagePerkItem = PerkHelper.getPerkItem(damagePerk); var damagePerkItem = PerkHelper.getPerkItem(damagePerk);
// damagePerkItem.ifPresent(registryObject -> this.container.setItem(DAMAGE_PERK_SLOT, registryObject.get().getDefaultInstance())); damagePerkItem.ifPresent(registryObject -> this.container.setItem(DAMAGE_PERK_SLOT, registryObject.get().getDefaultInstance()));
// } }
this.container.setChanged(); this.container.setChanged();
this.broadcastChanges(); this.broadcastChanges();
@ -362,30 +363,30 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
* @param pStack 输入的枪械 * @param pStack 输入的枪械
*/ */
private void onTakeGun(ItemStack pStack) { private void onTakeGun(ItemStack pStack) {
// if (!(pStack.getItem() instanceof GunItem)) { if (!(pStack.getItem() instanceof GunItem)) {
// return; return;
// } }
//
// var ammoPerk = PerkHelper.getPerkByType(pStack, Perk.Type.AMMO); var ammoPerk = PerkHelper.getPerkByType(pStack, Perk.Type.AMMO);
// if (ammoPerk != null) { if (ammoPerk != null) {
// if (this.container.getItem(AMMO_PERK_SLOT).getItem() instanceof PerkItem perkItem && perkItem.getPerk() == ammoPerk) { if (this.container.getItem(AMMO_PERK_SLOT).getItem() instanceof PerkItem<?> perkItem && perkItem.getPerk() == ammoPerk) {
// this.container.setItem(AMMO_PERK_SLOT, ItemStack.EMPTY); this.container.setItem(AMMO_PERK_SLOT, ItemStack.EMPTY);
// } }
// } }
//
// var funcPerk = PerkHelper.getPerkByType(pStack, Perk.Type.FUNCTIONAL); var funcPerk = PerkHelper.getPerkByType(pStack, Perk.Type.FUNCTIONAL);
// if (funcPerk != null) { if (funcPerk != null) {
// if (this.container.getItem(FUNC_PERK_SLOT).getItem() instanceof PerkItem perkItem && perkItem.getPerk() == funcPerk) { if (this.container.getItem(FUNC_PERK_SLOT).getItem() instanceof PerkItem<?> perkItem && perkItem.getPerk() == funcPerk) {
// this.container.setItem(FUNC_PERK_SLOT, ItemStack.EMPTY); this.container.setItem(FUNC_PERK_SLOT, ItemStack.EMPTY);
// } }
// } }
//
// var damagePerk = PerkHelper.getPerkByType(pStack, Perk.Type.DAMAGE); var damagePerk = PerkHelper.getPerkByType(pStack, Perk.Type.DAMAGE);
// if (damagePerk != null) { if (damagePerk != null) {
// if (this.container.getItem(DAMAGE_PERK_SLOT).getItem() instanceof PerkItem perkItem && perkItem.getPerk() == damagePerk) { if (this.container.getItem(DAMAGE_PERK_SLOT).getItem() instanceof PerkItem<?> perkItem && perkItem.getPerk() == damagePerk) {
// this.container.setItem(DAMAGE_PERK_SLOT, ItemStack.EMPTY); this.container.setItem(DAMAGE_PERK_SLOT, ItemStack.EMPTY);
// } }
// } }
this.upgradePoint.set(0); this.upgradePoint.set(0);
this.ammoPerkLevel.set(0); this.ammoPerkLevel.set(0);
@ -425,17 +426,17 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
} }
public boolean mayPlace(@NotNull ItemStack pStack) { public boolean mayPlace(@NotNull ItemStack pStack) {
// if (pStack.getItem() instanceof GunItem) { if (pStack.getItem() instanceof GunItem) {
// ItemStack ammoPerk = this.container.getItem(AMMO_PERK_SLOT); ItemStack ammoPerk = this.container.getItem(AMMO_PERK_SLOT);
// ItemStack funcPerk = this.container.getItem(FUNC_PERK_SLOT); ItemStack funcPerk = this.container.getItem(FUNC_PERK_SLOT);
// ItemStack damagePerk = this.container.getItem(DAMAGE_PERK_SLOT); ItemStack damagePerk = this.container.getItem(DAMAGE_PERK_SLOT);
//
// boolean flag1 = ammoPerk.isEmpty(); boolean flag1 = ammoPerk.isEmpty();
// boolean flag2 = funcPerk.isEmpty(); boolean flag2 = funcPerk.isEmpty();
// boolean flag3 = damagePerk.isEmpty(); boolean flag3 = damagePerk.isEmpty();
//
// return flag1 && flag2 && flag3 && this.container.getItem(RESULT_SLOT).isEmpty() && this.container.getItem(INPUT_SLOT).isEmpty(); return flag1 && flag2 && flag3 && this.container.getItem(RESULT_SLOT).isEmpty() && this.container.getItem(INPUT_SLOT).isEmpty();
// } }
return false; return false;
} }
@ -471,9 +472,11 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
case DAMAGE -> DAMAGE_PERK_SLOT; case DAMAGE -> DAMAGE_PERK_SLOT;
}; };
return pStack.getItem() instanceof PerkItem<?> perkItem && perkItem.getPerk().type == type; return pStack.getItem() instanceof PerkItem<?> perkItem && perkItem.getPerk().type == type
// && !container.getItem(INPUT_SLOT).isEmpty() && container.getItem(INPUT_SLOT).getItem() instanceof GunItem gunItem && !container.getItem(INPUT_SLOT).isEmpty()
// && gunItem.canApplyPerk(perkItem.getPerk()) && container.getItem(slot).isEmpty(); && container.getItem(INPUT_SLOT).getItem() instanceof GunItem gunItem
&& gunItem.canApplyPerk(perkItem.getPerk())
&& container.getItem(slot).isEmpty();
} }
public int getMaxStackSize() { public int getMaxStackSize() {

View file

@ -4,8 +4,12 @@ import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.capability.ModCapabilities; import com.atsuishio.superbwarfare.capability.ModCapabilities;
import com.atsuishio.superbwarfare.event.GunEventHandler; import com.atsuishio.superbwarfare.event.GunEventHandler;
import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModPerks;
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.perk.AmmoPerk;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.*; import com.atsuishio.superbwarfare.tools.*;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.ParticleTypes;
@ -79,13 +83,9 @@ public record ShootMessage(double spread) implements CustomPacketPayload {
} }
} }
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
for (int index0 = 0; index0 < ( for (int index0 = 0; index0 < (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? 1 : projectileAmount); index0++) {
// todo perk
// perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? 1 : projectileAmount
projectileAmount
); index0++) {
GunEventHandler.gunShoot(player, spared); GunEventHandler.gunShoot(player, spared);
} }
@ -106,8 +106,7 @@ public record ShootMessage(double spread) implements CustomPacketPayload {
} }
} }
// TODO perk var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
float pitch = tag.getDouble("heat") <= 40 ? 1 : (float) (1 - 0.025 * Math.abs(40 - tag.getDouble("heat"))); float pitch = tag.getDouble("heat") <= 40 ? 1 : (float) (1 - 0.025 * Math.abs(40 - tag.getDouble("heat")));
if (!player.level().isClientSide() && player instanceof ServerPlayer) { if (!player.level().isClientSide() && player instanceof ServerPlayer) {
@ -117,9 +116,9 @@ public record ShootMessage(double spread) implements CustomPacketPayload {
player.playSound(ModSounds.MINIGUN_FAR.get(), soundRadius * 0.5f, pitch); player.playSound(ModSounds.MINIGUN_FAR.get(), soundRadius * 0.5f, pitch);
player.playSound(ModSounds.MINIGUN_VERYFAR.get(), soundRadius, pitch); player.playSound(ModSounds.MINIGUN_VERYFAR.get(), soundRadius, pitch);
// if (perk == ModPerks.BEAST_BULLET.get()) { if (perk == ModPerks.BEAST_BULLET.get()) {
// player.playSound(ModSounds.HENG.get(), 4f, pitch); player.playSound(ModSounds.HENG.get(), 4f, pitch);
// } }
} }
GunEventHandler.gunShoot(player, spared); GunEventHandler.gunShoot(player, spared);

View file

@ -0,0 +1,255 @@
package com.atsuishio.superbwarfare.perk;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModPerks;
import com.atsuishio.superbwarfare.item.PerkItem;
import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.neoforged.neoforge.registries.DeferredHolder;
import javax.annotation.Nullable;
import java.util.Optional;
import java.util.function.Predicate;
public class PerkHelper {
private static final String TAG_PERK_ID = "id";
private static final String TAG_PERK_LEVEL = "level";
private static final String TAG_PERK = "Perks";
/**
* 把一个Perk封装成nbt进行存储
*/
public static CompoundTag makePerk(@Nullable ResourceLocation pId, int pLevel) {
CompoundTag compoundtag = new CompoundTag();
compoundtag.putString(TAG_PERK_ID, String.valueOf(pId));
compoundtag.putShort(TAG_PERK_LEVEL, (short) pLevel);
return compoundtag;
}
public static CompoundTag setPerkLevel(CompoundTag pCompound, int pLevel) {
pCompound.putShort(TAG_PERK_LEVEL, (short) pLevel);
return pCompound;
}
public static int getPerkLevel(CompoundTag pCompound) {
return Mth.clamp(pCompound.getInt(TAG_PERK_LEVEL), 0, 255);
}
@Nullable
public static ResourceLocation getPerkId(CompoundTag pCompoundTag) {
return ResourceLocation.tryParse(pCompoundTag.getString(TAG_PERK_ID));
}
@Nullable
public static ResourceLocation getPerkId(Perk perk) {
return switch (perk.type) {
case AMMO -> ModPerks.AMMO_PERKS.getEntries().stream()
.filter(p -> p.get().descriptionId.equals(perk.descriptionId))
.findFirst()
.map(p -> ResourceLocation.tryParse(p.value().descriptionId))
.orElse(null);
case FUNCTIONAL -> ModPerks.FUNC_PERKS.getEntries().stream()
.filter(p -> p.get().descriptionId.equals(perk.descriptionId))
.findFirst()
.map(p -> ResourceLocation.tryParse(p.value().descriptionId))
.orElse(null);
case DAMAGE -> ModPerks.DAMAGE_PERKS.getEntries().stream()
.filter(p -> p.get().descriptionId.equals(perk.descriptionId))
.findFirst()
.map(p -> ResourceLocation.tryParse(p.value().descriptionId))
.orElse(null);
};
}
public static int getItemPerkLevel(Perk perk, ItemStack stack) {
if (stack.isEmpty()) {
return 0;
}
var tag = NBTTool.getTag(stack);
var tagPerk = tag.getCompound(TAG_PERK);
if (!tagPerk.contains(perk.type.getName())) {
return 0;
}
var pt = tagPerk.getCompound(perk.type.getName());
ResourceLocation id = getPerkId(perk);
if (id == null) {
return 0;
}
if (!pt.getString(TAG_PERK_ID).equals(makeId(id))) {
return 0;
}
return getPerkLevel(getPerkTag(stack, perk.type));
}
public static CompoundTag getPerkTag(ItemStack stack, Perk.Type type) {
var tag = NBTTool.getTag(stack);
var tagPerk = tag.getCompound(TAG_PERK);
if (!tagPerk.contains(type.getName())) return new CompoundTag();
return tagPerk.getCompound(type.getName());
}
public static void setPerk(ItemStack stack, Perk perk, int level) {
var tag = NBTTool.getTag(stack);
var perkTag = tag.getCompound(TAG_PERK);
if (perkTag.isEmpty()) {
perkTag = new CompoundTag();
}
perkTag.put(perk.type.getName(), makePerk(getPerkId(perk), level));
tag.put(TAG_PERK, perkTag);
NBTTool.saveTag(stack, tag);
}
public static void setPerk(ItemStack stack, Perk perk) {
setPerk(stack, perk, 1);
}
@Nullable
public static Perk getPerkByType(ItemStack stack, Perk.Type type) {
var tag = NBTTool.getTag(stack);
var tagPerk = tag.getCompound(TAG_PERK);
if (!tagPerk.contains(type.getName())) {
return null;
}
return switch (type) {
case AMMO -> ModPerks.AMMO_PERKS.getEntries().stream()
.filter(p -> makeId(p.getId()).equals(tagPerk.getCompound(type.getName()).getString(TAG_PERK_ID)))
.findFirst()
.map(DeferredHolder::value)
.orElse(null);
case FUNCTIONAL -> ModPerks.FUNC_PERKS.getEntries().stream()
.filter(p -> makeId(p.getId()).equals(tagPerk.getCompound(type.getName()).getString(TAG_PERK_ID)))
.findFirst()
.map(DeferredHolder::value)
.orElse(null);
case DAMAGE -> ModPerks.DAMAGE_PERKS.getEntries().stream()
.filter(p -> makeId(p.getId()).equals(tagPerk.getCompound(type.getName()).getString(TAG_PERK_ID)))
.findFirst()
.map(DeferredHolder::value)
.orElse(null);
};
}
public static void removePerkByType(ItemStack stack, Perk.Type type) {
var tag = NBTTool.getTag(stack);
var tagPerk = tag.getCompound(TAG_PERK);
if (!tagPerk.contains(type.getName())) {
return;
}
tagPerk.remove(type.getName());
tag.put(TAG_PERK, tagPerk);
}
public static Optional<DeferredHolder<Item, ? extends Item>> getPerkItem(Perk perk) {
return ModItems.PERKS.getEntries().stream().filter(p -> {
if (p.get() instanceof PerkItem<?> perkItem) {
return perkItem.getPerk() == perk;
}
return false;
}).findFirst();
}
public static String makeId(ResourceLocation resourceLocation) {
return resourceLocation.getNamespace() + ":" + resourceLocation.getPath();
}
public static final Predicate<Perk> SHOTGUN_PERKS = perk -> switch (perk.type) {
case AMMO -> !perk.descriptionId.equals("butterfly_bullet") && perk != ModPerks.MICRO_MISSILE.get()
&& perk != ModPerks.LONGER_WIRE.get();
case FUNCTIONAL -> perk == ModPerks.SUBSISTENCE.get()
|| perk == ModPerks.POWERFUL_ATTRACTION.get()
|| perk == ModPerks.HEAL_CLIP.get()
|| perk == ModPerks.FIELD_DOCTOR.get()
|| perk == ModPerks.INTELLIGENT_CHIP.get();
case DAMAGE -> perk == ModPerks.GUTSHOT_STRAIGHT.get()
|| perk == ModPerks.MONSTER_HUNTER.get()
|| perk == ModPerks.KILL_CLIP.get()
|| perk == ModPerks.VORPAL_WEAPON.get();
};
public static final Predicate<Perk> RIFLE_PERKS = perk -> switch (perk.type) {
case AMMO -> perk != ModPerks.MICRO_MISSILE.get() && perk != ModPerks.LONGER_WIRE.get();
case FUNCTIONAL -> perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FIELD_DOCTOR.get() ||
perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get() ||
perk == ModPerks.POWERFUL_ATTRACTION.get() || perk == ModPerks.INTELLIGENT_CHIP.get();
case DAMAGE ->
perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get() ||
perk == ModPerks.HEAD_SEEKER.get() || perk == ModPerks.DESPERADO.get() || perk == ModPerks.VORPAL_WEAPON.get();
};
public static final Predicate<Perk> HANDGUN_PERKS = perk -> switch (perk.type) {
case AMMO -> !perk.descriptionId.equals("butterfly_bullet") && perk != ModPerks.MICRO_MISSILE.get()
&& perk != ModPerks.LONGER_WIRE.get();
case FUNCTIONAL -> perk == ModPerks.HEAL_CLIP.get()
|| perk == ModPerks.FIELD_DOCTOR.get()
|| perk == ModPerks.SUBSISTENCE.get()
|| perk == ModPerks.POWERFUL_ATTRACTION.get()
|| perk == ModPerks.INTELLIGENT_CHIP.get();
case DAMAGE -> perk == ModPerks.KILL_CLIP.get()
|| perk == ModPerks.GUTSHOT_STRAIGHT.get()
|| perk == ModPerks.MONSTER_HUNTER.get()
|| perk == ModPerks.VORPAL_WEAPON.get();
};
public static final Predicate<Perk> SNIPER_RIFLE_PERKS = perk -> switch (perk.type) {
case AMMO -> !perk.descriptionId.equals("butterfly_bullet") && perk != ModPerks.MICRO_MISSILE.get()
&& perk != ModPerks.LONGER_WIRE.get();
case FUNCTIONAL -> perk == ModPerks.HEAL_CLIP.get()
|| perk == ModPerks.FOURTH_TIMES_CHARM.get()
|| perk == ModPerks.POWERFUL_ATTRACTION.get()
|| perk == ModPerks.INTELLIGENT_CHIP.get();
case DAMAGE -> perk == ModPerks.KILL_CLIP.get()
|| perk == ModPerks.MONSTER_HUNTER.get()
|| perk == ModPerks.VORPAL_WEAPON.get();
};
public static final Predicate<Perk> SMG_PERKS = perk -> switch (perk.type) {
case AMMO -> perk != ModPerks.MICRO_MISSILE.get() && perk != ModPerks.LONGER_WIRE.get();
case FUNCTIONAL -> perk == ModPerks.HEAL_CLIP.get()
|| perk == ModPerks.FOURTH_TIMES_CHARM.get()
|| perk == ModPerks.SUBSISTENCE.get()
|| perk == ModPerks.POWERFUL_ATTRACTION.get()
|| perk == ModPerks.INTELLIGENT_CHIP.get();
case DAMAGE -> perk == ModPerks.KILL_CLIP.get()
|| perk == ModPerks.GUTSHOT_STRAIGHT.get()
|| perk == ModPerks.MONSTER_HUNTER.get()
|| perk == ModPerks.HEAD_SEEKER.get()
|| perk == ModPerks.DESPERADO.get()
|| perk == ModPerks.VORPAL_WEAPON.get();
};
public static final Predicate<Perk> MACHINE_GUN_PERKS = perk -> switch (perk.type) {
case AMMO -> perk != ModPerks.MICRO_MISSILE.get() && perk != ModPerks.LONGER_WIRE.get();
case FUNCTIONAL -> perk == ModPerks.FOURTH_TIMES_CHARM.get()
|| perk == ModPerks.SUBSISTENCE.get()
|| perk == ModPerks.POWERFUL_ATTRACTION.get()
|| perk == ModPerks.INTELLIGENT_CHIP.get();
case DAMAGE -> perk == ModPerks.MONSTER_HUNTER.get()
|| perk == ModPerks.KILLING_TALLY.get()
|| perk == ModPerks.VORPAL_WEAPON.get();
};
public static final Predicate<Perk> MAGAZINE_PERKS = perk -> false;
public static final Predicate<Perk> LAUNCHER_PERKS = perk -> perk == ModPerks.MONSTER_HUNTER.get()
|| perk == ModPerks.POWERFUL_ATTRACTION.get()
|| perk == ModPerks.INTELLIGENT_CHIP.get()
|| perk == ModPerks.VORPAL_WEAPON.get();
}