From add3c34fade827ea47a9d34a95c61bc693f7ea61 Mon Sep 17 00:00:00 2001 From: adrian Date: Thu, 4 Dec 2025 22:19:21 -0300 Subject: [PATCH] Started interfacing of NodeHandler. --- .gradle/8.8/checksums/checksums.lock | Bin 17 -> 17 bytes .gradle/8.8/checksums/md5-checksums.bin | Bin 24547 -> 24547 bytes .gradle/8.8/checksums/sha1-checksums.bin | Bin 35615 -> 45335 bytes .idea/.name | 1 + .idea/inspectionProfiles/Project_Default.xml | 8 +++++ .idea/mcregions.iml | 9 ++++++ .idea/modules.xml | 8 ----- README.md | 2 +- .../io/github/adrianvic/regions/Config.java | 4 +-- .../github/adrianvic/regions/Validator.java | 30 ++++++------------ .../adrianvic/regions/policy/Action.java | 7 ++++ .../adrianvic/regions/policy/NodeHandler.java | 7 ++++ .../regions/policy/NodeHandlers.java | 18 +++++++++++ .../regions/policy/handlers/attackWith.java | 17 ++++++++++ 14 files changed, 80 insertions(+), 31 deletions(-) create mode 100644 .idea/.name create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/mcregions.iml delete mode 100644 .idea/modules.xml create mode 100644 src/main/java/io/github/adrianvic/regions/policy/Action.java create mode 100644 src/main/java/io/github/adrianvic/regions/policy/NodeHandler.java create mode 100644 src/main/java/io/github/adrianvic/regions/policy/NodeHandlers.java create mode 100644 src/main/java/io/github/adrianvic/regions/policy/handlers/attackWith.java diff --git a/.gradle/8.8/checksums/checksums.lock b/.gradle/8.8/checksums/checksums.lock index 38929136ddde278200b11996312f82411872ce20..a51513a6d2add11fb1c2bdd8d8526f8b1604c1d2 100644 GIT binary patch literal 17 VcmZR+yu1NQ&` diff --git a/.gradle/8.8/checksums/md5-checksums.bin b/.gradle/8.8/checksums/md5-checksums.bin index 95a682b2271f43ea6bd2ec02ec7d1a37aed5fd23..f239517bc455c499cff9371966828cc9cead7d82 100644 GIT binary patch delta 1158 zcmaF7pYid2#tq3HEU!=BOrD(Xp~v$2^dsKMGr^3fg_BQ%8SgwN{{=H%$4}Px1gUv7 zeR3k0@!n$cWH95S>g1!IdOWXBzx>Jo2D(2cAM_TUEaWB3^7{14u*sTUAdR07OpXRK zzA{hl1v9>sPu>q^d^0vOkD%M(*C^MleHu!Q{z6oY16;I~&2P^(M*%rbm zo}3S6sH~p65W+~9d>PD8>X^(L08*^{X0kb$p;R$B6UGR}dFhj#+^3*^*p4Vqo;=n=95dC`c#~9(sj{=2RUY}8ZKlvwEnKI*K z?I5tms>!inhUT`({a}WA;N*i42LI&GV20YU$*RF1#p>rLhl3d!0+Tx-48O^{A&g0r z-$EEyC(DO`6f6Cn90*|)Pi_tYIY~%j~i;mHpnjMB-%VIajiS0?|Cl$snLCc^XjjII#G0^$3UFGdPa zo)iYMKsSH#O0ZJh^^Lx!1GmI4`i^hQz8~09jhcNCU+u^Z>gf`i=kq delta 1158 zcmaF7pYid2#tq3HEVnm$^G;6p&||s1F=W@|nP5hQ_2koFM&{$mf5D8juaosXL26Py zPfi3ga?>YI1~c;ACm;3HmMuW%X*I-7Y)MQy7 zkmAP3$^Kx*Uf#)#V8*`XlQ)AIyB|(|3T7OTpDgYRQhZ?EWKS^TpycFg2*YslS}^0l z>&f@QjDy9K1^qyZ4^Exz3}FaQE(J3Vu}xkMW*q!F`6ifgNOm%}KUi`3WLpSBc5*(L zacJ-4g%C#Jg_S#wpRs@*yC_ z2dgFrLKs?;n?pcOIfE_P3@ z1v4(aoxC2*xEwh7A((O1e6nyDNb%JdlYd7_O^y!};kmu>#(sze!uKa%j1-MY7!JEnK5m3dJV8(r> z$=MJF=j6Fy#v{hb=fRA}@{<`OL5d&COg08H9x+Z%1v4Igo;)4Qc+@%hB$)B=@8sWL z#^arnb)&$#woZ63lI zjCcPh*Mk`!B_?l#FmxtA1~WeYpDY>&QvA(%vOAdZedpv#FyqIJ$*UoZ(8+fpjQ5lI o<3Wmlx=wZkGrs?rTnuLX+CF({yq>`AjlXw8;!Z%6fq_8}09e=|J^%m! diff --git a/.gradle/8.8/checksums/sha1-checksums.bin b/.gradle/8.8/checksums/sha1-checksums.bin index 046fb23915e6b043380df3c7e16c18cc9a6c02dc..32471a5c03c1747b97d36fbe20f806a491940ac6 100644 GIT binary patch delta 6933 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 U3eI|c#s%ElXUviUjldWI05XVU)c^nh delta 812 zcmbRKh-v;brVS<%jJA_gB|Ih{l}MPJD`_}+o210#XOa?|#iaZhC$E(@n5-&eFgaJo zWAa}aiOIUMhLg)=4JPlC)t}5Nw_@^9Im5|(^5T(llWmneC(l!on0!u2V)8#FgUNBq<&)nkubjM2MPl+j z74gZcsuL%lQ`Mg=sy1=*J~e~Ma_a7rYt;=WA5)i@{7qeAvYJNxP1>I-Zl|boD1s)jc?Qo}R?y zXL|0FUG)<;U(;7$oXlq^J~`LWWAa%;gUPx^l9S_%^e68%lGyy#NP%&3uE~VSqNb9Q z-Au(NFEuro{MOWCvagxPCcm|lm@I4WF?p(e#bi~7 zgvoOqBqyJ9aG$)_QDX8`r^Ly8&hC?2oed|Sa~7X0>f$-M%;m=9G}rRUUtKFEx4Ied z{D%St2HBGv6+MI|J9@-SPWO=O z`jKXvBV+zCPTm>|vP5cgf7~9X$)bsJljkRjPi{!eoot&RH`zDdZ1UP9@yQWMizgpV z0?C<8_D`0WyfQ&<^6q5u$#aqyPrjTiH#s(?W%BA2xyk=ic1`w8m7DB4RbuklaJj|2 zX>5}hW`|5ZnF2jqTbn#^AyH@Q3CZ1VX6@y#0w&N5GS zFOl0kyCjBj^1)KM$?{9ZC+n2uPEIb9oBXy+eDk@ouS}DBE9EBZE|Zw7SSdHzw@Q4n RUe)5ssa0~D-&Yw3001=YMdbhh diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..74169cd --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +regions \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..17d4326 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/.idea/mcregions.iml b/.idea/mcregions.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/mcregions.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 3312386..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/README.md b/README.md index bf33e30..ce91ce4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ # Regions Regions is a Minecraft Paper plugin that allows server admins to write *policies* that will deny or allow (black/whitelist) players to do specific things. -You can create policies based on player location, hence the name **Regions**, but other types of policies are available, like permission and player-name policy. +You can create policies based on player location, hence the name **Regions**, but other types of policies are available, like permission and player-name policy. \ No newline at end of file diff --git a/src/main/java/io/github/adrianvic/regions/Config.java b/src/main/java/io/github/adrianvic/regions/Config.java index 281dc78..71d3ba9 100644 --- a/src/main/java/io/github/adrianvic/regions/Config.java +++ b/src/main/java/io/github/adrianvic/regions/Config.java @@ -14,8 +14,8 @@ public class Config { private YamlConfiguration config; private List locationPolicies; - private List permissionPolicies; - private List playerNamePolicies; +// private List permissionPolicies; +// private List playerNamePolicies; private Config() { } diff --git a/src/main/java/io/github/adrianvic/regions/Validator.java b/src/main/java/io/github/adrianvic/regions/Validator.java index 26fcc63..3b69372 100644 --- a/src/main/java/io/github/adrianvic/regions/Validator.java +++ b/src/main/java/io/github/adrianvic/regions/Validator.java @@ -1,38 +1,28 @@ package io.github.adrianvic.regions; +import io.github.adrianvic.regions.policy.PolicyNode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import java.util.ArrayList; - +import java.util.List; public class Validator { - ArrayList blacklistedItems = new ArrayList(); - - public Validator() { - blacklistedItems.add(Material.COPPER_SWORD); - blacklistedItems.add(Material.COPPER_AXE); - blacklistedItems.add(Material.COPPER_HOE); - blacklistedItems.add(Material.ROTTEN_FLESH); + public static boolean canInteract(HumanEntity entity) { + return true; } - public boolean isHumanoidAbleToHit(HumanEntity damager) { - return isItemValid(damager.getInventory().getItemInMainHand().getType()); + public static boolean canBreak(HumanEntity entity) { + return true; } - public boolean isHumanoidAbleToHarvest(HumanEntity harvester) { - return isItemValid(harvester.getInventory().getItemInMainHand().getType()); + public static boolean canHit(HumanEntity entity) { + return true; } - public boolean isItemValid(Material item) { - return !blacklistedItems.contains(item); - } - - public void warnPlayer(Player player) { - Location loc = player.getLocation(); - loc.getWorld().strikeLightningEffect(loc); - player.sendMessage("Please note that you are not allowed to do this here!"); + public static List getPoliciesFor(HumanEntity entity) { + return new ArrayList<>(); } } diff --git a/src/main/java/io/github/adrianvic/regions/policy/Action.java b/src/main/java/io/github/adrianvic/regions/policy/Action.java new file mode 100644 index 0000000..706f671 --- /dev/null +++ b/src/main/java/io/github/adrianvic/regions/policy/Action.java @@ -0,0 +1,7 @@ +package io.github.adrianvic.regions.policy; + +public enum Action { + INTERACT, + BREAK, + HIT +} diff --git a/src/main/java/io/github/adrianvic/regions/policy/NodeHandler.java b/src/main/java/io/github/adrianvic/regions/policy/NodeHandler.java new file mode 100644 index 0000000..7873481 --- /dev/null +++ b/src/main/java/io/github/adrianvic/regions/policy/NodeHandler.java @@ -0,0 +1,7 @@ +package io.github.adrianvic.regions.policy; + +import org.bukkit.entity.HumanEntity; + +public interface NodeHandler { + boolean allows(HumanEntity entity, PolicyNode node, Action action); +} \ No newline at end of file diff --git a/src/main/java/io/github/adrianvic/regions/policy/NodeHandlers.java b/src/main/java/io/github/adrianvic/regions/policy/NodeHandlers.java new file mode 100644 index 0000000..3f0917b --- /dev/null +++ b/src/main/java/io/github/adrianvic/regions/policy/NodeHandlers.java @@ -0,0 +1,18 @@ +package io.github.adrianvic.regions.policy; + +import io.github.adrianvic.regions.policy.handlers.attackWith; + +import java.util.HashMap; +import java.util.Map; + +public class NodeHandlers { + private static final Map handlers = new HashMap<>(); + + static { + handlers.put("attackWithItemInHand", new attackWith()); + } + + public static NodeHandler get(String type) { + return handlers.get(type); + } +} diff --git a/src/main/java/io/github/adrianvic/regions/policy/handlers/attackWith.java b/src/main/java/io/github/adrianvic/regions/policy/handlers/attackWith.java new file mode 100644 index 0000000..111fc4e --- /dev/null +++ b/src/main/java/io/github/adrianvic/regions/policy/handlers/attackWith.java @@ -0,0 +1,17 @@ +package io.github.adrianvic.regions.policy.handlers; + +import io.github.adrianvic.regions.policy.Action; +import io.github.adrianvic.regions.policy.NodeHandler; +import io.github.adrianvic.regions.policy.PolicyNode; +import org.bukkit.entity.HumanEntity; + +public class attackWith implements NodeHandler { + + @Override + public boolean allows(HumanEntity entity, PolicyNode node, Action action) { + if (action == Action.HIT) { + if (node.values().contains(entity.getMainHand() )) return false; // nope + } + return true; + } +}