添加了新perk

This commit is contained in:
17146 2024-10-16 03:42:37 +08:00
parent f8feb06679
commit 31c8d09c55
6 changed files with 60 additions and 31 deletions

View file

@ -191,7 +191,6 @@ public class ClientEventHandler {
}
// 开火部分
double weight = stack.getOrCreateTag().getDouble("weight");
double speed = 1;
@ -210,7 +209,6 @@ public class ClientEventHandler {
cantFireTime = Mth.clamp(cantFireTime - 6 * speed * times, 0, 24);
}
if (GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_LEFT) == GLFW.GLFW_PRESS
&& (player.getMainHandItem().is(ModTags.Items.NORMAL_GUN)
&& cantFireTime == 0
@ -218,7 +216,6 @@ public class ClientEventHandler {
&& !notInGame()
|| (stack.is(ModItems.MINIGUN.get()) && !player.isSprinting() && stack.getOrCreateTag().getDouble("overheat") == 0 && !player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getDouble("minigun_rotation") >= 10
))) {
double customRpm = 0;
if (stack.getItem() == ModItems.DEVOTION.get()) {
@ -233,12 +230,16 @@ public class ClientEventHandler {
if (rpm == 0) {
rpm = 600;
}
if (stack.getOrCreateTag().getInt("DesperadoTimePost") > 0) {
rpm *= 1.3;
}
double rps = rpm / 60;
// cooldown in ms
double cooldown = 1000 / rps;
if (!clientTimer.started()) {
clientTimer.start();
// 首发瞬间发射
@ -249,7 +250,6 @@ public class ClientEventHandler {
ModUtils.PACKET_HANDLER.sendToServer(new ShootMessage(spread));
clientTimer.setProgress((long) (clientTimer.getProgress() - cooldown));
}
} else {
clientTimer.stop();
fireSpread = 0;

View file

@ -451,6 +451,10 @@ public class LivingEventHandler {
handleKillingTallyAddCount(stack);
handleSubsistence(stack, attacker);
}
if (DamageTypeTool.isHeadshotDamage(source)) {
handleDesperado(stack);
}
}
private static void handleClipPerks(ItemStack stack) {
@ -584,6 +588,15 @@ public class LivingEventHandler {
}
}
private static void handleDesperado(ItemStack stack) {
int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack);
if (level == 0) {
return;
}
stack.getOrCreateTag().putInt("DesperadoTime", 90 + level * 10);
}
/**
* 开启死亡掉落时掉落一个弹药盒
*/

View file

@ -29,6 +29,7 @@ public class ReloadEventHandler {
handleHealClipPre(stack);
handleKillClipPre(stack);
handleKillingTallyPre(stack);
handleDesperadoPre(stack);
}
@SubscribeEvent
@ -45,6 +46,7 @@ public class ReloadEventHandler {
handleHealClipPost(player, stack);
handleKillClipPost(stack);
handleDesperadoPost(stack);
}
private static void handleHealClipPre(ItemStack stack) {
@ -103,4 +105,23 @@ public class ReloadEventHandler {
stack.getOrCreateTag().putInt("KillingTally", 0);
}
}
private static void handleDesperadoPre(ItemStack stack) {
int time = stack.getOrCreateTag().getInt("DesperadoTime");
if (time > 0) {
stack.getOrCreateTag().putInt("DesperadoTime", 0);
stack.getOrCreateTag().putBoolean("Desperado", true);
} else {
stack.getOrCreateTag().putBoolean("Desperado", false);
}
}
private static void handleDesperadoPost(ItemStack stack) {
if (!stack.getOrCreateTag().getBoolean("Desperado")) {
return;
}
int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack);
stack.getOrCreateTag().putInt("DesperadoTimePost", 110 + level * 10);
}
}

View file

@ -54,6 +54,7 @@ public class ModPerks {
public static final RegistryObject<Perk> FIELD_DOCTOR = FUNC_PERKS.register("field_doctor", () -> new Perk("field_doctor", Perk.Type.FUNCTIONAL));
public static final RegistryObject<Perk> SUPER_RECHARGE = FUNC_PERKS.register("super_recharge", () -> new Perk("super_recharge", Perk.Type.FUNCTIONAL));
public static final RegistryObject<Perk> DIMENSION_MAGAZINE = FUNC_PERKS.register("dimension_magazine", () -> new Perk("dimension_magazine", Perk.Type.FUNCTIONAL));
public static final RegistryObject<Perk> DESPERADO = FUNC_PERKS.register("desperado", () -> new Perk("desperado", Perk.Type.FUNCTIONAL));
/**
* Damage Perks

View file

@ -43,8 +43,7 @@ public abstract class GunItem extends Item {
@Override
public void inventoryTick(ItemStack itemstack, Level level, Entity entity, int slot, boolean selected) {
if (entity instanceof LivingEntity living) {
ItemStack mainHandItem = living.getMainHandItem();
if (entity instanceof LivingEntity) {
if (!itemstack.is(ModTags.Items.GUN)) {
return;
}
@ -57,7 +56,6 @@ public abstract class GunItem extends Item {
if (itemstack.getOrCreateTag().getBoolean("draw")) {
itemstack.getOrCreateTag().putBoolean("draw", false);
// itemstack.getOrCreateTag().putInt("draw_time", 0);
if (itemstack.getItem() == ModItems.RPG.get() && itemstack.getOrCreateTag().getInt("ammo") == 0) {
itemstack.getOrCreateTag().putDouble("empty", 1);
@ -83,9 +81,7 @@ public abstract class GunItem extends Item {
if ((itemstack.is(ModTags.Items.EXTRA_ONE_AMMO) && itemstack.getOrCreateTag().getInt("ammo") > itemstack.getOrCreateTag().getInt("mag") + itemstack.getOrCreateTag().getInt("customMag") + 1)
|| (!itemstack.is(ModTags.Items.EXTRA_ONE_AMMO) && itemstack.getOrCreateTag().getInt("ammo") > itemstack.getOrCreateTag().getInt("mag") + itemstack.getOrCreateTag().getInt("customMag"))
) {
int count = itemstack.getOrCreateTag().getInt("ammo") - itemstack.getOrCreateTag().getInt("mag") + itemstack.getOrCreateTag().getInt("customMag") - (itemstack.is(ModTags.Items.EXTRA_ONE_AMMO) ? 1 : 0);
entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
if (itemstack.is(ModTags.Items.USE_SHOTGUN_AMMO)) {
@ -156,22 +152,8 @@ public abstract class GunItem extends Item {
}
private void handleGunPerks(ItemStack stack) {
if (stack.getOrCreateTag().getInt("HealClipTime") > 0) {
stack.getOrCreateTag().putInt("HealClipTime", Math.max(0, stack.getOrCreateTag().getInt("HealClipTime") - 1));
}
if (stack.getOrCreateTag().getInt("KillClipReloadTime") > 0) {
stack.getOrCreateTag().putInt("KillClipReloadTime", Math.max(0, stack.getOrCreateTag().getInt("KillClipReloadTime") - 1));
}
if (stack.getOrCreateTag().getInt("KillClipTime") > 0) {
stack.getOrCreateTag().putInt("KillClipTime", Math.max(0, stack.getOrCreateTag().getInt("KillClipTime") - 1));
}
if (stack.getOrCreateTag().getInt("FourthTimesCharmTick") > 0) {
stack.getOrCreateTag().putInt("FourthTimesCharmTick",
Math.max(0, stack.getOrCreateTag().getInt("FourthTimesCharmTick") - 1));
}
reduceTagTime(stack, "HealClipTime", "KillClipReloadTime", "KillClipTime", "FourthTimesCharmTick", "HeadSeeker",
"DesperadoTime", "DesperadoTimePost");
if (PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack) > 0) {
int count = stack.getOrCreateTag().getInt("FourthTimesCharmCount");
@ -184,10 +166,6 @@ public abstract class GunItem extends Item {
}
}
if (stack.getOrCreateTag().getInt("HeadSeeker") > 0) {
stack.getOrCreateTag().putInt("HeadSeeker", Math.max(0, stack.getOrCreateTag().getInt("HeadSeeker") - 1));
}
int ctmMag = stack.getOrCreateTag().getInt("mag");
if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) {
stack.getOrCreateTag().putInt("customMag", (int) (Math.ceil(0.1 * PerkHelper.getItemPerkLevel(ModPerks.DIMENSION_MAGAZINE.get(), stack) * ctmMag)));
@ -201,4 +179,20 @@ public abstract class GunItem extends Item {
public boolean canApplyPerk(Perk perk) {
return true;
}
private void reduceTagTime(ItemStack stack, String... tag) {
if (!stack.hasTag() || stack.getTag() == null) {
return;
}
for (String t : tag) {
if (!stack.getTag().contains(t)) {
continue;
}
if (stack.getOrCreateTag().getInt(t) > 0) {
stack.getOrCreateTag().putInt(t, Math.max(0, stack.getOrCreateTag().getInt(t) - 1));
}
}
}
}

View file

@ -203,7 +203,7 @@ public class PerkHelper {
}
case FUNCTIONAL -> {
return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FIELD_DOCTOR.get() ||
perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get();
perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.DESPERADO.get();
}
case DAMAGE -> {
return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() ||