From 91ad15e66a6ce62f12514c01ff904d7e08434807 Mon Sep 17 00:00:00 2001 From: 3TUSK Date: Sat, 6 Aug 2022 00:07:03 -0700 Subject: [PATCH] Make area.allow_attack accept overrides for specific entity --- .../org/teacon/areacontrol/mixin/EntityMixin.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/teacon/areacontrol/mixin/EntityMixin.java b/src/main/java/org/teacon/areacontrol/mixin/EntityMixin.java index 1ff6a1b..3dc7df8 100644 --- a/src/main/java/org/teacon/areacontrol/mixin/EntityMixin.java +++ b/src/main/java/org/teacon/areacontrol/mixin/EntityMixin.java @@ -7,6 +7,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraftforge.server.permission.PermissionAPI; @@ -29,6 +30,9 @@ public abstract class EntityMixin { @Shadow public abstract Level getLevel(); + @Shadow + public abstract EntityType getType(); + /* * This is probably one of the most universal ways to prevent edge cases such as * preventing an arrow from unauthorized player to shoot down vanilla item frame. @@ -57,7 +61,15 @@ private void damageSrcCheck(DamageSource src, CallbackInfoReturnable ci permissionToCheck = AreaControlPermissions.BYPASS_PVP; deniedFeedback = new TranslatableComponent("area_control.notice.pvp_disabled", ObjectArrays.EMPTY_ARRAY); } else { - propToCheck = "area.allow_attack"; + propToCheck = AreaProperties.ALLOW_PVE; + var entityTypeRegName = this.getType().getRegistryName(); + var entitySpecificProp = AreaProperties.ALLOW_PVE + "." + entityTypeRegName; + var modSpecificProp = AreaProperties.ALLOW_PVE + "." + entityTypeRegName.getNamespace(); + if (AreaProperties.keyPresent(area, entitySpecificProp)) { + propToCheck = entitySpecificProp; + } else if (AreaProperties.keyPresent(area, modSpecificProp)) { + propToCheck = modSpecificProp; + } permissionToCheck = AreaControlPermissions.BYPASS_ATTACK; deniedFeedback = new TranslatableComponent("area_control.notice.pve_disabled", ObjectArrays.EMPTY_ARRAY); }