Skip to content

Commit

Permalink
Abilities
Browse files Browse the repository at this point in the history
  • Loading branch information
MC-datapack committed Feb 7, 2025
1 parent ed447be commit 90b1500
Show file tree
Hide file tree
Showing 9 changed files with 194 additions and 41 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ yarn_mappings=1.21.4+build.2
loader_version=0.16.9

# Mod Properties
mod_version=7.3+1.21.4
mod_version=8.0+1.21.4
maven_group=github.mcdatapack.more_tools_and_armor
archives_base_name=more_tools_and_armor

Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package github.mcdatapack.more_tools_and_armor.item;

import net.minecraft.item.ArmorItem;
import net.minecraft.item.equipment.ArmorMaterial;
import net.minecraft.item.equipment.EquipmentType;

public class MoreToolsAndArmorArmorItem extends ArmorItem implements MoreToolsAndArmorItem<ArmorMaterial> {
private final ArmorMaterial material;

public MoreToolsAndArmorArmorItem(ArmorMaterial material, EquipmentType type, Settings settings) {
super(material, type, settings);
this.material = material;
}

@Override
public ArmorMaterial getMaterial() {
return material;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package github.mcdatapack.more_tools_and_armor.item;

public interface MoreToolsAndArmorItem<T> {
T getMaterial();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package github.mcdatapack.more_tools_and_armor.mixns.ability;

import github.mcdatapack.more_tools_and_armor.util.Abilities;
import net.minecraft.entity.mob.EndermanEntity;
import net.minecraft.entity.player.PlayerEntity;
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(EndermanEntity.class)
public class EndermanEntityMixin {
@Inject(method = "isPlayerStaring", at = @At("RETURN"), cancellable = true)
private void isPlayerStaring(PlayerEntity player, CallbackInfoReturnable<Boolean> cir) {
if (cir.getReturnValue()) {
if (Abilities.isWearingEndermanSaveArmor(player)) {
cir.setReturnValue(false);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package github.mcdatapack.more_tools_and_armor.mixns.ability;

import github.mcdatapack.more_tools_and_armor.util.Abilities;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.ai.TargetPredicate;
import net.minecraft.entity.mob.AbstractPiglinEntity;
import net.minecraft.entity.mob.EndermanEntity;
import net.minecraft.entity.mob.ZombifiedPiglinEntity;
import net.minecraft.entity.passive.IronGolemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.world.ServerWorld;
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(TargetPredicate.class)
public class TargetPredicateMixin {
@Inject(method = "test", at = @At("RETURN"), cancellable = true)
private void canTarget(ServerWorld world, LivingEntity tester, LivingEntity target, CallbackInfoReturnable<Boolean> cir) {
if (tester instanceof IronGolemEntity ironGolem && target instanceof PlayerEntity player) {
if (Abilities.isWearingIronGolemPassiveArmor(player)) {
cir.setReturnValue(false);
}
}
if ((tester instanceof AbstractPiglinEntity piglinEntity || tester instanceof ZombifiedPiglinEntity zombifiedPiglinEntity) && target instanceof PlayerEntity player) {
if (Abilities.isWearingPiglinPassiveArmor(player)) {
cir.setReturnValue(false);
}
}
if (tester instanceof EndermanEntity endermanEntity && target instanceof PlayerEntity player) {
if (Abilities.isWearingEndermanPassiveArmor(player)) {
cir.setReturnValue(false);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package github.mcdatapack.more_tools_and_armor.util;

import github.mcdatapack.more_tools_and_armor.init.ArmorMaterialInit;
import github.mcdatapack.more_tools_and_armor.item.MoreToolsAndArmorArmorItem;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;

public class Abilities {
public static boolean isWearingEndermanSaveArmor(PlayerEntity player) {
for (ItemStack itemStack : player.getArmorItems()) {
if (itemStack.getItem() instanceof MoreToolsAndArmorArmorItem item) {
if (item.getMaterial() == ArmorMaterialInit.END_DIAMOND ||
item.getMaterial() == ArmorMaterialInit.VOID ||
item.getMaterial() == ArmorMaterialInit.ONETHDENDERITE ||
item.getMaterial() == ArmorMaterialInit.OLED) {
return true;
}
}
}
return false;
}
public static boolean isWearingPiglinPassiveArmor(PlayerEntity player) {
for (ItemStack itemStack : player.getArmorItems()) {
if (itemStack.getItem() instanceof MoreToolsAndArmorArmorItem item) {
if (item.getMaterial() == ArmorMaterialInit.ONETHDENDERITE ||
item.getMaterial() == ArmorMaterialInit.OLED) {
return true;
}
}
}
return false;
}
public static boolean isWearingIronGolemPassiveArmor(PlayerEntity player) {
for (ItemStack itemStack : player.getArmorItems()) {
if (itemStack.getItem() instanceof MoreToolsAndArmorArmorItem item) {
if (item.getMaterial() == ArmorMaterialInit.OLED) {
return true;
}
}
}
return false;
}
public static boolean isWearingEndermanPassiveArmor(PlayerEntity player) {
for (ItemStack itemStack : player.getArmorItems()) {
if (itemStack.getItem() instanceof MoreToolsAndArmorArmorItem item) {
if (item.getMaterial() == ArmorMaterialInit.OLED) {
return true;
}
}
}
return false;
}
}
4 changes: 4 additions & 0 deletions src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,12 @@
"github.mcdatapack.more_tools_and_armor.MoreToolsAndArmorDataGenerator"
]
},
"mixins": [
"mixins.more_tools_and_armor-abilities.json"
],
"depends": {
"fabricloader": ">=0.16.9",
"minecraft": "1.21.4",
"java": ">=21",
"fabric-api": "*"
},
Expand Down
13 changes: 13 additions & 0 deletions src/main/resources/mixins.more_tools_and_armor-abilities.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"required": true,
"minVersion": "0.8",
"package": "github.mcdatapack.more_tools_and_armor.mixns.ability",
"compatibilityLevel": "JAVA_21",
"mixins": [
"EndermanEntityMixin",
"TargetPredicateMixin"
],
"injectors": {
"defaultRequire": 1
}
}

0 comments on commit 90b1500

Please sign in to comment.