Skip to content

Commit

Permalink
Add gamerule for lethal poison damage.
Browse files Browse the repository at this point in the history
  • Loading branch information
Provismet committed Jul 25, 2024
1 parent 4aaeec2 commit 7a6e40d
Show file tree
Hide file tree
Showing 12 changed files with 106 additions and 2 deletions.
4 changes: 4 additions & 0 deletions src/main/generated/assets/combat-plus-core/lang/en_us.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
{
"death.attack.lethal_poison": "%1$s couldn't find an antidote",
"death.attack.lethal_poison.item": "%1$s succumbed to poison whilst fighting %2$s using %3$s",
"death.attack.lethal_poison.player": "%1$s succumbed to poison whilst fighting %2$s",
"enchantment.combat-plus.logger": "Example Enchantment",
"gamerule.category.combat-plus": "Combat+",
"gamerule.keepLoyaltyTridents": "Keep Loyalty Tridents",
"gamerule.lethalPoison": "Lethal Poison",
"gamerule.pvpEnchantmentModifier": "PvP Enchantment Modifier",
"gamerule.pvpEnchantmentModifier.description": "Modifies the effectiveness of certain damaging enchantments when used against players.",
"gamerule.sweepingRequiresEnchantment": "Sweeping Requires Enchantment",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"exhaustion": 0.1,
"message_id": "lethal_poison",
"scaling": "when_caused_by_living_non_player"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"values": [
"combat-plus:lethal_poison"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.provismet.CombatPlusCore.mixin;

import com.provismet.CombatPlusCore.utility.CPCDamageTypes;
import com.provismet.CombatPlusCore.utility.CPCGameRules;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.effect.PoisonStatusEffect;
import net.minecraft.entity.effect.StatusEffect;
import net.minecraft.entity.effect.StatusEffectCategory;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(PoisonStatusEffect.class)
public abstract class PoisonStatusEffectMixin extends StatusEffect {
protected PoisonStatusEffectMixin (StatusEffectCategory category, int color) {
super(category, color);
}

@Inject(method = "applyUpdateEffect", at=@At("HEAD"))
private void applyDamage (LivingEntity entity, int amplifier, CallbackInfoReturnable<Boolean> cir) {
if (entity.getHealth() <= 1 && entity.getWorld().getGameRules().getBoolean(CPCGameRules.LETHAL_POISON)) {
entity.damage(CPCDamageTypes.POISON.createDamageSource(entity.getDamageSources()), 1);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.provismet.CombatPlusCore.utility;

import com.provismet.CombatPlusCore.CPCMain;
import com.provismet.lilylib.container.DamageTypeContainer;
import net.minecraft.entity.damage.DamageType;
import net.minecraft.registry.Registerable;

public abstract class CPCDamageTypes {
public static final DamageTypeContainer POISON = new DamageTypeContainer(
CPCMain.identifier("lethal_poison"),
new DamageType("lethal_poison", 0.1f)
);

public static void bootstrap (Registerable<DamageType> registerable) {
registerable.register(POISON.getKey(), POISON.getDamageType());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public class CPCGameRules {
public static final GameRules.Key<BooleanRule> SWEEPING_REQUIRES_ENCHANTMENT = GameRuleRegistry.register("sweepingRequiresEnchantment", CATEGORY, GameRuleFactory.createBooleanRule(false));
public static final GameRules.Key<BooleanRule> LOYALTY_STAYS_IN_HAND = GameRuleRegistry.register("keepLoyaltyTridents", CATEGORY, GameRuleFactory.createBooleanRule(false));
public static final GameRules.Key<DoubleRule> PVP_DAMAGE_MODIFIER = GameRuleRegistry.register("pvpEnchantmentModifier", CATEGORY, GameRuleFactory.createDoubleRule(0.5, 0));
public static final GameRules.Key<BooleanRule> LETHAL_POISON = GameRuleRegistry.register("lethalPoison", CATEGORY, GameRuleFactory.createBooleanRule(false));

public static void init () {
// Loads the class...
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
package com.provismet.datagen.CombatPlusCore;

import com.provismet.CombatPlusCore.CPCMain;
import com.provismet.CombatPlusCore.utility.CPCDamageTypes;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.minecraft.registry.RegistryBuilder;
import net.minecraft.registry.RegistryKeys;

public class CPCDatagen implements DataGeneratorEntrypoint {
@Override
public void onInitializeDataGenerator (FabricDataGenerator fabricDataGenerator) {
FabricDataGenerator.Pack pack = fabricDataGenerator.createPack();
pack.addProvider(EnchantmentGenerator::new);
pack.addProvider(DamageTypeGenerator::new);
pack.addProvider(DamageTypeTagGenerator::new);
pack.addProvider(ItemTagGenerator::new);
pack.addProvider(EnchantmentTagGenerator::new);
Expand All @@ -20,4 +24,9 @@ public void onInitializeDataGenerator (FabricDataGenerator fabricDataGenerator)
FabricDataGenerator.Pack numbers = fabricDataGenerator.createBuiltinResourcePack(CPCMain.identifier("enchanted_numbers"));
numbers.addProvider(NumberGenerator::new);
}

@Override
public void buildRegistry (RegistryBuilder registryBuilder) {
registryBuilder.addRegistry(RegistryKeys.DAMAGE_TYPE, CPCDamageTypes::bootstrap);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.provismet.datagen.CombatPlusCore;

import com.provismet.CombatPlusCore.utility.CPCDamageTypes;
import com.provismet.lilylib.datagen.provider.LilyDamageTypeProvider;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.minecraft.registry.RegistryWrapper;

import java.util.concurrent.CompletableFuture;

public class DamageTypeGenerator extends LilyDamageTypeProvider {
protected DamageTypeGenerator (FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registriesFuture) {
super(output, registriesFuture);
}

@Override
protected void generate (RegistryWrapper.WrapperLookup registries, DamageConsumer consumer) {
consumer.add(CPCDamageTypes.POISON);
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.provismet.datagen.CombatPlusCore;

import com.provismet.CombatPlusCore.utility.CPCDamageTypes;
import com.provismet.CombatPlusCore.utility.tag.CPCDamageTypeTags;
import com.provismet.lilylib.datagen.tag.LilyTagProviders;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.minecraft.entity.damage.DamageTypes;
import net.minecraft.registry.RegistryWrapper;
import net.minecraft.registry.tag.DamageTypeTags;

import java.util.concurrent.CompletableFuture;

Expand All @@ -19,5 +21,9 @@ protected void configure (RegistryWrapper.WrapperLookup wrapperLookup) {
.add(DamageTypes.PLAYER_ATTACK)
.add(DamageTypes.MOB_ATTACK)
.add(DamageTypes.MOB_ATTACK_NO_AGGRO);


getOrCreateTagBuilder(DamageTypeTags.BYPASSES_ARMOR)
.add(CPCDamageTypes.POISON.getKey());
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
package com.provismet.datagen.CombatPlusCore;

import com.provismet.CombatPlusCore.utility.CPCDamageTypes;
import com.provismet.CombatPlusCore.utility.CPCGameRules;
import com.provismet.CombatPlusCore.utility.tag.CPCEnchantmentTags;
import com.provismet.CombatPlusCore.utility.tag.CPCItemTags;
import com.provismet.lilylib.datagen.provider.LilyLanguageProvider;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricLanguageProvider;
import net.minecraft.registry.RegistryWrapper;

import java.util.concurrent.CompletableFuture;

public class LanguageGenerator extends FabricLanguageProvider {
public class LanguageGenerator extends LilyLanguageProvider {
protected LanguageGenerator (FabricDataOutput dataOutput, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
super(dataOutput, registryLookup);
}
Expand All @@ -20,6 +22,7 @@ public void generateTranslations (RegistryWrapper.WrapperLookup registryLookup,
translationBuilder.add("gamerule.keepLoyaltyTridents", "Keep Loyalty Tridents");
translationBuilder.add("gamerule.pvpEnchantmentModifier", "PvP Enchantment Modifier");
translationBuilder.add("gamerule.pvpEnchantmentModifier.description", "Modifies the effectiveness of certain damaging enchantments when used against players.");
translationBuilder.add(CPCGameRules.LETHAL_POISON.getTranslationKey(), "Lethal Poison");

translationBuilder.add(CPCItemTags.MELEE_WEAPON, "Melee Weapons");
translationBuilder.add(CPCItemTags.DUAL_WEAPON, "Dual Weapons");
Expand All @@ -46,5 +49,11 @@ public void generateTranslations (RegistryWrapper.WrapperLookup registryLookup,
translationBuilder.add("resourcepack.combat-plus.enchanted_numerals.description", "Numerals go up to level 255");
translationBuilder.add("resourcepack.combat-plus.enchanted_numbers", "Enchantment Numbers");
translationBuilder.add("resourcepack.combat-plus.enchanted_numbers.description", "Numerals are now numbers");

addDeathMessage(translationBuilder, CPCDamageTypes.POISON,
"%1$s couldn't find an antidote",
"%1$s succumbed to poison whilst fighting %2$s",
"%1$s succumbed to poison whilst fighting %2$s using %3$s"
);
}
}
2 changes: 2 additions & 0 deletions src/main/resources/combat-plus.accesswidener
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
accessWidener v2 named

accessible class net/minecraft/entity/effect/PoisonStatusEffect

accessible method net/minecraft/enchantment/Enchantment modifyValue (Lnet/minecraft/component/ComponentType;Lnet/minecraft/server/world/ServerWorld;ILnet/minecraft/item/ItemStack;Lorg/apache/commons/lang3/mutable/MutableFloat;)V
accessible method net/minecraft/enchantment/Enchantment modifyValue (Lnet/minecraft/component/ComponentType;Lnet/minecraft/server/world/ServerWorld;ILnet/minecraft/item/ItemStack;Lnet/minecraft/entity/Entity;Lorg/apache/commons/lang3/mutable/MutableFloat;)V
accessible method net/minecraft/enchantment/Enchantment modifyValue (Lnet/minecraft/component/ComponentType;Lnet/minecraft/server/world/ServerWorld;ILnet/minecraft/item/ItemStack;Lnet/minecraft/entity/Entity;Lnet/minecraft/entity/damage/DamageSource;Lorg/apache/commons/lang3/mutable/MutableFloat;)V
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/combat-plus.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"MaceItemMixin",
"MobEntityMixin",
"PlayerEntityMixin",
"PoisonStatusEffectMixin",
"SwordItemMixin",
"TridentItemMixin"
],
Expand Down

0 comments on commit 7a6e40d

Please sign in to comment.