注册新perk

This commit is contained in:
17146 2024-12-22 20:32:53 +08:00
parent e0b2e11041
commit d63aa20991
7 changed files with 44 additions and 31 deletions

View file

@ -243,7 +243,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
}
this.level().playSound(null, this.getOnPos(), ModSounds.HIT.get(), SoundSource.PLAYERS, 1, 1);
this.entityData.set(HEALTH, this.entityData.get(HEALTH) - 0.5f * java.lang.Math.max(amount - 3, 0));
this.entityData.set(HEALTH, this.entityData.get(HEALTH) - 0.5f * Math.max(amount - 3, 0));
return true;
}

View file

@ -116,7 +116,7 @@ public class LivingEventHandler {
ItemStack stack = sourceEntity instanceof LivingEntity living ? living.getMainHandItem() : ItemStack.EMPTY;
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
//距离衰减
// 距离衰减
if (DamageTypeTool.isGunDamage(source)) {
double distance = entity.position().distanceTo(sourceEntity.position());
@ -137,7 +137,7 @@ public class LivingEventHandler {
}
}
//计算防弹插板减伤
// 计算防弹插板减伤
ItemStack armor = entity.getItemBySlot(EquipmentSlot.CHEST);
if (armor != ItemStack.EMPTY && armor.getTag() != null && armor.getTag().contains("ArmorPlate")) {
@ -466,6 +466,7 @@ public class LivingEventHandler {
if (DamageTypeTool.isGunDamage(source) || source.is(ModDamageTypes.PROJECTILE_BOOM)) {
handleKillClipDamage(stack, event);
handleVorpalWeaponDamage(stack, event);
}
if (DamageTypeTool.isGunFireDamage(source) && source.getDirectEntity() instanceof ProjectileEntity projectile && projectile.isZoom()) {
@ -775,4 +776,13 @@ public class LivingEventHandler {
public static void handlePlayerBeamReset(Player player) {
player.getCapability(ModCapabilities.LASER_CAPABILITY).ifPresent(LaserCapability.ILaserCapability::end);
}
private static void handleVorpalWeaponDamage(ItemStack stack, LivingHurtEvent event) {
var entity = event.getEntity();
int level = PerkHelper.getItemPerkLevel(ModPerks.VORPAL_WEAPON.get(), stack);
if (level <= 0) return;
if (entity.getMaxHealth() < 100.0f) return;
event.setAmount(event.getAmount() * (1.15f + 0.05f * level));
}
}

View file

@ -71,6 +71,7 @@ public class ModPerks {
public static final RegistryObject<Perk> MONSTER_HUNTER = DAMAGE_PERKS.register("monster_hunter", () -> new Perk("monster_hunter", Perk.Type.DAMAGE));
public static final RegistryObject<Perk> VOLT_OVERLOAD = DAMAGE_PERKS.register("volt_overload", () -> new Perk("volt_overload", Perk.Type.DAMAGE));
public static final RegistryObject<Perk> DESPERADO = DAMAGE_PERKS.register("desperado", () -> new Perk("desperado", Perk.Type.DAMAGE));
public static final RegistryObject<Perk> VORPAL_WEAPON = DAMAGE_PERKS.register("vorpal_weapon", () -> new Perk("vorpal_weapon", Perk.Type.DAMAGE));
public static void registerCompatPerks() {
if (ModList.get().isLoaded(CompatHolder.DMV)) {

View file

@ -24,6 +24,7 @@ import java.util.List;
@Mod.EventBusSubscriber(modid = ModUtils.MODID)
public class ModVillagers {
public static final DeferredRegister<PoiType> POI_TYPES = DeferredRegister.create(ForgeRegistries.POI_TYPES, ModUtils.MODID);
public static final DeferredRegister<VillagerProfession> VILLAGER_PROFESSIONS = DeferredRegister.create(ForgeRegistries.VILLAGER_PROFESSIONS, ModUtils.MODID);
@ -185,6 +186,8 @@ public class ModVillagers {
new ItemStack(getItemHolder("fourth_times_charm"), 1), 4, 15, 0.05f));
trades.get(5).add(new BasicItemListing(new ItemStack(Items.EMERALD, 48),
new ItemStack(getItemHolder("monster_hunter"), 1), 4, 25, 0.05f));
trades.get(5).add(new BasicItemListing(new ItemStack(Items.EMERALD, 40),
new ItemStack(getItemHolder("vorpal_weapon"), 1), 4, 25, 0.05f));
trades.get(5).add(new BasicItemListing(new ItemStack(Items.EMERALD, 64),
new ItemStack(ModItems.HUNTING_RIFLE_BLUEPRINT.get()), 10, 30, 0.05f));

View file

@ -186,10 +186,12 @@ public class PerkHelper {
return !perk.descriptionId.equals("butterfly_bullet");
}
case FUNCTIONAL -> {
return perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.POWERFUL_ATTRACTION.get() || perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FIELD_DOCTOR.get() || perk == ModPerks.INTELLIGENT_CHIP.get();
return 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 -> {
return perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.KILL_CLIP.get();
return perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.KILL_CLIP.get() ||
perk == ModPerks.VORPAL_WEAPON.get();
}
default -> {
return false;
@ -208,8 +210,8 @@ public class PerkHelper {
perk == ModPerks.POWERFUL_ATTRACTION.get() || perk == ModPerks.INTELLIGENT_CHIP.get();
}
case DAMAGE -> {
return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() ||
perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.HEAD_SEEKER.get() || perk == ModPerks.DESPERADO.get();
return 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();
}
default -> {
return false;
@ -228,7 +230,8 @@ public class PerkHelper {
|| perk == ModPerks.INTELLIGENT_CHIP.get();
}
case DAMAGE -> {
return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get();
return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get() ||
perk == ModPerks.VORPAL_WEAPON.get();
}
default -> {
return false;
@ -246,7 +249,7 @@ public class PerkHelper {
|| perk == ModPerks.INTELLIGENT_CHIP.get();
}
case DAMAGE -> {
return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.MONSTER_HUNTER.get();
return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.VORPAL_WEAPON.get();
}
default -> {
return false;
@ -260,13 +263,12 @@ public class PerkHelper {
return true;
}
case FUNCTIONAL -> {
return 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();
return 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 -> {
return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() ||
perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.HEAD_SEEKER.get() || perk == ModPerks.DESPERADO.get();
return 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();
}
default -> {
return false;
@ -280,11 +282,11 @@ public class PerkHelper {
return true;
}
case FUNCTIONAL -> {
return perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.POWERFUL_ATTRACTION.get()
|| perk == ModPerks.INTELLIGENT_CHIP.get();
return perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.POWERFUL_ATTRACTION.get() ||
perk == ModPerks.INTELLIGENT_CHIP.get();
}
case DAMAGE -> {
return perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.KILLING_TALLY.get();
return perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.KILLING_TALLY.get() || perk == ModPerks.VORPAL_WEAPON.get();
}
default -> {
return false;
@ -294,6 +296,7 @@ public class PerkHelper {
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();
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();
}

View file

@ -292,11 +292,13 @@
"item.superbwarfare.head_seeker": "Head Seeker",
"des.superbwarfare.head_seeker": "Body shots landed with this weapon increase precision damage for a short time",
"item.superbwarfare.monster_hunter": "Monster Hunter",
"des.superbwarfare.monster_hunter": "Increases the damage of weapon against monsters",
"des.superbwarfare.monster_hunter": "Increases damage of weapon against monsters",
"item.superbwarfare.volt_overload": "Volt Overload",
"des.superbwarfare.volt_overload": "Increases the shock damage of Taser Gun",
"des.superbwarfare.volt_overload": "Increases shock damage of Taser Gun",
"item.superbwarfare.desperado": "Desperado",
"des.superbwarfare.desperado": "精准击杀后进行换弹,可暂时提升射速",
"des.superbwarfare.desperado": "Reload after a precision final blow increases your rate of fire",
"item.superbwarfare.vorpal_weapon": "Vorpal Weapon",
"des.superbwarfare.vorpal_weapon": "Increases damage against bosses",
"item.superbwarfare.empty_perk": "Empty Perk",
"item.superbwarfare.shortcut_pack": "Shortcut Pack",
@ -391,26 +393,22 @@
"item.minecraft.splash_potion.effect.superbwarfare_long_shock": "Splash Potion of Shock",
"item.minecraft.lingering_potion.effect.superbwarfare_long_shock": "Lingering Potion of Shock",
"des.superbwarfare.sensitivity": "Current Sensitivity of This Gun: %1$s",
"des.superbwarfare.need_bolt_action": "[ Need Bolt Action ]",
"commands.ammo.get": "Current %s ammo: %s",
"commands.ammo.set": "Set %s ammo to %s for %s players",
"commands.ammo.add": "Added %s ammo of amount %s for %s players",
"des.superbwarfare.sensitivity": "Current Sensitivity of This Gun: %1$s",
"des.superbwarfare.monitor.linked": "Connect",
"des.superbwarfare.monitor.monitor_already_linked": "This monitor has been connected",
"des.superbwarfare.monitor.already_linked": "This device has been connected",
"des.superbwarfare.monitor.unlinked": "Disconnect",
"des.superbwarfare.no_cloth_config": "您尚未安装 Cloth Config API无法打开配置界面",
"des.superbwarfare.drone.distance": "DISTANCE:",
"des.superbwarfare.drone.health": "HEALTH:",
"des.superbwarfare.drone.ammo": "AMMO:",
"des.superbwarfare.drone.range": "RANGE:",
"des.superbwarfare.drone.kamikaze": "KAMIKAZE",
"des.superbwarfare.drone.warning": "WARNING!",
"des.superbwarfare.shoot.rings": "Rings ",
"entity.minecraft.villager.superbwarfare.armory": "Armory",

View file

@ -297,6 +297,8 @@
"des.superbwarfare.volt_overload": "增加泰瑟枪电击的伤害",
"item.superbwarfare.desperado": "亡命之徒",
"des.superbwarfare.desperado": "精准击杀后进行换弹,可暂时提升射速",
"item.superbwarfare.vorpal_weapon": "斩首武器",
"des.superbwarfare.vorpal_weapon": "提升对强大敌人造成的伤害",
"item.superbwarfare.empty_perk": "空白模组",
"item.superbwarfare.shortcut_pack": "捷径包",
@ -391,26 +393,22 @@
"item.minecraft.splash_potion.effect.superbwarfare_long_shock": "喷溅型电击药水",
"item.minecraft.lingering_potion.effect.superbwarfare_long_shock": "滞留型电击药水",
"des.superbwarfare.sensitivity": "当前枪械的灵敏度为:%1$s",
"des.superbwarfare.need_bolt_action": "【需要拉栓】",
"commands.ammo.get": "当前%s弹药数量: %s",
"commands.ammo.set": "为%3$s位玩家的%1$s弹药数量设置为%2$s",
"commands.ammo.add": "为%3$s位玩家添加了%2$s发%1$s弹药",
"des.superbwarfare.sensitivity": "当前枪械的灵敏度为:%1$s",
"des.superbwarfare.monitor.linked": "连接成功!",
"des.superbwarfare.monitor.monitor_already_linked": "这个遥控器已连接到一个设备!",
"des.superbwarfare.monitor.already_linked": "这个设备已被连接!",
"des.superbwarfare.monitor.unlinked": "断开连接!",
"des.superbwarfare.no_cloth_config": "您尚未安装 Cloth Config API无法打开配置界面",
"des.superbwarfare.drone.distance": "飞手距离:",
"des.superbwarfare.drone.health": "耐久值:",
"des.superbwarfare.drone.ammo": "弹药:",
"des.superbwarfare.drone.range": "测距:",
"des.superbwarfare.drone.kamikaze": "自爆模式",
"des.superbwarfare.drone.warning": "警告!",
"des.superbwarfare.shoot.rings": "环 ",
"entity.minecraft.villager.superbwarfare.armory": "军械师",