添加击杀记录附魔
This commit is contained in:
parent
9adf598485
commit
1e1ff3300e
6 changed files with 133 additions and 49 deletions
|
@ -0,0 +1,39 @@
|
||||||
|
package net.mcreator.superbwarfare.enchantment;
|
||||||
|
|
||||||
|
import net.mcreator.superbwarfare.init.ModTags;
|
||||||
|
import net.mcreator.superbwarfare.tools.EnchantmentCategoryTool;
|
||||||
|
import net.minecraft.world.entity.EquipmentSlot;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.item.enchantment.Enchantment;
|
||||||
|
|
||||||
|
public class KillingTally extends Enchantment {
|
||||||
|
|
||||||
|
public KillingTally() {
|
||||||
|
super(Rarity.VERY_RARE, EnchantmentCategoryTool.GUN, new EquipmentSlot[]{EquipmentSlot.MAINHAND});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxLevel() {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isTreasureOnly() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMinCost(int pLevel) {
|
||||||
|
return 23 + 3 * pLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxCost(int pLevel) {
|
||||||
|
return getMinCost(pLevel) + 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canApplyAtEnchantingTable(ItemStack itemstack) {
|
||||||
|
return itemstack.is(ModTags.Items.CAN_SHOOT_BULLET);
|
||||||
|
}
|
||||||
|
}
|
|
@ -39,9 +39,8 @@ public class LivingEventHandler {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
handleKillClipDamage(event);
|
handleGunEnchantmentsWhenHurt(event);
|
||||||
renderDamageIndicator(event);
|
renderDamageIndicator(event);
|
||||||
handleGutshotStraightDamage(event);
|
|
||||||
reduceBulletDamage(event, event.getSource(), event.getEntity(), event.getSource().getEntity(), event.getAmount());
|
reduceBulletDamage(event, event.getSource(), event.getEntity(), event.getSource().getEntity(), event.getAmount());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,8 +51,8 @@ public class LivingEventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
killIndication(event.getSource().getEntity());
|
killIndication(event.getSource().getEntity());
|
||||||
|
handleGunEnchantmentsWhenDeath(event);
|
||||||
handlePlayerKillEntity(event);
|
handlePlayerKillEntity(event);
|
||||||
handleClipEnchantments(event);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void reduceBulletDamage(LivingHurtEvent event, DamageSource damagesource, LivingEntity entity, Entity sourceentity, double amount) {
|
private static void reduceBulletDamage(LivingHurtEvent event, DamageSource damagesource, LivingEntity entity, Entity sourceentity, double amount) {
|
||||||
|
@ -201,6 +200,11 @@ public class LivingEventHandler {
|
||||||
newStack.getOrCreateTag().putBoolean("sentinel_is_charging", false);
|
newStack.getOrCreateTag().putBoolean("sentinel_is_charging", false);
|
||||||
newStack.getOrCreateTag().putInt("sentinel_charge_time", 0);
|
newStack.getOrCreateTag().putInt("sentinel_charge_time", 0);
|
||||||
|
|
||||||
|
int level = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.KILLING_TALLY.get(), newStack);
|
||||||
|
if (level != 0) {
|
||||||
|
newStack.getOrCreateTag().putInt("KillingTally", 0);
|
||||||
|
}
|
||||||
|
|
||||||
double weight = newStack.getOrCreateTag().getDouble("weight");
|
double weight = newStack.getOrCreateTag().getDouble("weight");
|
||||||
|
|
||||||
if (weight == 0) {
|
if (weight == 0) {
|
||||||
|
@ -251,7 +255,7 @@ public class LivingEventHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void handleClipEnchantments(LivingDeathEvent event) {
|
private static void handleGunEnchantmentsWhenHurt(LivingHurtEvent event) {
|
||||||
DamageSource source = event.getSource();
|
DamageSource source = event.getSource();
|
||||||
|
|
||||||
Player attacker = null;
|
Player attacker = null;
|
||||||
|
@ -266,14 +270,58 @@ public class LivingEventHandler {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) ||
|
|
||||||
source.is(ModDamageTypes.ARROW_IN_BRAIN) || source.is(ModDamageTypes.ARROW_IN_KNEE)
|
|
||||||
|| source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
|
||||||
ItemStack stack = attacker.getMainHandItem();
|
ItemStack stack = attacker.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) {
|
if (!stack.is(ModTags.Items.GUN)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) ||
|
||||||
|
source.is(ModDamageTypes.ARROW_IN_BRAIN) || source.is(ModDamageTypes.ARROW_IN_KNEE)
|
||||||
|
|| source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
||||||
|
handleKillClipDamage(stack, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (source.is(ModDamageTypes.GUN_FIRE) && source.getDirectEntity() instanceof ProjectileEntity projectile && projectile.isZoom()) {
|
||||||
|
handleGutshotStraightDamage(stack, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) {
|
||||||
|
handleKillingTallyDamage(stack, event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void handleGunEnchantmentsWhenDeath(LivingDeathEvent event) {
|
||||||
|
DamageSource source = event.getSource();
|
||||||
|
|
||||||
|
Player attacker = null;
|
||||||
|
if (source.getEntity() instanceof Player player) {
|
||||||
|
attacker = player;
|
||||||
|
}
|
||||||
|
if (source.getDirectEntity() instanceof Projectile projectile && projectile.getOwner() instanceof Player player) {
|
||||||
|
attacker = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attacker == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemStack stack = attacker.getMainHandItem();
|
||||||
|
if (!stack.is(ModTags.Items.GUN)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) ||
|
||||||
|
source.is(ModDamageTypes.ARROW_IN_BRAIN) || source.is(ModDamageTypes.ARROW_IN_KNEE)
|
||||||
|
|| source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
||||||
|
handleClipEnchantments(stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) {
|
||||||
|
handleKillingTallyAddCount(stack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void handleClipEnchantments(ItemStack stack) {
|
||||||
int healClipLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.HEAL_CLIP.get(), stack);
|
int healClipLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.HEAL_CLIP.get(), stack);
|
||||||
if (healClipLevel != 0) {
|
if (healClipLevel != 0) {
|
||||||
stack.getOrCreateTag().putInt("HealClipTime", 80 + healClipLevel * 20);
|
stack.getOrCreateTag().putInt("HealClipTime", 80 + healClipLevel * 20);
|
||||||
|
@ -284,31 +332,8 @@ public class LivingEventHandler {
|
||||||
stack.getOrCreateTag().putInt("KillClipReloadTime", 80);
|
stack.getOrCreateTag().putInt("KillClipReloadTime", 80);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleKillClipDamage(LivingHurtEvent event) {
|
|
||||||
DamageSource source = event.getSource();
|
|
||||||
|
|
||||||
Player attacker = null;
|
|
||||||
if (source.getEntity() instanceof Player player) {
|
|
||||||
attacker = player;
|
|
||||||
}
|
|
||||||
if (source.getDirectEntity() instanceof Projectile projectile && projectile.getOwner() instanceof Player player) {
|
|
||||||
attacker = player;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (attacker == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) ||
|
|
||||||
source.is(ModDamageTypes.ARROW_IN_BRAIN) || source.is(ModDamageTypes.ARROW_IN_KNEE)
|
|
||||||
|| source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
|
||||||
ItemStack stack = attacker.getMainHandItem();
|
|
||||||
if (!stack.is(ModTags.Items.GUN)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
private static void handleKillClipDamage(ItemStack stack, LivingHurtEvent event) {
|
||||||
if (stack.getOrCreateTag().getInt("KillClipTime") > 0) {
|
if (stack.getOrCreateTag().getInt("KillClipTime") > 0) {
|
||||||
int enchantmentLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.GUTSHOT_STRAIGHT.get(), stack);
|
int enchantmentLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.GUTSHOT_STRAIGHT.get(), stack);
|
||||||
if (enchantmentLevel == 0) {
|
if (enchantmentLevel == 0) {
|
||||||
|
@ -318,25 +343,8 @@ public class LivingEventHandler {
|
||||||
event.setAmount(event.getAmount() * (1.2f + 0.05f * enchantmentLevel));
|
event.setAmount(event.getAmount() * (1.2f + 0.05f * enchantmentLevel));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleGutshotStraightDamage(LivingHurtEvent event) {
|
|
||||||
DamageSource source = event.getSource();
|
|
||||||
if (!source.is(ModDamageTypes.GUN_FIRE)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity directSource = source.getDirectEntity();
|
|
||||||
if (directSource instanceof ProjectileEntity projectile && projectile.getShooter() instanceof Player player) {
|
|
||||||
if (!projectile.isZoom()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemStack stack = player.getMainHandItem();
|
|
||||||
if (!stack.is(ModTags.Items.GUN)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
private static void handleGutshotStraightDamage(ItemStack stack, LivingHurtEvent event) {
|
||||||
int enchantmentLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.GUTSHOT_STRAIGHT.get(), stack);
|
int enchantmentLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.GUTSHOT_STRAIGHT.get(), stack);
|
||||||
if (enchantmentLevel == 0) {
|
if (enchantmentLevel == 0) {
|
||||||
return;
|
return;
|
||||||
|
@ -344,5 +352,26 @@ public class LivingEventHandler {
|
||||||
|
|
||||||
event.setAmount(event.getAmount() * (1.15f + 0.05f * enchantmentLevel));
|
event.setAmount(event.getAmount() * (1.15f + 0.05f * enchantmentLevel));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void handleKillingTallyDamage(ItemStack stack, LivingHurtEvent event) {
|
||||||
|
int level = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.KILLING_TALLY.get(), stack);
|
||||||
|
if (level == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int killTally = stack.getOrCreateTag().getInt("KillingTally");
|
||||||
|
if (killTally == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
event.setAmount(event.getAmount() * (1.0f + (0.1f * level) * killTally));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void handleKillingTallyAddCount(ItemStack stack) {
|
||||||
|
int level = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.KILLING_TALLY.get(), stack);
|
||||||
|
if (level != 0) {
|
||||||
|
stack.getOrCreateTag().putInt("KillingTally", Math.min(3, stack.getOrCreateTag().getInt("KillingTally") + 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ public class ReloadEventHandler {
|
||||||
|
|
||||||
handleHealClipPre(stack);
|
handleHealClipPre(stack);
|
||||||
handleKillClipPre(stack);
|
handleKillClipPre(stack);
|
||||||
|
handleKillingTallyPre(stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
@ -92,4 +93,14 @@ public class ReloadEventHandler {
|
||||||
stack.getOrCreateTag().putInt("KillClipTime", 90 + 10 * level);
|
stack.getOrCreateTag().putInt("KillClipTime", 90 + 10 * level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void handleKillingTallyPre(ItemStack stack) {
|
||||||
|
int level = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.KILLING_TALLY.get(), stack);
|
||||||
|
if (level == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stack.getOrCreateTag().contains("KillingTally")) {
|
||||||
|
stack.getOrCreateTag().putInt("KillingTally", 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,4 +18,5 @@ public class ModEnchantments {
|
||||||
public static final RegistryObject<Enchantment> HEAL_CLIP = REGISTRY.register("heal_clip", HealClip::new);
|
public static final RegistryObject<Enchantment> HEAL_CLIP = REGISTRY.register("heal_clip", HealClip::new);
|
||||||
public static final RegistryObject<Enchantment> KILL_CLIP = REGISTRY.register("kill_clip", KillClip::new);
|
public static final RegistryObject<Enchantment> KILL_CLIP = REGISTRY.register("kill_clip", KillClip::new);
|
||||||
public static final RegistryObject<Enchantment> GUTSHOT_STRAIGHT = REGISTRY.register("gutshot_straight", GutshotStraight::new);
|
public static final RegistryObject<Enchantment> GUTSHOT_STRAIGHT = REGISTRY.register("gutshot_straight", GutshotStraight::new);
|
||||||
|
public static final RegistryObject<Enchantment> KILLING_TALLY = REGISTRY.register("killing_tally", KillingTally::new);
|
||||||
}
|
}
|
||||||
|
|
|
@ -253,6 +253,8 @@
|
||||||
"enchantment.superbwarfare.kill_clip.desc": "Increases the damage of weapon after dealing a final blow",
|
"enchantment.superbwarfare.kill_clip.desc": "Increases the damage of weapon after dealing a final blow",
|
||||||
"enchantment.superbwarfare.gutshot_straight": "Gutshot Straight",
|
"enchantment.superbwarfare.gutshot_straight": "Gutshot Straight",
|
||||||
"enchantment.superbwarfare.gutshot_straight.desc": "Aiming down sights increases body shot damage",
|
"enchantment.superbwarfare.gutshot_straight.desc": "Aiming down sights increases body shot damage",
|
||||||
|
"enchantment.superbwarfare.killing_tally": "Killing Tally",
|
||||||
|
"enchantment.superbwarfare.killing_tally.desc": "Kill increases the weapon's damage until it is stowed or reloaded",
|
||||||
|
|
||||||
"des.superbwarfare.sensitivity": "Current Sensitivity of This Gun: %1$s",
|
"des.superbwarfare.sensitivity": "Current Sensitivity of This Gun: %1$s",
|
||||||
"des.superbwarfare.need_bolt_action": "[ Need Bolt Action ]",
|
"des.superbwarfare.need_bolt_action": "[ Need Bolt Action ]",
|
||||||
|
|
|
@ -253,6 +253,8 @@
|
||||||
"enchantment.superbwarfare.kill_clip.desc": "完成击杀后填装可提升武器伤害",
|
"enchantment.superbwarfare.kill_clip.desc": "完成击杀后填装可提升武器伤害",
|
||||||
"enchantment.superbwarfare.gutshot_straight": "直击要害",
|
"enchantment.superbwarfare.gutshot_straight": "直击要害",
|
||||||
"enchantment.superbwarfare.gutshot_straight.desc": "瞄准时增加身体射击伤害",
|
"enchantment.superbwarfare.gutshot_straight.desc": "瞄准时增加身体射击伤害",
|
||||||
|
"enchantment.superbwarfare.killing_tally": "击杀记录",
|
||||||
|
"enchantment.superbwarfare.killing_tally.desc": "完成击杀可提高此武器的伤害,效果持续至切换或填装武器",
|
||||||
|
|
||||||
"des.superbwarfare.sensitivity": "当前枪械的灵敏度为:%1$s",
|
"des.superbwarfare.sensitivity": "当前枪械的灵敏度为:%1$s",
|
||||||
"des.superbwarfare.need_bolt_action": "【需要拉栓】",
|
"des.superbwarfare.need_bolt_action": "【需要拉栓】",
|
||||||
|
|
Loading…
Add table
Reference in a new issue