实现Perk相关功能
This commit is contained in:
parent
9439922828
commit
860ecc63ae
48 changed files with 1128 additions and 893 deletions
|
@ -10,7 +10,6 @@ import com.atsuishio.superbwarfare.entity.vehicle.base.WeaponVehicleEntity;
|
|||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.init.*;
|
||||
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.perk.PerkHelper;
|
||||
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.level.Level;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraftforge.client.settings.KeyConflictContext;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.client.event.InputEvent;
|
||||
import net.neoforged.neoforge.client.settings.KeyConflictContext;
|
||||
import net.neoforged.neoforge.network.PacketDistributor;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
|
@ -202,9 +201,12 @@ public class ClickHandler {
|
|||
if (key == Minecraft.getInstance().options.keyJump.getKey().getValue()) {
|
||||
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()) {
|
||||
PacketDistributor.sendToServer(new ReloadMessage(0));
|
||||
}
|
||||
|
@ -222,7 +224,8 @@ public class ClickHandler {
|
|||
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 (ModKeyMappings.EDIT_GRIP.getKeyModifier().isActive(KeyConflictContext.IN_GAME)) {
|
||||
if (key == ModKeyMappings.EDIT_GRIP.getKey().getValue() && gunItem.hasCustomGrip(stack)) {
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
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.client.gui.screens.Screen;
|
||||
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));
|
||||
}
|
||||
|
||||
// TODO perk
|
||||
public static double perkDamage(ItemStack stack) {
|
||||
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
// if (perk instanceof AmmoPerk ammoPerk) {
|
||||
// return ammoPerk.damageRate;
|
||||
// }
|
||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
if (perk instanceof AmmoPerk ammoPerk) {
|
||||
return ammoPerk.damageRate;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
public static boolean heBullet(ItemStack stack) {
|
||||
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
// return perk == ModPerks.HE_BULLET.get();
|
||||
return false;
|
||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
return perk == ModPerks.HE_BULLET.get();
|
||||
}
|
||||
|
||||
public static int heBulletLevel(ItemStack stack) {
|
||||
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
// if (perk == ModPerks.HE_BULLET.get()) {
|
||||
// return PerkHelper.getItemPerkLevel(perk, stack);
|
||||
// }
|
||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
if (perk == ModPerks.HE_BULLET.get()) {
|
||||
return PerkHelper.getItemPerkLevel(perk, stack);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,9 +3,14 @@ package com.atsuishio.superbwarfare.client.overlay;
|
|||
import com.atsuishio.superbwarfare.ModUtils;
|
||||
import com.atsuishio.superbwarfare.capability.ModCapabilities;
|
||||
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.init.ModItems;
|
||||
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.mojang.blaze3d.platform.GlStateManager;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
|
@ -53,9 +58,8 @@ public class CrossHairOverlay {
|
|||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||
if (cap != null && cap.edit) return;
|
||||
|
||||
// todo ban hand
|
||||
// if (!player.getMainHandItem().is(ModTags.Items.GUN) || (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player)))
|
||||
// return;
|
||||
if (!player.getMainHandItem().is(ModTags.Items.GUN) || (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player)))
|
||||
return;
|
||||
|
||||
GuiGraphics guiGraphics = event.getGuiGraphics();
|
||||
|
||||
|
@ -65,8 +69,7 @@ public class CrossHairOverlay {
|
|||
float moveX = 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) {
|
||||
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);
|
||||
if (!player.isSprinting() || player.getPersistentData().getDouble("noRun") > 0) {
|
||||
if (stack.is(ModTags.Items.SHOTGUN)) {
|
||||
// if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
|
||||
// normalCrossHair(guiGraphics, w, h, spread, moveX, moveY);
|
||||
// } else {
|
||||
shotgunCrossHair(guiGraphics, finPosX, finPosY, finLength);
|
||||
// }
|
||||
if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
|
||||
normalCrossHair(guiGraphics, w, h, spread, moveX, moveY);
|
||||
} else {
|
||||
shotgunCrossHair(guiGraphics, finPosX, finPosY, finLength);
|
||||
}
|
||||
} else {
|
||||
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);
|
||||
if (!player.isSprinting() || player.getPersistentData().getDouble("noRun") > 0 || ClientEventHandler.pullPos > 0) {
|
||||
if (ClientEventHandler.zoomTime < 0.1) {
|
||||
// if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
|
||||
// normalCrossHair(guiGraphics, w, h, spread, moveX, moveY);
|
||||
// } else {
|
||||
shotgunCrossHair(guiGraphics, finPosX, finPosY, finLength);
|
||||
// }
|
||||
if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
|
||||
normalCrossHair(guiGraphics, w, h, spread, moveX, moveY);
|
||||
} else {
|
||||
shotgunCrossHair(guiGraphics, finPosX, finPosY, finLength);
|
||||
}
|
||||
} else {
|
||||
normalCrossHair(guiGraphics, w, h, spread, moveX, moveY);
|
||||
}
|
||||
|
@ -120,10 +123,7 @@ public class CrossHairOverlay {
|
|||
}
|
||||
|
||||
// 在开启伤害指示器时才进行渲染
|
||||
if (DisplayConfig.KILL_INDICATION.get()
|
||||
// TODO ah6
|
||||
// && !(player.getVehicle() instanceof Ah6Entity ah6Entity && ah6Entity.getFirstPassenger() == player)
|
||||
) {
|
||||
if (DisplayConfig.KILL_INDICATION.get() && !(player.getVehicle() instanceof Ah6Entity ah6Entity && ah6Entity.getFirstPassenger() == player)) {
|
||||
renderKillIndicator(guiGraphics, w, h, moveX, moveY);
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,9 @@ import com.atsuishio.superbwarfare.capability.ModCapabilities;
|
|||
import com.atsuishio.superbwarfare.client.RenderHelper;
|
||||
import com.atsuishio.superbwarfare.entity.vehicle.base.ArmedVehicleEntity;
|
||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.SeekTool;
|
||||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
|
@ -48,9 +50,8 @@ public class HandsomeFrameOverlay {
|
|||
|
||||
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 = 0;
|
||||
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.INTELLIGENT_CHIP.get(), stack);
|
||||
if (level == 0) return;
|
||||
|
||||
RenderSystem.disableDepthTest();
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
package com.atsuishio.superbwarfare.client.tooltip;
|
||||
|
||||
import com.atsuishio.superbwarfare.client.TooltipTool;
|
||||
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;
|
||||
|
||||
public class ClientBocekImageTooltip extends ClientGunImageTooltip {
|
||||
|
@ -13,26 +20,24 @@ public class ClientBocekImageTooltip extends ClientGunImageTooltip {
|
|||
protected Component getDamageComponent() {
|
||||
boolean slug = false;
|
||||
|
||||
// TODO perk
|
||||
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
// if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
|
||||
// slug = true;
|
||||
// }
|
||||
//
|
||||
// double total = GunsTool.getGunDoubleTag(stack, "Damage", 0) * TooltipTool.perkDamage(stack);
|
||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
|
||||
slug = true;
|
||||
}
|
||||
|
||||
// if (slug) {
|
||||
// return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
|
||||
// .append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
// .append(Component.literal(FormatTool.format1D(total) + (TooltipTool.heBullet(stack) ? " + " +
|
||||
// FormatTool.format1D(0.8 * total * (1 + 0.1 * TooltipTool.heBulletLevel(stack))) : "")).withStyle(ChatFormatting.GREEN));
|
||||
// } else {
|
||||
// return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
|
||||
// .append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
// .append(Component.literal(FormatTool.format1D(total * 0.1, " * 10")).withStyle(ChatFormatting.GREEN))
|
||||
// .append(Component.literal(" / ").withStyle(ChatFormatting.RESET))
|
||||
// .append(Component.literal(FormatTool.format1D(total)).withStyle(ChatFormatting.GREEN));
|
||||
// }
|
||||
return Component.literal("");
|
||||
double total = GunsTool.getGunDoubleTag(stack, "Damage", 0) * TooltipTool.perkDamage(stack);
|
||||
|
||||
if (slug) {
|
||||
return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
|
||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(FormatTool.format1D(total) + (TooltipTool.heBullet(stack) ? " + " +
|
||||
FormatTool.format1D(0.8 * total * (1 + 0.1 * TooltipTool.heBulletLevel(stack))) : "")).withStyle(ChatFormatting.GREEN));
|
||||
} else {
|
||||
return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
|
||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(FormatTool.format1D(total * 0.1, " * 10")).withStyle(ChatFormatting.GREEN))
|
||||
.append(Component.literal(" / ").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(FormatTool.format1D(total)).withStyle(ChatFormatting.GREEN));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +1,26 @@
|
|||
package com.atsuishio.superbwarfare.client.tooltip;
|
||||
|
||||
import com.atsuishio.superbwarfare.client.TooltipTool;
|
||||
import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent;
|
||||
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.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphics;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
// TODO perk相关信息渲染
|
||||
public class ClientGunImageTooltip implements ClientTooltipComponent {
|
||||
|
||||
protected final int width;
|
||||
|
@ -53,20 +62,18 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
|
|||
}
|
||||
|
||||
protected boolean shouldRenderBypassAndHeadshotTooltip() {
|
||||
// return GunsTool.getGunDoubleTag(stack, "BypassesArmor", 0) > 0 || GunsTool.getGunDoubleTag(stack, "Headshot", 0) > 0;
|
||||
return false;
|
||||
return GunsTool.getGunDoubleTag(stack, "BypassesArmor", 0) > 0 || GunsTool.getGunDoubleTag(stack, "Headshot", 0) > 0;
|
||||
}
|
||||
|
||||
protected boolean shouldRenderEditTooltip() {
|
||||
// if (this.stack.getItem() instanceof GunItem gunItem) {
|
||||
// return gunItem.isCustomizable(stack);
|
||||
// }
|
||||
if (this.stack.getItem() instanceof GunItem gunItem) {
|
||||
return gunItem.isCustomizable(stack);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
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 false;
|
||||
return PerkHelper.getPerkByType(stack, Perk.Type.AMMO) != null || PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE) != null || PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL) != null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -82,24 +89,23 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
|
|||
* 获取武器伤害的文本组件
|
||||
*/
|
||||
protected Component getDamageComponent() {
|
||||
// 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) + (TooltipTool.heBullet(stack) ? " + "
|
||||
// + FormatTool.format1D(0.8 * damage * (1 + 0.1 * TooltipTool.heBulletLevel(stack))) : "")).withStyle(ChatFormatting.GREEN));
|
||||
return Component.literal("");
|
||||
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) + (TooltipTool.heBullet(stack) ? " + "
|
||||
+ FormatTool.format1D(0.8 * damage * (1 + 0.1 * TooltipTool.heBulletLevel(stack))) : "")).withStyle(ChatFormatting.GREEN));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取武器射速的文本组件
|
||||
*/
|
||||
protected Component getRpmComponent() {
|
||||
// if (this.stack.getItem() instanceof GunItem gunItem && gunItem.isAutoWeapon(this.stack)) {
|
||||
// return Component.translatable("des.superbwarfare.guns.rpm").withStyle(ChatFormatting.GRAY)
|
||||
// .append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
// .append(Component.literal(FormatTool.format0D(GunsTool.getGunIntTag(stack, "RPM", 0)))
|
||||
// .withStyle(ChatFormatting.GREEN));
|
||||
// }
|
||||
if (this.stack.getItem() instanceof GunItem gunItem && gunItem.isAutoWeapon(this.stack)) {
|
||||
return Component.translatable("des.superbwarfare.guns.rpm").withStyle(ChatFormatting.GRAY)
|
||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(FormatTool.format0D(GunsTool.getGunIntTag(stack, "RPM", 0)))
|
||||
.withStyle(ChatFormatting.GREEN));
|
||||
}
|
||||
return Component.literal("");
|
||||
}
|
||||
|
||||
|
@ -116,39 +122,37 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
|
|||
* 获取武器等级文本组件
|
||||
*/
|
||||
protected Component getLevelComponent() {
|
||||
// int level = GunsTool.getGunIntTag(stack, "Level", 0);
|
||||
// double rate = GunsTool.getGunDoubleTag(stack, "Exp", 0) / (20 * Math.pow(level, 2) + 160 * level + 20);
|
||||
int level = GunsTool.getGunIntTag(stack, "Level", 0);
|
||||
double rate = GunsTool.getGunDoubleTag(stack, "Exp", 0) / (20 * Math.pow(level, 2) + 160 * level + 20);
|
||||
|
||||
ChatFormatting formatting;
|
||||
// if (level < 10) {
|
||||
// formatting = ChatFormatting.WHITE;
|
||||
// } else if (level < 20) {
|
||||
// formatting = ChatFormatting.AQUA;
|
||||
// } else if (level < 30) {
|
||||
// formatting = ChatFormatting.LIGHT_PURPLE;
|
||||
// } else if (level < 40) {
|
||||
// formatting = ChatFormatting.GOLD;
|
||||
// } else {
|
||||
// formatting = ChatFormatting.RED;
|
||||
// }
|
||||
if (level < 10) {
|
||||
formatting = ChatFormatting.WHITE;
|
||||
} else if (level < 20) {
|
||||
formatting = ChatFormatting.AQUA;
|
||||
} else if (level < 30) {
|
||||
formatting = ChatFormatting.LIGHT_PURPLE;
|
||||
} else if (level < 40) {
|
||||
formatting = ChatFormatting.GOLD;
|
||||
} else {
|
||||
formatting = ChatFormatting.RED;
|
||||
}
|
||||
|
||||
// return Component.translatable("des.superbwarfare.guns.level").withStyle(ChatFormatting.GRAY)
|
||||
// .append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
// .append(Component.literal(level + "").withStyle(formatting).withStyle(ChatFormatting.BOLD))
|
||||
// .append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
// .append(Component.literal(" (" + FormatTool.DECIMAL_FORMAT_2ZZZ.format(rate * 100) + "%)").withStyle(ChatFormatting.GRAY));
|
||||
return Component.literal("");
|
||||
return Component.translatable("des.superbwarfare.guns.level").withStyle(ChatFormatting.GRAY)
|
||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(level + "").withStyle(formatting).withStyle(ChatFormatting.BOLD))
|
||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(" (" + FormatTool.DECIMAL_FORMAT_2ZZZ.format(rate * 100) + "%)").withStyle(ChatFormatting.GRAY));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取武器强化点数文本组件
|
||||
*/
|
||||
protected Component getUpgradePointComponent() {
|
||||
// int upgradePoint = Mth.floor(GunsTool.getGunDoubleTag(stack, "UpgradePoint", 0));
|
||||
// return Component.translatable("des.superbwarfare.guns.upgrade_point").withStyle(ChatFormatting.GRAY)
|
||||
// .append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
// .append(Component.literal(String.valueOf(upgradePoint)).withStyle(ChatFormatting.WHITE).withStyle(ChatFormatting.BOLD));
|
||||
return Component.literal("");
|
||||
int upgradePoint = Mth.floor(GunsTool.getGunDoubleTag(stack, "UpgradePoint", 0));
|
||||
return Component.translatable("des.superbwarfare.guns.upgrade_point").withStyle(ChatFormatting.GRAY)
|
||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(String.valueOf(upgradePoint)).withStyle(ChatFormatting.WHITE).withStyle(ChatFormatting.BOLD));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -165,29 +169,27 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
|
|||
*/
|
||||
protected Component getBypassComponent() {
|
||||
double perkBypassArmorRate = 0;
|
||||
// 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);
|
||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
|
||||
// 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));
|
||||
return Component.literal("");
|
||||
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)
|
||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(FormatTool.format2D(bypassRate * 100, "%")).withStyle(ChatFormatting.GOLD));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取武器爆头倍率文本组件
|
||||
*/
|
||||
protected Component getHeadshotComponent() {
|
||||
// double headshot = GunsTool.getGunDoubleTag(stack, "Headshot", 0);
|
||||
// return Component.translatable("des.superbwarfare.guns.headshot").withStyle(ChatFormatting.GRAY)
|
||||
// .append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
// .append(Component.literal(FormatTool.format1D(headshot, "x")).withStyle(ChatFormatting.AQUA));
|
||||
return Component.literal("");
|
||||
double headshot = GunsTool.getGunDoubleTag(stack, "Headshot", 0);
|
||||
return Component.translatable("des.superbwarfare.guns.headshot").withStyle(ChatFormatting.GRAY)
|
||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(FormatTool.format1D(headshot, "x")).withStyle(ChatFormatting.AQUA));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -213,55 +215,55 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
|
|||
|
||||
int xOffset = -20;
|
||||
|
||||
// Perk ammoPerk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
// if (ammoPerk != null && PerkHelper.getPerkItem(ammoPerk).isPresent()) {
|
||||
// xOffset += 20;
|
||||
//
|
||||
// var ammoItem = PerkHelper.getPerkItem(ammoPerk).get().get();
|
||||
// ItemStack perkStack = ammoItem.getDefaultInstance();
|
||||
//
|
||||
// CompoundTag ammoTag = PerkHelper.getPerkTag(stack, Perk.Type.AMMO);
|
||||
// if (!ammoTag.isEmpty()) {
|
||||
// int level = PerkHelper.getItemPerkLevel(ammoPerk, stack);
|
||||
// perkStack.setCount(level);
|
||||
// }
|
||||
// guiGraphics.renderItem(perkStack, x + xOffset, y + 2);
|
||||
// guiGraphics.renderItemDecorations(font, perkStack, x + xOffset, y + 2);
|
||||
// }
|
||||
//
|
||||
// Perk funcPerk = PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL);
|
||||
// if (funcPerk != null && PerkHelper.getPerkItem(funcPerk).isPresent()) {
|
||||
// xOffset += 20;
|
||||
//
|
||||
// var funcItem = PerkHelper.getPerkItem(funcPerk).get().get();
|
||||
// ItemStack perkStack = funcItem.getDefaultInstance();
|
||||
//
|
||||
// CompoundTag funcTag = PerkHelper.getPerkTag(stack, Perk.Type.FUNCTIONAL);
|
||||
// if (!funcTag.isEmpty()) {
|
||||
// int level = PerkHelper.getItemPerkLevel(funcPerk, stack);
|
||||
// perkStack.setCount(level);
|
||||
// }
|
||||
//
|
||||
// guiGraphics.renderItem(perkStack, x + xOffset, y + 2);
|
||||
// guiGraphics.renderItemDecorations(font, perkStack, x + xOffset, y + 2);
|
||||
// }
|
||||
//
|
||||
// Perk damagePerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
|
||||
// if (damagePerk != null && PerkHelper.getPerkItem(damagePerk).isPresent()) {
|
||||
// xOffset += 20;
|
||||
//
|
||||
// var damageItem = PerkHelper.getPerkItem(damagePerk).get().get();
|
||||
// ItemStack perkStack = damageItem.getDefaultInstance();
|
||||
//
|
||||
// CompoundTag damageTag = PerkHelper.getPerkTag(stack, Perk.Type.DAMAGE);
|
||||
// if (!damageTag.isEmpty()) {
|
||||
// int level = PerkHelper.getItemPerkLevel(damagePerk, stack);
|
||||
// perkStack.setCount(level);
|
||||
// }
|
||||
//
|
||||
// guiGraphics.renderItem(perkStack, x + xOffset, y + 2);
|
||||
// guiGraphics.renderItemDecorations(font, perkStack, x + xOffset, y + 2);
|
||||
// }
|
||||
Perk ammoPerk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
if (ammoPerk != null && PerkHelper.getPerkItem(ammoPerk).isPresent()) {
|
||||
xOffset += 20;
|
||||
|
||||
var ammoItem = PerkHelper.getPerkItem(ammoPerk).get().get();
|
||||
ItemStack perkStack = ammoItem.getDefaultInstance();
|
||||
|
||||
CompoundTag ammoTag = PerkHelper.getPerkTag(stack, Perk.Type.AMMO);
|
||||
if (!ammoTag.isEmpty()) {
|
||||
int level = PerkHelper.getItemPerkLevel(ammoPerk, stack);
|
||||
perkStack.setCount(level);
|
||||
}
|
||||
guiGraphics.renderItem(perkStack, x + xOffset, y + 2);
|
||||
guiGraphics.renderItemDecorations(font, perkStack, x + xOffset, y + 2);
|
||||
}
|
||||
|
||||
Perk funcPerk = PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL);
|
||||
if (funcPerk != null && PerkHelper.getPerkItem(funcPerk).isPresent()) {
|
||||
xOffset += 20;
|
||||
|
||||
var funcItem = PerkHelper.getPerkItem(funcPerk).get().get();
|
||||
ItemStack perkStack = funcItem.getDefaultInstance();
|
||||
|
||||
CompoundTag funcTag = PerkHelper.getPerkTag(stack, Perk.Type.FUNCTIONAL);
|
||||
if (!funcTag.isEmpty()) {
|
||||
int level = PerkHelper.getItemPerkLevel(funcPerk, stack);
|
||||
perkStack.setCount(level);
|
||||
}
|
||||
|
||||
guiGraphics.renderItem(perkStack, x + xOffset, y + 2);
|
||||
guiGraphics.renderItemDecorations(font, perkStack, x + xOffset, y + 2);
|
||||
}
|
||||
|
||||
Perk damagePerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
|
||||
if (damagePerk != null && PerkHelper.getPerkItem(damagePerk).isPresent()) {
|
||||
xOffset += 20;
|
||||
|
||||
var damageItem = PerkHelper.getPerkItem(damagePerk).get().get();
|
||||
ItemStack perkStack = damageItem.getDefaultInstance();
|
||||
|
||||
CompoundTag damageTag = PerkHelper.getPerkTag(stack, Perk.Type.DAMAGE);
|
||||
if (!damageTag.isEmpty()) {
|
||||
int level = PerkHelper.getItemPerkLevel(damagePerk, stack);
|
||||
perkStack.setCount(level);
|
||||
}
|
||||
|
||||
guiGraphics.renderItem(perkStack, x + xOffset, y + 2);
|
||||
guiGraphics.renderItemDecorations(font, perkStack, x + xOffset, y + 2);
|
||||
}
|
||||
|
||||
guiGraphics.pose().popPose();
|
||||
}
|
||||
|
@ -276,71 +278,71 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
|
|||
|
||||
int yOffset = -5;
|
||||
|
||||
// Perk ammoPerk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
// if (ammoPerk != null && PerkHelper.getPerkItem(ammoPerk).isPresent()) {
|
||||
// yOffset += 25;
|
||||
// var ammoItem = PerkHelper.getPerkItem(ammoPerk).get().get();
|
||||
// guiGraphics.renderItem(ammoItem.getDefaultInstance(), x, y + 4 + yOffset);
|
||||
//
|
||||
// CompoundTag ammoTag = PerkHelper.getPerkTag(stack, Perk.Type.AMMO);
|
||||
// if (!ammoTag.isEmpty()) {
|
||||
// var ids = ammoTag.getString("id").split(":");
|
||||
// if (ids.length > 1) {
|
||||
// String id = ids[1];
|
||||
// var ammoComponent = Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.YELLOW)
|
||||
// .append(Component.literal(" ").withStyle(ChatFormatting.RESET))
|
||||
// .append(Component.literal(" Lvl. " + ammoTag.getInt("level")).withStyle(ChatFormatting.WHITE));
|
||||
// var ammoDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
|
||||
//
|
||||
// guiGraphics.drawString(font, ammoComponent, x + 20, y + yOffset + 2, 0xFFFFFF);
|
||||
// guiGraphics.drawString(font, ammoDesComponent, x + 20, y + yOffset + 12, 0xFFFFFF);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// Perk funcPerk = PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL);
|
||||
// if (funcPerk != null && PerkHelper.getPerkItem(funcPerk).isPresent()) {
|
||||
// yOffset += 25;
|
||||
// var funcItem = PerkHelper.getPerkItem(funcPerk).get().get();
|
||||
// guiGraphics.renderItem(funcItem.getDefaultInstance(), x, y + 4 + yOffset);
|
||||
//
|
||||
// CompoundTag funcTag = PerkHelper.getPerkTag(stack, Perk.Type.FUNCTIONAL);
|
||||
// if (!funcTag.isEmpty()) {
|
||||
// var ids = funcTag.getString("id").split(":");
|
||||
// if (ids.length > 1) {
|
||||
// String id = ids[1];
|
||||
// var funcComponent = Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.GREEN)
|
||||
// .append(Component.literal(" ").withStyle(ChatFormatting.RESET))
|
||||
// .append(Component.literal(" Lvl. " + funcTag.getInt("level")).withStyle(ChatFormatting.WHITE));
|
||||
// var funcDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
|
||||
//
|
||||
// guiGraphics.drawString(font, funcComponent, x + 20, y + yOffset + 2, 0xFFFFFF);
|
||||
// guiGraphics.drawString(font, funcDesComponent, x + 20, y + yOffset + 12, 0xFFFFFF);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// Perk damagePerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
|
||||
// if (damagePerk != null && PerkHelper.getPerkItem(damagePerk).isPresent()) {
|
||||
// yOffset += 25;
|
||||
// var damageItem = PerkHelper.getPerkItem(damagePerk).get().get();
|
||||
// guiGraphics.renderItem(damageItem.getDefaultInstance(), x, y + 4 + yOffset);
|
||||
//
|
||||
// CompoundTag damageTag = PerkHelper.getPerkTag(stack, Perk.Type.DAMAGE);
|
||||
// if (!damageTag.isEmpty()) {
|
||||
// var ids = damageTag.getString("id").split(":");
|
||||
// if (ids.length > 1) {
|
||||
// String id = ids[1];
|
||||
// var damageComponent = Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.RED)
|
||||
// .append(Component.literal(" ").withStyle(ChatFormatting.RESET))
|
||||
// .append(Component.literal(" Lvl. " + damageTag.getInt("level")).withStyle(ChatFormatting.WHITE));
|
||||
// var damageDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
|
||||
//
|
||||
// guiGraphics.drawString(font, damageComponent, x + 20, y + yOffset + 2, 0xFFFFFF);
|
||||
// guiGraphics.drawString(font, damageDesComponent, x + 20, y + yOffset + 12, 0xFFFFFF);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
Perk ammoPerk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
if (ammoPerk != null && PerkHelper.getPerkItem(ammoPerk).isPresent()) {
|
||||
yOffset += 25;
|
||||
var ammoItem = PerkHelper.getPerkItem(ammoPerk).get().get();
|
||||
guiGraphics.renderItem(ammoItem.getDefaultInstance(), x, y + 4 + yOffset);
|
||||
|
||||
CompoundTag ammoTag = PerkHelper.getPerkTag(stack, Perk.Type.AMMO);
|
||||
if (!ammoTag.isEmpty()) {
|
||||
var ids = ammoTag.getString("id").split(":");
|
||||
if (ids.length > 1) {
|
||||
String id = ids[1];
|
||||
var ammoComponent = Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.YELLOW)
|
||||
.append(Component.literal(" ").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(" Lvl. " + ammoTag.getInt("level")).withStyle(ChatFormatting.WHITE));
|
||||
var ammoDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
|
||||
|
||||
guiGraphics.drawString(font, ammoComponent, x + 20, y + yOffset + 2, 0xFFFFFF);
|
||||
guiGraphics.drawString(font, ammoDesComponent, x + 20, y + yOffset + 12, 0xFFFFFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Perk funcPerk = PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL);
|
||||
if (funcPerk != null && PerkHelper.getPerkItem(funcPerk).isPresent()) {
|
||||
yOffset += 25;
|
||||
var funcItem = PerkHelper.getPerkItem(funcPerk).get().get();
|
||||
guiGraphics.renderItem(funcItem.getDefaultInstance(), x, y + 4 + yOffset);
|
||||
|
||||
CompoundTag funcTag = PerkHelper.getPerkTag(stack, Perk.Type.FUNCTIONAL);
|
||||
if (!funcTag.isEmpty()) {
|
||||
var ids = funcTag.getString("id").split(":");
|
||||
if (ids.length > 1) {
|
||||
String id = ids[1];
|
||||
var funcComponent = Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.GREEN)
|
||||
.append(Component.literal(" ").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(" Lvl. " + funcTag.getInt("level")).withStyle(ChatFormatting.WHITE));
|
||||
var funcDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
|
||||
|
||||
guiGraphics.drawString(font, funcComponent, x + 20, y + yOffset + 2, 0xFFFFFF);
|
||||
guiGraphics.drawString(font, funcDesComponent, x + 20, y + yOffset + 12, 0xFFFFFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Perk damagePerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
|
||||
if (damagePerk != null && PerkHelper.getPerkItem(damagePerk).isPresent()) {
|
||||
yOffset += 25;
|
||||
var damageItem = PerkHelper.getPerkItem(damagePerk).get().get();
|
||||
guiGraphics.renderItem(damageItem.getDefaultInstance(), x, y + 4 + yOffset);
|
||||
|
||||
CompoundTag damageTag = PerkHelper.getPerkTag(stack, Perk.Type.DAMAGE);
|
||||
if (!damageTag.isEmpty()) {
|
||||
var ids = damageTag.getString("id").split(":");
|
||||
if (ids.length > 1) {
|
||||
String id = ids[1];
|
||||
var damageComponent = Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.RED)
|
||||
.append(Component.literal(" ").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(" Lvl. " + damageTag.getInt("level")).withStyle(ChatFormatting.WHITE));
|
||||
var damageDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
|
||||
|
||||
guiGraphics.drawString(font, damageComponent, x + 20, y + yOffset + 2, 0xFFFFFF);
|
||||
guiGraphics.drawString(font, damageDesComponent, x + 20, y + yOffset + 12, 0xFFFFFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
guiGraphics.pose().popPose();
|
||||
}
|
||||
|
@ -363,35 +365,35 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
|
|||
|
||||
int width = 0;
|
||||
|
||||
// CompoundTag ammoTag = PerkHelper.getPerkTag(stack, Perk.Type.AMMO);
|
||||
// if (!ammoTag.isEmpty()) {
|
||||
// var ids = ammoTag.getString("id").split(":");
|
||||
// if (ids.length > 1) {
|
||||
// String id = ids[1];
|
||||
// var ammoDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
|
||||
// width = Math.max(width, font.width(ammoDesComponent));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// CompoundTag funcTag = PerkHelper.getPerkTag(stack, Perk.Type.FUNCTIONAL);
|
||||
// if (!funcTag.isEmpty()) {
|
||||
// var ids = funcTag.getString("id").split(":");
|
||||
// if (ids.length > 1) {
|
||||
// String id = ids[1];
|
||||
// var funcDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
|
||||
// width = Math.max(width, font.width(funcDesComponent));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// CompoundTag damageTag = PerkHelper.getPerkTag(stack, Perk.Type.DAMAGE);
|
||||
// if (!damageTag.isEmpty()) {
|
||||
// var ids = damageTag.getString("id").split(":");
|
||||
// if (ids.length > 1) {
|
||||
// String id = ids[1];
|
||||
// var damageDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
|
||||
// width = Math.max(width, font.width(damageDesComponent));
|
||||
// }
|
||||
// }
|
||||
CompoundTag ammoTag = PerkHelper.getPerkTag(stack, Perk.Type.AMMO);
|
||||
if (!ammoTag.isEmpty()) {
|
||||
var ids = ammoTag.getString("id").split(":");
|
||||
if (ids.length > 1) {
|
||||
String id = ids[1];
|
||||
var ammoDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
|
||||
width = Math.max(width, font.width(ammoDesComponent));
|
||||
}
|
||||
}
|
||||
|
||||
CompoundTag funcTag = PerkHelper.getPerkTag(stack, Perk.Type.FUNCTIONAL);
|
||||
if (!funcTag.isEmpty()) {
|
||||
var ids = funcTag.getString("id").split(":");
|
||||
if (ids.length > 1) {
|
||||
String id = ids[1];
|
||||
var funcDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
|
||||
width = Math.max(width, font.width(funcDesComponent));
|
||||
}
|
||||
}
|
||||
|
||||
CompoundTag damageTag = PerkHelper.getPerkTag(stack, Perk.Type.DAMAGE);
|
||||
if (!damageTag.isEmpty()) {
|
||||
var ids = damageTag.getString("id").split(":");
|
||||
if (ids.length > 1) {
|
||||
String id = ids[1];
|
||||
var damageDesComponent = Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY);
|
||||
width = Math.max(width, font.width(damageDesComponent));
|
||||
}
|
||||
}
|
||||
|
||||
return width + 25;
|
||||
}
|
||||
|
@ -407,15 +409,15 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
|
|||
height += 16;
|
||||
} else {
|
||||
height += 16;
|
||||
// if (PerkHelper.getPerkByType(stack, Perk.Type.AMMO) != null) {
|
||||
// height += 25;
|
||||
// }
|
||||
// if (PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL) != null) {
|
||||
// height += 25;
|
||||
// }
|
||||
// if (PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE) != null) {
|
||||
// height += 25;
|
||||
// }
|
||||
if (PerkHelper.getPerkByType(stack, Perk.Type.AMMO) != null) {
|
||||
height += 25;
|
||||
}
|
||||
if (PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL) != null) {
|
||||
height += 25;
|
||||
}
|
||||
if (PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE) != null) {
|
||||
height += 25;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
package com.atsuishio.superbwarfare.client.tooltip;
|
||||
|
||||
import com.atsuishio.superbwarfare.client.TooltipTool;
|
||||
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;
|
||||
|
||||
public class ClientShotgunImageTooltip extends ClientGunImageTooltip {
|
||||
|
@ -13,25 +20,22 @@ public class ClientShotgunImageTooltip extends ClientGunImageTooltip {
|
|||
protected Component getDamageComponent() {
|
||||
boolean slug = false;
|
||||
|
||||
// TODO perk
|
||||
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
// if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
|
||||
// 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));
|
||||
// }
|
||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
|
||||
slug = true;
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.ShootMessage;
|
||||
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.animation.AnimationCurves;
|
||||
import net.minecraft.client.CameraType;
|
||||
|
@ -391,8 +394,7 @@ public class ClientEventHandler {
|
|||
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");
|
||||
|
||||
// 精准度
|
||||
|
@ -411,15 +413,13 @@ public class ClientEventHandler {
|
|||
if (stack.is(ModTags.Items.SNIPER_RIFLE) || stack.is(ModTags.Items.HEAVY_WEAPON)) {
|
||||
zoomSpread = 1 - (0.995 * zoomTime);
|
||||
} else if (stack.is(ModTags.Items.SHOTGUN)) {
|
||||
// if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
|
||||
// zoomSpread = 1 - (0.85 * zoomTime);
|
||||
// } else {
|
||||
// zoomSpread = 1 - (0.25 * zoomTime);
|
||||
// }
|
||||
// } else if (stack.is(ModItems.MINIGUN.get())) {
|
||||
// zoomSpread = 1 - (0.25 * zoomTime);
|
||||
zoomSpread = 1 - (0.9 * zoomTime);
|
||||
// TODO perk
|
||||
if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
|
||||
zoomSpread = 1 - (0.85 * zoomTime);
|
||||
} else {
|
||||
zoomSpread = 1 - (0.25 * zoomTime);
|
||||
}
|
||||
} else if (stack.is(ModItems.MINIGUN.get())) {
|
||||
zoomSpread = 1 - (0.25 * zoomTime);
|
||||
} else {
|
||||
zoomSpread = 1 - (0.9 * zoomTime);
|
||||
}
|
||||
|
@ -444,9 +444,8 @@ public class ClientEventHandler {
|
|||
}
|
||||
|
||||
if (GunsTool.getPerkIntTag(stack, "DesperadoTimePost") > 0) {
|
||||
// TODO perk
|
||||
// int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack);
|
||||
// rpm *= (int) (1.285 + 0.015 * perkLevel);
|
||||
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack);
|
||||
rpm *= (int) (1.285 + 0.015 * perkLevel);
|
||||
}
|
||||
|
||||
double rps = (double) rpm / 60;
|
||||
|
@ -570,9 +569,8 @@ public class ClientEventHandler {
|
|||
}
|
||||
|
||||
if (stack.is(ModItems.DEVOTION.get())) {
|
||||
// TODO perk
|
||||
// int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.TURBO_CHARGER.get(), stack);
|
||||
// customRpm = Math.min(customRpm + 15 + ((perkLevel > 0 ? 5 : 0) + 3 * perkLevel), 500);
|
||||
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.TURBO_CHARGER.get(), stack);
|
||||
customRpm = Math.min(customRpm + 15 + ((perkLevel > 0 ? 5 : 0) + 3 * perkLevel), 500);
|
||||
}
|
||||
|
||||
if (stack.getItem() == ModItems.SENTINEL.get()) {
|
||||
|
@ -599,15 +597,14 @@ public class ClientEventHandler {
|
|||
|
||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||
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")));
|
||||
|
||||
player.playSound(ModSounds.MINIGUN_FIRE_1P.get(), 1f, pitch);
|
||||
|
||||
// if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||
// player.playSound(ModSounds.HENG.get(), 1f, 1f);
|
||||
// }
|
||||
if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||
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)),
|
||||
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()) {
|
||||
// player.playSound(ModSounds.HENG.get(), 1f, 1f);
|
||||
// }
|
||||
if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||
player.playSound(ModSounds.HENG.get(), 1f, 1f);
|
||||
}
|
||||
|
||||
int barrelType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.BARREL);
|
||||
|
||||
|
@ -1403,18 +1399,17 @@ public class ClientEventHandler {
|
|||
&& cap != null
|
||||
&& !cap.edit) {
|
||||
if (!player.isShiftKeyDown()) {
|
||||
// TODO perk
|
||||
// int intelligentChipLevel = PerkHelper.getItemPerkLevel(ModPerks.INTELLIGENT_CHIP.get(), stack);
|
||||
//
|
||||
// if (intelligentChipLevel > 0) {
|
||||
// if (ClientEventHandler.entity == null || !entity.isAlive()) {
|
||||
// ClientEventHandler.entity = SeekTool.seekLivingEntity(player, player.level(), 32 + 8 * (intelligentChipLevel - 1), 16 / zoomFov);
|
||||
// }
|
||||
// if (entity != null && entity.isAlive()) {
|
||||
// Vec3 toVec = getVec3(event, player);
|
||||
// look(player, toVec);
|
||||
// }
|
||||
// }
|
||||
int intelligentChipLevel = PerkHelper.getItemPerkLevel(ModPerks.INTELLIGENT_CHIP.get(), stack);
|
||||
|
||||
if (intelligentChipLevel > 0) {
|
||||
if (ClientEventHandler.entity == null || !entity.isAlive()) {
|
||||
ClientEventHandler.entity = SeekTool.seekLivingEntity(player, player.level(), 32 + 8 * (intelligentChipLevel - 1), 16 / zoomFov);
|
||||
}
|
||||
if (entity != null && entity.isAlive()) {
|
||||
Vec3 toVec = getVec3(event, player);
|
||||
look(player, toVec);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
entity = null;
|
||||
}
|
||||
|
|
|
@ -6,16 +6,22 @@ import com.atsuishio.superbwarfare.capability.player.PlayerVariable;
|
|||
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
|
||||
import com.atsuishio.superbwarfare.event.events.ReloadEvent;
|
||||
import com.atsuishio.superbwarfare.init.ModItems;
|
||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
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.*;
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
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.item.ItemStack;
|
||||
import net.minecraft.world.level.ClipContext;
|
||||
|
@ -27,6 +33,7 @@ import net.neoforged.neoforge.common.NeoForge;
|
|||
import net.neoforged.neoforge.event.tick.PlayerTickEvent;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
|
||||
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);
|
||||
//
|
||||
// if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||
// player.playSound(ModSounds.HENG.get(), 4f, 1f);
|
||||
// }
|
||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
|
||||
if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||
player.playSound(ModSounds.HENG.get(), 4f, 1f);
|
||||
}
|
||||
|
||||
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);
|
||||
boolean zoom = cap != null && cap.zoom;
|
||||
|
||||
// TODO perk
|
||||
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
//
|
||||
// if (perk != null && perk.descriptionId.equals("butterfly_bullet")) {
|
||||
// if (handleButterflyBullet(perk, stack, player)) return;
|
||||
// }
|
||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
|
||||
if (perk != null && perk.descriptionId.equals("butterfly_bullet")) {
|
||||
if (handleButterflyBullet(perk, stack, player)) return;
|
||||
}
|
||||
|
||||
ProjectileEntity projectile = new ProjectileEntity(player.level())
|
||||
.shooter(player)
|
||||
// .damage(perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? projectileAmount * damage : damage)
|
||||
.damage(perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? projectileAmount * damage : damage)
|
||||
.damage(damage)
|
||||
.headShot(headshot)
|
||||
.zoom(zoom);
|
||||
|
||||
// if (perk instanceof AmmoPerk ammoPerk) {
|
||||
// int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
//
|
||||
// bypassArmorRate += ammoPerk.bypassArmorRate + (perk == ModPerks.AP_BULLET.get() ? 0.05f * (level - 1) : 0);
|
||||
// projectile.setRGB(ammoPerk.rgb);
|
||||
//
|
||||
// if (!ammoPerk.mobEffects.get().isEmpty()) {
|
||||
// int amplifier;
|
||||
// if (perk.descriptionId.equals("blade_bullet")) {
|
||||
// amplifier = level / 3;
|
||||
// } else if (perk.descriptionId.equals("bread_bullet")) {
|
||||
// amplifier = 1;
|
||||
// } else {
|
||||
// amplifier = level - 1;
|
||||
// }
|
||||
//
|
||||
// ArrayList<MobEffectInstance> mobEffectInstances = new ArrayList<>();
|
||||
// for (MobEffect effect : ammoPerk.mobEffects.get()) {
|
||||
// mobEffectInstances.add(new MobEffectInstance(effect, 70 + 30 * level, amplifier));
|
||||
// }
|
||||
// projectile.effect(mobEffectInstances);
|
||||
// }
|
||||
//
|
||||
// if (perk.descriptionId.equals("bread_bullet")) {
|
||||
// projectile.knockback(level * 0.3f);
|
||||
// projectile.forceKnockback();
|
||||
// }
|
||||
// }
|
||||
if (perk instanceof AmmoPerk ammoPerk) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
|
||||
bypassArmorRate += ammoPerk.bypassArmorRate + (perk == ModPerks.AP_BULLET.get() ? 0.05f * (level - 1) : 0);
|
||||
projectile.setRGB(ammoPerk.rgb);
|
||||
|
||||
if (!ammoPerk.mobEffects.get().isEmpty()) {
|
||||
int amplifier;
|
||||
if (perk.descriptionId.equals("blade_bullet")) {
|
||||
amplifier = level / 3;
|
||||
} else if (perk.descriptionId.equals("bread_bullet")) {
|
||||
amplifier = 1;
|
||||
} else {
|
||||
amplifier = level - 1;
|
||||
}
|
||||
|
||||
ArrayList<MobEffectInstance> mobEffectInstances = new ArrayList<>();
|
||||
for (MobEffect effect : ammoPerk.mobEffects.get()) {
|
||||
mobEffectInstances.add(new MobEffectInstance(Holder.direct(effect), 70 + 30 * level, amplifier));
|
||||
}
|
||||
projectile.effect(mobEffectInstances);
|
||||
}
|
||||
|
||||
if (perk.descriptionId.equals("bread_bullet")) {
|
||||
projectile.knockback(level * 0.3f);
|
||||
projectile.forceKnockback();
|
||||
}
|
||||
}
|
||||
|
||||
bypassArmorRate = Math.max(bypassArmorRate, 0);
|
||||
projectile.bypassArmorRate(bypassArmorRate);
|
||||
|
||||
// if (perk == ModPerks.SILVER_BULLET.get()) {
|
||||
// int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
// projectile.undeadMultiple(1.0f + 0.5f * level);
|
||||
// } else if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||
// projectile.beast();
|
||||
// } else if (perk == ModPerks.JHP_BULLET.get()) {
|
||||
// int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
// projectile.jhpBullet(level);
|
||||
// } else if (perk == ModPerks.HE_BULLET.get()) {
|
||||
// int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
// projectile.heBullet(level);
|
||||
// } else if (perk == ModPerks.INCENDIARY_BULLET.get()) {
|
||||
// int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
// projectile.fireBullet(level, stack.is(ModTags.Items.SHOTGUN));
|
||||
// }
|
||||
//
|
||||
// var dmgPerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
|
||||
// if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
|
||||
// int level = PerkHelper.getItemPerkLevel(dmgPerk, stack);
|
||||
// projectile.monsterMultiple(0.1f + 0.1f * level);
|
||||
// }
|
||||
if (perk == ModPerks.SILVER_BULLET.get()) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
projectile.undeadMultiple(1.0f + 0.5f * level);
|
||||
} else if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||
projectile.beast();
|
||||
} else if (perk == ModPerks.JHP_BULLET.get()) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
projectile.jhpBullet(level);
|
||||
} else if (perk == ModPerks.HE_BULLET.get()) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
projectile.heBullet(level);
|
||||
} else if (perk == ModPerks.INCENDIARY_BULLET.get()) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
projectile.fireBullet(level, stack.is(ModTags.Items.SHOTGUN));
|
||||
}
|
||||
|
||||
var dmgPerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
|
||||
if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
|
||||
int level = PerkHelper.getItemPerkLevel(dmgPerk, stack);
|
||||
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.shoot(player, player.getLookAngle().x, player.getLookAngle().y + 0.001f, player.getLookAngle().z,
|
||||
// TODO perk incendiary bullet
|
||||
// stack.is(ModTags.Items.SHOTGUN) && perk == ModPerks.INCENDIARY_BULLET.get() ? 4.5f : velocity,
|
||||
velocity,
|
||||
(float) spared);
|
||||
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);
|
||||
player.level().addFreshEntity(projectile);
|
||||
}
|
||||
}
|
||||
|
||||
public static double perkDamage(ItemStack stack) {
|
||||
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
// if (perk instanceof AmmoPerk ammoPerk) {
|
||||
// return ammoPerk.damageRate;
|
||||
// }
|
||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
if (perk instanceof AmmoPerk ammoPerk) {
|
||||
return ammoPerk.damageRate;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
public static double perkSpeed(ItemStack stack) {
|
||||
// var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
// if (perk instanceof AmmoPerk ammoPerk) {
|
||||
// return ammoPerk.speedRate;
|
||||
// }
|
||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
if (perk instanceof AmmoPerk ammoPerk) {
|
||||
return ammoPerk.speedRate;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
// TODO 这还有联动的必要吗(
|
||||
@SuppressWarnings("ConstantValue")
|
||||
private static boolean handleButterflyBullet(Perk perk, ItemStack heldItem, Player player) {
|
||||
return true;
|
||||
// int perkLevel = PerkHelper.getItemPerkLevel(perk, heldItem);
|
||||
|
||||
//
|
||||
// var entityType = CompatHolder.VRC_RAIN_SHOWER_BUTTERFLY;
|
||||
// if (entityType != null) {
|
||||
// Projectile projectile = entityType.create(player.level());
|
||||
|
@ -304,8 +307,8 @@ public class GunEventHandler {
|
|||
// player.level().addFreshEntity(projectile);
|
||||
// return true;
|
||||
// }
|
||||
|
||||
return false;
|
||||
//
|
||||
// return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -16,6 +16,10 @@ import com.atsuishio.superbwarfare.event.events.PreKillEvent;
|
|||
import com.atsuishio.superbwarfare.init.*;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
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 net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
@ -129,19 +133,19 @@ public class LivingEventHandler {
|
|||
|
||||
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)) {
|
||||
double distance = entity.position().distanceTo(sourceEntity.position());
|
||||
|
||||
if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) {
|
||||
// if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
|
||||
// damage = reduceDamageByDistance(amount, distance, 0.015, 30);
|
||||
// } else {
|
||||
if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) {
|
||||
damage = reduceDamageByDistance(amount, distance, 0.015, 30);
|
||||
} else {
|
||||
damage = reduceDamageByDistance(amount, distance, 0.05, 15);
|
||||
// }
|
||||
}
|
||||
} else if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) {
|
||||
damage = reduceDamageByDistance(amount, distance, 0.001, 150);
|
||||
} else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) {
|
||||
|
@ -208,10 +212,7 @@ public class LivingEventHandler {
|
|||
|
||||
// 先处理发射器类武器或高爆弹的爆炸伤害
|
||||
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
||||
if (stack.is(ModTags.Items.LAUNCHER)
|
||||
// TODO perk
|
||||
// || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), stack) > 0
|
||||
) {
|
||||
if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), stack) > 0) {
|
||||
GunsTool.setGunDoubleTag(stack, "Exp", GunsTool.getGunDoubleTag(stack, "Exp", 0) + amount);
|
||||
}
|
||||
}
|
||||
|
@ -234,10 +235,7 @@ public class LivingEventHandler {
|
|||
|
||||
// 先处理发射器类武器或高爆弹的爆炸伤害
|
||||
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
||||
if (stack.is(ModTags.Items.LAUNCHER)
|
||||
// TODO perk
|
||||
// || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), stack) > 0
|
||||
) {
|
||||
if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), stack) > 0) {
|
||||
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) {
|
||||
// TODO pre kill event
|
||||
// if (NeoForge.EVENT_BUS.post(new PreKillEvent.Indicator(player, source, event.getEntity()))) {
|
||||
// return;
|
||||
// }
|
||||
if (false
|
||||
// NeoForge.EVENT_BUS.post(
|
||||
// new PreKillEvent.Indicator(player, source, event.getEntity())
|
||||
// )
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
SoundTool.playLocalSound(player, ModSounds.TARGET_DOWN.get(), 3f, 1f);
|
||||
PacketDistributor.sendToPlayer(player, new ClientIndicatorMessage(2, 8));
|
||||
|
@ -416,15 +418,15 @@ public class LivingEventHandler {
|
|||
}
|
||||
NBTTool.saveTag(newStack, newTag);
|
||||
|
||||
// TODO perk
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), newStack);
|
||||
// if (level != 0) {
|
||||
// GunsTool.setPerkIntTag(newStack, "KillingTally", 0);
|
||||
// }
|
||||
//
|
||||
// if (player.level() instanceof ServerLevel) {
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), newStack);
|
||||
if (level != 0) {
|
||||
GunsTool.setPerkIntTag(newStack, "KillingTally", 0);
|
||||
}
|
||||
|
||||
if (player.level() instanceof ServerLevel) {
|
||||
// TODO draw client msg
|
||||
// ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new DrawClientMessage(true));
|
||||
// }
|
||||
}
|
||||
|
||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||
if (cap != null) {
|
||||
|
@ -468,10 +470,9 @@ public class LivingEventHandler {
|
|||
|
||||
if (attacker != null && MiscConfig.SEND_KILL_FEEDBACK.get()) {
|
||||
if (DamageTypeTool.isHeadshotDamage(source)) {
|
||||
// TODO player gun kill msg
|
||||
// ModUtils.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new PlayerGunKillMessage(attacker.getId(), entity.getId(), true, damageTypeResourceKey));
|
||||
PacketDistributor.sendToAllPlayers(new PlayerGunKillMessage(attacker.getId(), entity.getId(), true, damageTypeResourceKey));
|
||||
} 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) {
|
||||
// TODO perk
|
||||
// if (PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack) > 0) {
|
||||
// float bypassArmorRate = projectile.getBypassArmorRate();
|
||||
// if (bypassArmorRate >= 1.0f && source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE)) {
|
||||
// handleFourthTimesCharm(stack);
|
||||
// } else if (source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) {
|
||||
// handleFourthTimesCharm(stack);
|
||||
// }
|
||||
// }
|
||||
if (PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack) > 0) {
|
||||
float bypassArmorRate = projectile.getBypassArmorRate();
|
||||
if (bypassArmorRate >= 1.0f && source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE)) {
|
||||
handleFourthTimesCharm(stack);
|
||||
} else if (source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) {
|
||||
handleFourthTimesCharm(stack);
|
||||
}
|
||||
}
|
||||
|
||||
if (!projectile.isZoom()) {
|
||||
handleFieldDoctor(stack, event, attacker);
|
||||
|
@ -569,91 +569,83 @@ public class LivingEventHandler {
|
|||
}
|
||||
|
||||
private static void handleClipPerks(ItemStack stack) {
|
||||
// TODO perk
|
||||
// int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), stack);
|
||||
// if (healClipLevel != 0) {
|
||||
// GunsTool.setPerkIntTag(stack, "HealClipTime", 80 + healClipLevel * 20);
|
||||
// }
|
||||
//
|
||||
// int killClipLevel = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), stack);
|
||||
// if (killClipLevel != 0) {
|
||||
// GunsTool.setPerkIntTag(stack, "KillClipReloadTime", 80);
|
||||
// }
|
||||
int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), stack);
|
||||
if (healClipLevel != 0) {
|
||||
GunsTool.setPerkIntTag(stack, "HealClipTime", 80 + healClipLevel * 20);
|
||||
}
|
||||
|
||||
int killClipLevel = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), stack);
|
||||
if (killClipLevel != 0) {
|
||||
GunsTool.setPerkIntTag(stack, "KillClipReloadTime", 80);
|
||||
}
|
||||
}
|
||||
|
||||
private static void handleKillClipDamage(ItemStack stack, LivingIncomingDamageEvent event) {
|
||||
// TODO perk
|
||||
// if (GunsTool.getPerkIntTag(stack, "KillClipTime") > 0) {
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), stack);
|
||||
// if (level == 0) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// event.setAmount(event.getAmount() * (1.2f + 0.05f * level));
|
||||
// }
|
||||
if (GunsTool.getPerkIntTag(stack, "KillClipTime") > 0) {
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), stack);
|
||||
if (level == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
event.setAmount(event.getAmount() * (1.2f + 0.05f * level));
|
||||
}
|
||||
}
|
||||
|
||||
private static void handleGutshotStraightDamage(ItemStack stack, LivingIncomingDamageEvent event) {
|
||||
// TODO perk
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.GUTSHOT_STRAIGHT.get(), stack);
|
||||
// if (level == 0) {
|
||||
// return;
|
||||
// }
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.GUTSHOT_STRAIGHT.get(), stack);
|
||||
if (level == 0) {
|
||||
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) {
|
||||
// TODO perk
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), stack);
|
||||
// if (level == 0) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// int killTally = GunsTool.getPerkIntTag(stack, "KillingTally");
|
||||
// if (killTally == 0) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// event.setAmount(event.getAmount() * (1.0f + (0.1f * level) * killTally));
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), stack);
|
||||
if (level == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
int killTally = GunsTool.getPerkIntTag(stack, "KillingTally");
|
||||
if (killTally == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
event.setAmount(event.getAmount() * (1.0f + (0.1f * level) * killTally));
|
||||
}
|
||||
|
||||
private static void handleKillingTallyAddCount(ItemStack stack) {
|
||||
// TODO perk
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), stack);
|
||||
// if (level != 0) {
|
||||
// GunsTool.setPerkIntTag(stack, "KillingTally", Math.min(3, GunsTool.getPerkIntTag(stack, "KillingTally") + 1));
|
||||
// }
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), stack);
|
||||
if (level != 0) {
|
||||
GunsTool.setPerkIntTag(stack, "KillingTally", Math.min(3, GunsTool.getPerkIntTag(stack, "KillingTally") + 1));
|
||||
}
|
||||
}
|
||||
|
||||
private static void handleFourthTimesCharm(ItemStack stack) {
|
||||
// TODO perk
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack);
|
||||
// if (level == 0) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// int fourthTimesCharmTick = GunsTool.getPerkIntTag(stack, "FourthTimesCharmTick");
|
||||
// if (fourthTimesCharmTick <= 0) {
|
||||
// GunsTool.setPerkIntTag(stack, "FourthTimesCharmTick", 40 + 10 * level);
|
||||
// GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", 1);
|
||||
// } else {
|
||||
// int count = GunsTool.getPerkIntTag(stack, "FourthTimesCharmCount");
|
||||
// if (count < 4) {
|
||||
// GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", Math.min(4, count + 1));
|
||||
// }
|
||||
// }
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack);
|
||||
if (level == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
int fourthTimesCharmTick = GunsTool.getPerkIntTag(stack, "FourthTimesCharmTick");
|
||||
if (fourthTimesCharmTick <= 0) {
|
||||
GunsTool.setPerkIntTag(stack, "FourthTimesCharmTick", 40 + 10 * level);
|
||||
GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", 1);
|
||||
} else {
|
||||
int count = GunsTool.getPerkIntTag(stack, "FourthTimesCharmCount");
|
||||
if (count < 4) {
|
||||
GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", Math.min(4, count + 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void handleSubsistence(ItemStack stack, Player player) {
|
||||
// TODO perk
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.SUBSISTENCE.get(), stack);
|
||||
// if (level == 0) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// float rate = level * 0.1f + (stack.is(ModTags.Items.SMG) || stack.is(ModTags.Items.RIFLE) ? 0.07f : 0f);
|
||||
float rate = 1;
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.SUBSISTENCE.get(), stack);
|
||||
if (level == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
float rate = level * 0.1f + (stack.is(ModTags.Items.SMG) || stack.is(ModTags.Items.RIFLE) ? 0.07f : 0f);
|
||||
|
||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||
if (cap == null) return;
|
||||
|
@ -687,48 +679,44 @@ public class LivingEventHandler {
|
|||
|
||||
|
||||
private static void handleFieldDoctor(ItemStack stack, LivingIncomingDamageEvent event, Player player) {
|
||||
// TODO perk
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.FIELD_DOCTOR.get(), stack);
|
||||
// if (level == 0) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (event.getEntity().isAlliedTo(player)) {
|
||||
// event.getEntity().heal(event.getAmount() * Math.min(1.0f, 0.25f + 0.05f * level));
|
||||
// event.setCanceled(true);
|
||||
// }
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.FIELD_DOCTOR.get(), stack);
|
||||
if (level == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getEntity().isAlliedTo(player)) {
|
||||
event.getEntity().heal(event.getAmount() * Math.min(1.0f, 0.25f + 0.05f * level));
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
||||
private static void handleHeadSeekerTime(ItemStack stack) {
|
||||
// TODO perk
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), stack);
|
||||
// if (level == 0) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// GunsTool.setPerkIntTag(stack, "HeadSeeker", 11 + level * 2);
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), stack);
|
||||
if (level == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
GunsTool.setPerkIntTag(stack, "HeadSeeker", 11 + level * 2);
|
||||
}
|
||||
|
||||
private static void handleHeadSeekerDamage(ItemStack stack, LivingIncomingDamageEvent event) {
|
||||
// TODO perk
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), stack);
|
||||
// if (level == 0) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (GunsTool.getPerkIntTag(stack, "HeadSeeker") > 0) {
|
||||
// event.setAmount(event.getAmount() * (1.095f + 0.0225f * level));
|
||||
// }
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), stack);
|
||||
if (level == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (GunsTool.getPerkIntTag(stack, "HeadSeeker") > 0) {
|
||||
event.setAmount(event.getAmount() * (1.095f + 0.0225f * level));
|
||||
}
|
||||
}
|
||||
|
||||
private static void handleDesperado(ItemStack stack) {
|
||||
// TODO perk
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack);
|
||||
// if (level == 0) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// GunsTool.setPerkIntTag(stack, "DesperadoTime", 90 + level * 10);
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack);
|
||||
if (level == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
GunsTool.setPerkIntTag(stack, "DesperadoTime", 90 + level * 10);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -793,17 +781,16 @@ public class LivingEventHandler {
|
|||
return;
|
||||
}
|
||||
|
||||
// TODO perk
|
||||
// if (stack.is(ModTags.Items.GUN) && PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack) > 0 && (DamageTypeTool.isGunDamage(source) || DamageTypeTool.isExplosionDamage(source))) {
|
||||
// var drops = event.getDrops();
|
||||
// drops.forEach(itemEntity -> {
|
||||
// ItemStack item = itemEntity.getItem();
|
||||
// if (!player.addItem(item)) {
|
||||
// player.drop(item, false);
|
||||
// }
|
||||
// });
|
||||
// event.setCanceled(true);
|
||||
// }
|
||||
if (stack.is(ModTags.Items.GUN) && PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack) > 0 && (DamageTypeTool.isGunDamage(source) || DamageTypeTool.isExplosionDamage(source))) {
|
||||
var drops = event.getDrops();
|
||||
drops.forEach(itemEntity -> {
|
||||
ItemStack item = itemEntity.getItem();
|
||||
if (!player.addItem(item)) {
|
||||
player.drop(item, false);
|
||||
}
|
||||
});
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
|
@ -820,13 +807,12 @@ public class LivingEventHandler {
|
|||
ItemStack stack = player.getMainHandItem();
|
||||
if (!stack.is(ModTags.Items.GUN)) return;
|
||||
|
||||
// TODO perk
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack);
|
||||
// if (level > 0) {
|
||||
// player.giveExperiencePoints((int) (event.getDroppedExperience() * (0.8f + 0.2f * level)));
|
||||
//
|
||||
// event.setCanceled(true);
|
||||
// }
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack);
|
||||
if (level > 0) {
|
||||
player.giveExperiencePoints((int) (event.getDroppedExperience() * (0.8f + 0.2f * level)));
|
||||
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
||||
public static void handlePlayerBeamReset(Player player) {
|
||||
|
@ -838,9 +824,8 @@ public class LivingEventHandler {
|
|||
|
||||
private static void handleVorpalWeaponDamage(ItemStack stack, LivingIncomingDamageEvent event) {
|
||||
var entity = event.getEntity();
|
||||
// TODO perk
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.VORPAL_WEAPON.get(), stack);
|
||||
int level = 0;
|
||||
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.VORPAL_WEAPON.get(), stack);
|
||||
if (level <= 0) return;
|
||||
if (entity.getHealth() < 100.0f) return;
|
||||
|
||||
|
|
|
@ -1,13 +1,17 @@
|
|||
package com.atsuishio.superbwarfare.event;
|
||||
|
||||
import com.atsuishio.superbwarfare.event.events.ReloadEvent;
|
||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@EventBusSubscriber
|
||||
public class ReloadEventHandler {
|
||||
|
||||
|
@ -61,17 +65,16 @@ public class ReloadEventHandler {
|
|||
return;
|
||||
}
|
||||
|
||||
// TODO perk
|
||||
// int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), stack);
|
||||
// if (healClipLevel == 0) {
|
||||
// healClipLevel = 1;
|
||||
// }
|
||||
//
|
||||
// player.heal(12.0f * (0.8f + 0.2f * healClipLevel));
|
||||
// List<Player> players = player.level().getEntitiesOfClass(Player.class, player.getBoundingBox().inflate(5))
|
||||
// .stream().filter(p -> p.isAlliedTo(player)).toList();
|
||||
// int finalHealClipLevel = healClipLevel;
|
||||
// players.forEach(p -> p.heal(6.0f * (0.8f + 0.2f * finalHealClipLevel)));
|
||||
int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), stack);
|
||||
if (healClipLevel == 0) {
|
||||
healClipLevel = 1;
|
||||
}
|
||||
|
||||
player.heal(12.0f * (0.8f + 0.2f * healClipLevel));
|
||||
List<Player> players = player.level().getEntitiesOfClass(Player.class, player.getBoundingBox().inflate(5))
|
||||
.stream().filter(p -> p.isAlliedTo(player)).toList();
|
||||
int finalHealClipLevel = healClipLevel;
|
||||
players.forEach(p -> p.heal(6.0f * (0.8f + 0.2f * finalHealClipLevel)));
|
||||
}
|
||||
|
||||
private static void handleKillClipPre(ItemStack stack) {
|
||||
|
@ -89,19 +92,17 @@ public class ReloadEventHandler {
|
|||
return;
|
||||
}
|
||||
|
||||
// TODO perk
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), stack);
|
||||
// GunsTool.setPerkIntTag(stack, "KillClipTime", 90 + 10 * level);
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), stack);
|
||||
GunsTool.setPerkIntTag(stack, "KillClipTime", 90 + 10 * level);
|
||||
}
|
||||
|
||||
private static void handleKillingTallyPre(ItemStack stack) {
|
||||
// TODO perk
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), stack);
|
||||
// if (level == 0) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// GunsTool.setPerkIntTag(stack, "KillingTally", 0);
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), stack);
|
||||
if (level == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
GunsTool.setPerkIntTag(stack, "KillingTally", 0);
|
||||
}
|
||||
|
||||
private static void handleDesperadoPre(ItemStack stack) {
|
||||
|
@ -115,12 +116,11 @@ public class ReloadEventHandler {
|
|||
}
|
||||
|
||||
private static void handleDesperadoPost(ItemStack stack) {
|
||||
// TODO perk
|
||||
// if (!GunsTool.getPerkBooleanTag(stack, "Desperado")) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack);
|
||||
// GunsTool.setPerkIntTag(stack, "DesperadoTimePost", 110 + level * 10);
|
||||
if (!GunsTool.getPerkBooleanTag(stack, "Desperado")) {
|
||||
return;
|
||||
}
|
||||
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack);
|
||||
GunsTool.setPerkIntTag(stack, "DesperadoTimePost", 110 + level * 10);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,9 +5,11 @@ import com.atsuishio.superbwarfare.capability.ModCapabilities;
|
|||
import com.atsuishio.superbwarfare.client.PoseTool;
|
||||
import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent;
|
||||
import com.atsuishio.superbwarfare.init.ModItems;
|
||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.CustomRendererItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.AmmoType;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
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",
|
||||
"DesperadoTime", "DesperadoTimePost");
|
||||
|
||||
// TODO perk
|
||||
// if (PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack) > 0) {
|
||||
// int count = GunsTool.getPerkIntTag(stack, "FourthTimesCharmCount");
|
||||
// if (count >= 4) {
|
||||
// GunsTool.setPerkIntTag(stack, "FourthTimesCharmTick", 0);
|
||||
// GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", 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));
|
||||
// }
|
||||
// }
|
||||
if (PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack) > 0) {
|
||||
int count = GunsTool.getPerkIntTag(stack, "FourthTimesCharmCount");
|
||||
if (count >= 4) {
|
||||
GunsTool.setPerkIntTag(stack, "FourthTimesCharmTick", 0);
|
||||
GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void handleGunAttachment(ItemStack stack) {
|
||||
|
|
|
@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -118,9 +119,7 @@ public class Glock17Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// TODO perk
|
||||
// return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -4,10 +4,12 @@ import com.atsuishio.superbwarfare.ModUtils;
|
|||
import com.atsuishio.superbwarfare.client.renderer.item.Glock18ItemRenderer;
|
||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.init.ModItems;
|
||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -120,9 +122,7 @@ public class Glock18Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
|
||||
return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -121,9 +122,7 @@ public class M1911Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -118,9 +119,7 @@ public class Mp443Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.HANDGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -10,6 +10,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.ChatFormatting;
|
||||
|
@ -293,9 +294,7 @@ public class Trachelium extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.HANDGUN_PERKS.test(perk);
|
||||
return PerkHelper.HANDGUN_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -166,9 +167,7 @@ public class Ntw20Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -11,6 +11,7 @@ import com.atsuishio.superbwarfare.init.ModTags;
|
|||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.*;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
|
@ -221,9 +222,7 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.LAUNCHER_PERKS.test(perk);
|
||||
return PerkHelper.LAUNCHER_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -6,11 +6,13 @@ import com.atsuishio.superbwarfare.client.renderer.item.M79ItemRenderer;
|
|||
import com.atsuishio.superbwarfare.client.tooltip.component.LauncherImageComponent;
|
||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.init.ModItems;
|
||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -142,9 +144,7 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.LAUNCHER_PERKS.test(perk) || perk == ModPerks.MICRO_MISSILE.get();
|
||||
return PerkHelper.LAUNCHER_PERKS.test(perk) || perk == ModPerks.MICRO_MISSILE.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -6,11 +6,13 @@ import com.atsuishio.superbwarfare.client.renderer.item.RpgItemRenderer;
|
|||
import com.atsuishio.superbwarfare.client.tooltip.component.LauncherImageComponent;
|
||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.init.ModItems;
|
||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -156,9 +158,7 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.LAUNCHER_PERKS.test(perk) || perk == ModPerks.MICRO_MISSILE.get();
|
||||
return PerkHelper.LAUNCHER_PERKS.test(perk) || perk == ModPerks.MICRO_MISSILE.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -6,10 +6,12 @@ import com.atsuishio.superbwarfare.client.renderer.item.SecondaryCataclysmRender
|
|||
import com.atsuishio.superbwarfare.client.tooltip.component.SecondaryCataclysmImageComponent;
|
||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.init.ModItems;
|
||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -221,9 +223,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.LAUNCHER_PERKS.test(perk) || perk == ModPerks.MICRO_MISSILE.get();
|
||||
return PerkHelper.LAUNCHER_PERKS.test(perk) || perk == ModPerks.MICRO_MISSILE.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -4,10 +4,12 @@ import com.atsuishio.superbwarfare.ModUtils;
|
|||
import com.atsuishio.superbwarfare.client.renderer.item.DevotionItemRenderer;
|
||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.init.ModItems;
|
||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -103,9 +105,7 @@ public class DevotionItem extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get() || perk == ModPerks.TURBO_CHARGER.get();
|
||||
return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get() || perk == ModPerks.TURBO_CHARGER.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -4,10 +4,12 @@ import com.atsuishio.superbwarfare.ModUtils;
|
|||
import com.atsuishio.superbwarfare.client.renderer.item.M60ItemRenderer;
|
||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.init.ModItems;
|
||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -134,9 +136,7 @@ public class M60Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
|
||||
return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -4,10 +4,12 @@ import com.atsuishio.superbwarfare.ModUtils;
|
|||
import com.atsuishio.superbwarfare.client.renderer.item.RpkItemRenderer;
|
||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.init.ModItems;
|
||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -103,9 +105,7 @@ public class RpkItem extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
|
||||
return PerkHelper.MACHINE_GUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -175,9 +176,7 @@ public class AK12Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -185,9 +186,7 @@ public class AK47Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -185,9 +186,7 @@ public class Hk416Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -27,6 +28,7 @@ import software.bernie.geckolib.animation.*;
|
|||
import software.bernie.geckolib.renderer.GeoItemRenderer;
|
||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
import java.util.Set;
|
||||
|
||||
public class M4Item extends GunItem implements GeoItem {
|
||||
|
@ -146,6 +148,7 @@ public class M4Item extends GunItem implements GeoItem {
|
|||
}
|
||||
|
||||
@Override
|
||||
@ParametersAreNonnullByDefault
|
||||
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
|
||||
super.inventoryTick(stack, world, entity, slot, selected);
|
||||
|
||||
|
@ -184,9 +187,7 @@ public class M4Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -139,9 +140,7 @@ public class MarlinItem extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -183,9 +184,7 @@ public class Mk14Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -187,9 +188,7 @@ public class Qbz95Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -119,9 +120,7 @@ public class SksItem extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -5,10 +5,12 @@ import com.atsuishio.superbwarfare.client.renderer.item.Aa12ItemRenderer;
|
|||
import com.atsuishio.superbwarfare.client.tooltip.component.ShotgunImageComponent;
|
||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.init.ModItems;
|
||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -131,9 +133,7 @@ public class Aa12Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.SHOTGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
|
||||
return PerkHelper.SHOTGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk) || perk == ModPerks.DESPERADO.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -107,9 +108,7 @@ public class HomemadeShotgunItem extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.SHOTGUN_PERKS.test(perk);
|
||||
return PerkHelper.SHOTGUN_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -141,9 +142,7 @@ public class M870Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.SHOTGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.SHOTGUN_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -164,9 +165,7 @@ public class VectorItem extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
// TODO perk
|
||||
// return PerkHelper.SMG_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return false;
|
||||
return PerkHelper.SMG_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -98,9 +99,7 @@ public class HuntingRifleItem extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.SNIPER_RIFLE_PERKS.test(perk);
|
||||
return PerkHelper.SNIPER_RIFLE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -143,9 +144,7 @@ public class K98Item extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
// TODO perk
|
||||
// return PerkHelper.SNIPER_RIFLE_PERKS.test(perk);
|
||||
return false;
|
||||
return PerkHelper.SNIPER_RIFLE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -120,9 +121,7 @@ public class M98bItem extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -143,9 +144,7 @@ public class MosinNagantItem extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.SNIPER_RIFLE_PERKS.test(perk);
|
||||
return PerkHelper.SNIPER_RIFLE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -184,9 +185,7 @@ public class SentinelItem extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// TODO perk
|
||||
// return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -147,9 +148,7 @@ public class SvdItem extends GunItem implements GeoItem {
|
|||
|
||||
@Override
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return false;
|
||||
// todo perk
|
||||
// return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.atsuishio.superbwarfare.init.ModTags;
|
|||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.InventoryTool;
|
||||
import com.atsuishio.superbwarfare.tools.SoundTool;
|
||||
|
@ -165,8 +166,7 @@ public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
|
||||
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) {
|
||||
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);
|
||||
}
|
||||
|
||||
// if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||
// player.playSound(ModSounds.HENG.get(), 4f, 1f);
|
||||
//
|
||||
// if (player instanceof ServerPlayer serverPlayer) {
|
||||
// SoundTool.playLocalSound(serverPlayer, ModSounds.HENG.get(), 4f, 1f);
|
||||
// }
|
||||
// }
|
||||
if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||
player.playSound(ModSounds.HENG.get(), 4f, 1f);
|
||||
|
||||
if (player instanceof ServerPlayer serverPlayer) {
|
||||
SoundTool.playLocalSound(serverPlayer, ModSounds.HENG.get(), 4f, 1f);
|
||||
}
|
||||
}
|
||||
|
||||
player.getCooldowns().addCooldown(stack.getItem(), 7);
|
||||
GunsTool.setGunIntTag(stack, "ArrowEmpty", 7);
|
||||
|
|
|
@ -4,6 +4,7 @@ import com.atsuishio.superbwarfare.ModUtils;
|
|||
import com.atsuishio.superbwarfare.capability.ModCapabilities;
|
||||
import com.atsuishio.superbwarfare.client.renderer.item.TaserItemRenderer;
|
||||
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.init.ModItems;
|
||||
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.SpecialFireWeapon;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
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.util.GeckoLibUtil;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
|
@ -145,6 +148,7 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
}
|
||||
|
||||
@Override
|
||||
@ParametersAreNonnullByDefault
|
||||
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean 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));
|
||||
}
|
||||
|
||||
// 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);
|
||||
// if (stackStorage != null) {
|
||||
// stackStorage.receiveEnergy(perkLevel, false);
|
||||
// }
|
||||
if (stackStorage != null) {
|
||||
stackStorage.receiveEnergy(perkLevel, false);
|
||||
}
|
||||
|
||||
if (entity instanceof Player player) {
|
||||
for (var cell : player.getInventory().items) {
|
||||
|
@ -231,9 +234,7 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
ItemStack stack = player.getMainHandItem();
|
||||
if (GunsTool.getGunBooleanTag(stack, "Reloading")) return;
|
||||
|
||||
// TODO perk
|
||||
// int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), stack);
|
||||
int perkLevel = 0;
|
||||
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), stack);
|
||||
var energyStorage = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
||||
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;
|
||||
double spread = GunsTool.getGunDoubleTag(stack, "Spread");
|
||||
|
||||
// TODO perk
|
||||
// int volt = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), stack);
|
||||
// int wireLength = PerkHelper.getItemPerkLevel(ModPerks.LONGER_WIRE.get(), stack);
|
||||
int volt = 0;
|
||||
int wireLength = 0;
|
||||
int volt = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), stack);
|
||||
int wireLength = PerkHelper.getItemPerkLevel(ModPerks.LONGER_WIRE.get(), stack);
|
||||
|
||||
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);
|
||||
|
||||
var level = serverPlayer.level();
|
||||
|
||||
// TODO taser bullet
|
||||
// TaserBulletEntity taserBulletProjectile = new TaserBulletEntity(player, level,
|
||||
// (float) GunsTool.getGunDoubleTag(stack, "Damage", 0), volt, wireLength);
|
||||
//
|
||||
// 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),
|
||||
// (float) (zoom ? 0.1 : spread));
|
||||
// level.addFreshEntity(taserBulletProjectile);
|
||||
//
|
||||
// ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShootClientMessage(10));
|
||||
TaserBulletEntity taserBulletProjectile = new TaserBulletEntity(player, level,
|
||||
(float) GunsTool.getGunDoubleTag(stack, "Damage", 0), volt, wireLength);
|
||||
|
||||
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),
|
||||
(float) (zoom ? 0.1 : spread));
|
||||
level.addFreshEntity(taserBulletProjectile);
|
||||
|
||||
// TODO shoot client msg
|
||||
// PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
|
||||
}
|
||||
|
||||
GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1);
|
||||
|
|
|
@ -4,7 +4,10 @@ import com.atsuishio.superbwarfare.init.ModBlocks;
|
|||
import com.atsuishio.superbwarfare.init.ModMenuTypes;
|
||||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.PerkItem;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
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.world.Container;
|
||||
import net.minecraft.world.SimpleContainer;
|
||||
|
@ -161,10 +164,9 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
|
|||
ItemStack itemstack = this.container.getItem(i);
|
||||
|
||||
if (itemstack.getItem() instanceof PerkItem<?> perkItem) {
|
||||
// TODO PerkHelper
|
||||
// if (!copy.isEmpty() && PerkHelper.getItemPerkLevel(perkItem.getPerk(), copy) > 0) {
|
||||
// continue;
|
||||
// }
|
||||
if (!copy.isEmpty() && PerkHelper.getItemPerkLevel(perkItem.getPerk(), copy) > 0) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (!itemstack.isEmpty()) {
|
||||
|
@ -200,70 +202,69 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
|
|||
}
|
||||
|
||||
public void handleUpgradePoint(ItemStack stack) {
|
||||
// TODO GunItem GunsTool
|
||||
// if (!(stack.getItem() instanceof GunItem)) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// double oldPoint = GunsTool.getGunDoubleTag(stack, "UpgradePoint", 0);
|
||||
// int point = (int) oldPoint;
|
||||
// int newPoint = this.upgradePoint.get();
|
||||
// int delta = newPoint - point;
|
||||
//
|
||||
// if (delta != 0) {
|
||||
// GunsTool.setGunDoubleTag(stack, "UpgradePoint", oldPoint + delta);
|
||||
// }
|
||||
if (!(stack.getItem() instanceof GunItem)) {
|
||||
return;
|
||||
}
|
||||
|
||||
double oldPoint = GunsTool.getGunDoubleTag(stack, "UpgradePoint", 0);
|
||||
int point = (int) oldPoint;
|
||||
int newPoint = this.upgradePoint.get();
|
||||
int delta = newPoint - point;
|
||||
|
||||
if (delta != 0) {
|
||||
GunsTool.setGunDoubleTag(stack, "UpgradePoint", oldPoint + delta);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据输入槽的枪械和Perk槽中的物品与等级,生成重铸后的武器,并放入输出槽中
|
||||
*/
|
||||
public void generateResult() {
|
||||
// ItemStack gun = this.container.getItem(INPUT_SLOT);
|
||||
// if (!(gun.getItem() instanceof GunItem gunItem)) {
|
||||
// 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);
|
||||
// }
|
||||
// }
|
||||
ItemStack gun = this.container.getItem(INPUT_SLOT);
|
||||
if (!(gun.getItem() instanceof GunItem gunItem)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 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();
|
||||
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);
|
||||
|
||||
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物品
|
||||
*/
|
||||
private void onTakePerk(ItemStack perk) {
|
||||
// ItemStack gun = this.container.getItem(INPUT_SLOT);
|
||||
// if (!(gun.getItem() instanceof GunItem)) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (perk.getItem() instanceof PerkItem perkItem) {
|
||||
// switch (perkItem.getPerk().type) {
|
||||
// case AMMO -> this.ammoPerkLevel.set(0);
|
||||
// case FUNCTIONAL -> this.funcPerkLevel.set(0);
|
||||
// case DAMAGE -> this.damagePerkLevel.set(0);
|
||||
// }
|
||||
//
|
||||
// int level = PerkHelper.getItemPerkLevel(perkItem.getPerk(), gun);
|
||||
//
|
||||
// if (level <= 0) {
|
||||
// this.upgradePoint.set((int) GunsTool.getGunDoubleTag(gun, "UpgradePoint", 0));
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// ItemStack output = gun.copy();
|
||||
// PerkHelper.removePerkByType(output, perkItem.getPerk().type);
|
||||
// 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.container.setItem(INPUT_SLOT, output);
|
||||
// this.container.setChanged();
|
||||
// }
|
||||
ItemStack gun = this.container.getItem(INPUT_SLOT);
|
||||
if (!(gun.getItem() instanceof GunItem)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (perk.getItem() instanceof PerkItem perkItem) {
|
||||
switch (perkItem.getPerk().type) {
|
||||
case AMMO -> this.ammoPerkLevel.set(0);
|
||||
case FUNCTIONAL -> this.funcPerkLevel.set(0);
|
||||
case DAMAGE -> this.damagePerkLevel.set(0);
|
||||
}
|
||||
|
||||
int level = PerkHelper.getItemPerkLevel(perkItem.getPerk(), gun);
|
||||
|
||||
if (level <= 0) {
|
||||
this.upgradePoint.set((int) GunsTool.getGunDoubleTag(gun, "UpgradePoint", 0));
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack output = gun.copy();
|
||||
PerkHelper.removePerkByType(output, perkItem.getPerk().type);
|
||||
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.container.setItem(INPUT_SLOT, output);
|
||||
this.container.setChanged();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -324,33 +325,33 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
|
|||
* @param stack 输入的枪械
|
||||
*/
|
||||
private void onPlaceGun(ItemStack stack) {
|
||||
// if (!(stack.getItem() instanceof GunItem)) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// int point = (int) GunsTool.getGunDoubleTag(stack, "UpgradePoint", 0);
|
||||
// this.upgradePoint.set(Mth.clamp(point, 0, MAX_UPGRADE_POINT));
|
||||
//
|
||||
// var ammoPerk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
// if (ammoPerk != null) {
|
||||
// this.ammoPerkLevel.set(PerkHelper.getItemPerkLevel(ammoPerk, stack));
|
||||
// var ammoPerkItem = PerkHelper.getPerkItem(ammoPerk);
|
||||
// ammoPerkItem.ifPresent(registryObject -> this.container.setItem(AMMO_PERK_SLOT, registryObject.get().getDefaultInstance()));
|
||||
// }
|
||||
//
|
||||
// var funcPerk = PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL);
|
||||
// if (funcPerk != null) {
|
||||
// this.funcPerkLevel.set(PerkHelper.getItemPerkLevel(funcPerk, stack));
|
||||
// var funcPerkItem = PerkHelper.getPerkItem(funcPerk);
|
||||
// funcPerkItem.ifPresent(registryObject -> this.container.setItem(FUNC_PERK_SLOT, registryObject.get().getDefaultInstance()));
|
||||
// }
|
||||
//
|
||||
// var damagePerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
|
||||
// if (damagePerk != null) {
|
||||
// this.damagePerkLevel.set(PerkHelper.getItemPerkLevel(damagePerk, stack));
|
||||
// var damagePerkItem = PerkHelper.getPerkItem(damagePerk);
|
||||
// damagePerkItem.ifPresent(registryObject -> this.container.setItem(DAMAGE_PERK_SLOT, registryObject.get().getDefaultInstance()));
|
||||
// }
|
||||
if (!(stack.getItem() instanceof GunItem)) {
|
||||
return;
|
||||
}
|
||||
|
||||
int point = (int) GunsTool.getGunDoubleTag(stack, "UpgradePoint", 0);
|
||||
this.upgradePoint.set(Mth.clamp(point, 0, MAX_UPGRADE_POINT));
|
||||
|
||||
var ammoPerk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
if (ammoPerk != null) {
|
||||
this.ammoPerkLevel.set(PerkHelper.getItemPerkLevel(ammoPerk, stack));
|
||||
var ammoPerkItem = PerkHelper.getPerkItem(ammoPerk);
|
||||
ammoPerkItem.ifPresent(registryObject -> this.container.setItem(AMMO_PERK_SLOT, registryObject.get().getDefaultInstance()));
|
||||
}
|
||||
|
||||
var funcPerk = PerkHelper.getPerkByType(stack, Perk.Type.FUNCTIONAL);
|
||||
if (funcPerk != null) {
|
||||
this.funcPerkLevel.set(PerkHelper.getItemPerkLevel(funcPerk, stack));
|
||||
var funcPerkItem = PerkHelper.getPerkItem(funcPerk);
|
||||
funcPerkItem.ifPresent(registryObject -> this.container.setItem(FUNC_PERK_SLOT, registryObject.get().getDefaultInstance()));
|
||||
}
|
||||
|
||||
var damagePerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
|
||||
if (damagePerk != null) {
|
||||
this.damagePerkLevel.set(PerkHelper.getItemPerkLevel(damagePerk, stack));
|
||||
var damagePerkItem = PerkHelper.getPerkItem(damagePerk);
|
||||
damagePerkItem.ifPresent(registryObject -> this.container.setItem(DAMAGE_PERK_SLOT, registryObject.get().getDefaultInstance()));
|
||||
}
|
||||
|
||||
this.container.setChanged();
|
||||
this.broadcastChanges();
|
||||
|
@ -362,30 +363,30 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
|
|||
* @param pStack 输入的枪械
|
||||
*/
|
||||
private void onTakeGun(ItemStack pStack) {
|
||||
// if (!(pStack.getItem() instanceof GunItem)) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// var ammoPerk = PerkHelper.getPerkByType(pStack, Perk.Type.AMMO);
|
||||
// if (ammoPerk != null) {
|
||||
// if (this.container.getItem(AMMO_PERK_SLOT).getItem() instanceof PerkItem perkItem && perkItem.getPerk() == ammoPerk) {
|
||||
// this.container.setItem(AMMO_PERK_SLOT, ItemStack.EMPTY);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// var funcPerk = PerkHelper.getPerkByType(pStack, Perk.Type.FUNCTIONAL);
|
||||
// if (funcPerk != null) {
|
||||
// if (this.container.getItem(FUNC_PERK_SLOT).getItem() instanceof PerkItem perkItem && perkItem.getPerk() == funcPerk) {
|
||||
// this.container.setItem(FUNC_PERK_SLOT, ItemStack.EMPTY);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// var damagePerk = PerkHelper.getPerkByType(pStack, Perk.Type.DAMAGE);
|
||||
// if (damagePerk != null) {
|
||||
// if (this.container.getItem(DAMAGE_PERK_SLOT).getItem() instanceof PerkItem perkItem && perkItem.getPerk() == damagePerk) {
|
||||
// this.container.setItem(DAMAGE_PERK_SLOT, ItemStack.EMPTY);
|
||||
// }
|
||||
// }
|
||||
if (!(pStack.getItem() instanceof GunItem)) {
|
||||
return;
|
||||
}
|
||||
|
||||
var ammoPerk = PerkHelper.getPerkByType(pStack, Perk.Type.AMMO);
|
||||
if (ammoPerk != null) {
|
||||
if (this.container.getItem(AMMO_PERK_SLOT).getItem() instanceof PerkItem<?> perkItem && perkItem.getPerk() == ammoPerk) {
|
||||
this.container.setItem(AMMO_PERK_SLOT, ItemStack.EMPTY);
|
||||
}
|
||||
}
|
||||
|
||||
var funcPerk = PerkHelper.getPerkByType(pStack, Perk.Type.FUNCTIONAL);
|
||||
if (funcPerk != null) {
|
||||
if (this.container.getItem(FUNC_PERK_SLOT).getItem() instanceof PerkItem<?> perkItem && perkItem.getPerk() == funcPerk) {
|
||||
this.container.setItem(FUNC_PERK_SLOT, ItemStack.EMPTY);
|
||||
}
|
||||
}
|
||||
|
||||
var damagePerk = PerkHelper.getPerkByType(pStack, Perk.Type.DAMAGE);
|
||||
if (damagePerk != null) {
|
||||
if (this.container.getItem(DAMAGE_PERK_SLOT).getItem() instanceof PerkItem<?> perkItem && perkItem.getPerk() == damagePerk) {
|
||||
this.container.setItem(DAMAGE_PERK_SLOT, ItemStack.EMPTY);
|
||||
}
|
||||
}
|
||||
|
||||
this.upgradePoint.set(0);
|
||||
this.ammoPerkLevel.set(0);
|
||||
|
@ -425,17 +426,17 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
|
|||
}
|
||||
|
||||
public boolean mayPlace(@NotNull ItemStack pStack) {
|
||||
// if (pStack.getItem() instanceof GunItem) {
|
||||
// ItemStack ammoPerk = this.container.getItem(AMMO_PERK_SLOT);
|
||||
// ItemStack funcPerk = this.container.getItem(FUNC_PERK_SLOT);
|
||||
// ItemStack damagePerk = this.container.getItem(DAMAGE_PERK_SLOT);
|
||||
//
|
||||
// boolean flag1 = ammoPerk.isEmpty();
|
||||
// boolean flag2 = funcPerk.isEmpty();
|
||||
// boolean flag3 = damagePerk.isEmpty();
|
||||
//
|
||||
// return flag1 && flag2 && flag3 && this.container.getItem(RESULT_SLOT).isEmpty() && this.container.getItem(INPUT_SLOT).isEmpty();
|
||||
// }
|
||||
if (pStack.getItem() instanceof GunItem) {
|
||||
ItemStack ammoPerk = this.container.getItem(AMMO_PERK_SLOT);
|
||||
ItemStack funcPerk = this.container.getItem(FUNC_PERK_SLOT);
|
||||
ItemStack damagePerk = this.container.getItem(DAMAGE_PERK_SLOT);
|
||||
|
||||
boolean flag1 = ammoPerk.isEmpty();
|
||||
boolean flag2 = funcPerk.isEmpty();
|
||||
boolean flag3 = damagePerk.isEmpty();
|
||||
|
||||
return flag1 && flag2 && flag3 && this.container.getItem(RESULT_SLOT).isEmpty() && this.container.getItem(INPUT_SLOT).isEmpty();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -471,9 +472,11 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
|
|||
case DAMAGE -> DAMAGE_PERK_SLOT;
|
||||
};
|
||||
|
||||
return pStack.getItem() instanceof PerkItem<?> perkItem && perkItem.getPerk().type == type;
|
||||
// && !container.getItem(INPUT_SLOT).isEmpty() && container.getItem(INPUT_SLOT).getItem() instanceof GunItem gunItem
|
||||
// && gunItem.canApplyPerk(perkItem.getPerk()) && container.getItem(slot).isEmpty();
|
||||
return pStack.getItem() instanceof PerkItem<?> perkItem && perkItem.getPerk().type == type
|
||||
&& !container.getItem(INPUT_SLOT).isEmpty()
|
||||
&& container.getItem(INPUT_SLOT).getItem() instanceof GunItem gunItem
|
||||
&& gunItem.canApplyPerk(perkItem.getPerk())
|
||||
&& container.getItem(slot).isEmpty();
|
||||
}
|
||||
|
||||
public int getMaxStackSize() {
|
||||
|
|
|
@ -4,8 +4,12 @@ import com.atsuishio.superbwarfare.ModUtils;
|
|||
import com.atsuishio.superbwarfare.capability.ModCapabilities;
|
||||
import com.atsuishio.superbwarfare.event.GunEventHandler;
|
||||
import com.atsuishio.superbwarfare.init.ModItems;
|
||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||
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 io.netty.buffer.ByteBuf;
|
||||
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 < (
|
||||
// todo perk
|
||||
// perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? 1 : projectileAmount
|
||||
projectileAmount
|
||||
); index0++) {
|
||||
for (int index0 = 0; index0 < (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? 1 : projectileAmount); index0++) {
|
||||
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")));
|
||||
|
||||
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_VERYFAR.get(), soundRadius, pitch);
|
||||
|
||||
// if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||
// player.playSound(ModSounds.HENG.get(), 4f, pitch);
|
||||
// }
|
||||
if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||
player.playSound(ModSounds.HENG.get(), 4f, pitch);
|
||||
}
|
||||
}
|
||||
|
||||
GunEventHandler.gunShoot(player, spared);
|
||||
|
|
255
src/main/java/com/atsuishio/superbwarfare/perk/PerkHelper.java
Normal file
255
src/main/java/com/atsuishio/superbwarfare/perk/PerkHelper.java
Normal 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();
|
||||
}
|
Loading…
Add table
Reference in a new issue