Adds a permission for reading lecterns

This commit is contained in:
Kristian Knarvik 2023-04-01 16:17:16 +02:00
parent e6819020f6
commit 9c0ed3e46a
5 changed files with 26 additions and 1 deletions

View File

@ -41,6 +41,7 @@ import org.bukkit.event.player.PlayerBucketFillEvent;
import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.event.player.PlayerInteractAtEntityEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerTakeLecternBookEvent;
import org.bukkit.projectiles.ProjectileSource; import org.bukkit.projectiles.ProjectileSource;
import java.util.List; import java.util.List;
@ -151,6 +152,11 @@ public class EnginePermBuild extends Engine {
// BUILD > BLOCK // BUILD > BLOCK
// -------------------------------------------- // // -------------------------------------------- //
@EventHandler(priority = EventPriority.NORMAL)
public void takeBook(PlayerTakeLecternBookEvent event) {
protect(ProtectCase.TAKE_BOOK, true, event.getPlayer(), PS.valueOf(event.getLectern().getBlock()), Material.LECTERN, event);
}
@EventHandler(priority = EventPriority.NORMAL) @EventHandler(priority = EventPriority.NORMAL)
public void build(BlockPlaceEvent event) { public void build(BlockPlaceEvent event) {
build(event.getPlayer(), event.getBlock(), event); build(event.getPlayer(), event.getBlock(), event);

View File

@ -3,6 +3,7 @@ package com.massivecraft.factions.engine;
import com.massivecraft.factions.entity.MPerm; import com.massivecraft.factions.entity.MPerm;
import com.massivecraft.factions.util.EnumerationUtil; import com.massivecraft.factions.util.EnumerationUtil;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
@ -16,6 +17,8 @@ public enum ProtectCase {
USE_ITEM, USE_ITEM,
USE_ENTITY, USE_ENTITY,
TAKE_BOOK,
// END OF LIST // END OF LIST
; ;
@ -26,6 +29,7 @@ public enum ProtectCase {
public MPerm getPerm(Object object) { public MPerm getPerm(Object object) {
switch (this) { switch (this) {
case BUILD: case BUILD:
case TAKE_BOOK:
return MPerm.getPermBuild(); return MPerm.getPermBuild();
case USE_ITEM: case USE_ITEM:
@ -55,6 +59,9 @@ public enum ProtectCase {
return null; return null;
} }
Material material = (Material) object; Material material = (Material) object;
if (material == Material.LECTERN) {
return MPerm.getPermLectern();
}
if (EnumerationUtil.isMaterialEditOnInteract(material)) { if (EnumerationUtil.isMaterialEditOnInteract(material)) {
return MPerm.getPermBuild(); return MPerm.getPermBuild();
} }
@ -64,7 +71,7 @@ public enum ProtectCase {
if (EnumerationUtil.isMaterialDoor(material)) { if (EnumerationUtil.isMaterialDoor(material)) {
return MPerm.getPermDoor(); return MPerm.getPermDoor();
} }
if (material == Material.STONE_BUTTON) { if (Tag.BUTTONS.isTagged(material)) {
return MPerm.getPermButton(); return MPerm.getPermButton();
} }
if (material == Material.LEVER) { if (material == Material.LEVER) {

View File

@ -90,6 +90,7 @@ public class FactionColl extends Coll<Faction> {
faction.setPermittedRelations(MPerm.getPermBuild(), MPerm.getPermables(faction)); faction.setPermittedRelations(MPerm.getPermBuild(), MPerm.getPermables(faction));
faction.setPermittedRelations(MPerm.getPermDoor(), MPerm.getPermables(faction)); faction.setPermittedRelations(MPerm.getPermDoor(), MPerm.getPermables(faction));
faction.setPermittedRelations(MPerm.getPermContainer(), MPerm.getPermables(faction)); faction.setPermittedRelations(MPerm.getPermContainer(), MPerm.getPermables(faction));
faction.setPermittedRelations(MPerm.getPermLectern(), MPerm.getPermables(faction));
faction.setPermittedRelations(MPerm.getPermButton(), MPerm.getPermables(faction)); faction.setPermittedRelations(MPerm.getPermButton(), MPerm.getPermables(faction));
faction.setPermittedRelations(MPerm.getPermLever(), MPerm.getPermables(faction)); faction.setPermittedRelations(MPerm.getPermLever(), MPerm.getPermables(faction));
faction.setPermittedRelations(MPerm.getPermDeposit(), Collections.singleton(faction.getLeaderRank())); // Wilderness deposit should be limited as an anti spam meassure. faction.setPermittedRelations(MPerm.getPermDeposit(), Collections.singleton(faction.getLeaderRank())); // Wilderness deposit should be limited as an anti spam meassure.
@ -126,6 +127,7 @@ public class FactionColl extends Coll<Faction> {
faction.setPermittedRelations(MPerm.getPermDoor(), MPerm.getPermables(faction)); faction.setPermittedRelations(MPerm.getPermDoor(), MPerm.getPermables(faction));
faction.setPermittedRelations(MPerm.getPermContainer(), MPerm.getPermables(faction)); faction.setPermittedRelations(MPerm.getPermContainer(), MPerm.getPermables(faction));
faction.setPermittedRelations(MPerm.getPermLectern(), MPerm.getPermables(faction));
faction.setPermittedRelations(MPerm.getPermButton(), MPerm.getPermables(faction)); faction.setPermittedRelations(MPerm.getPermButton(), MPerm.getPermables(faction));
faction.setPermittedRelations(MPerm.getPermLever(), MPerm.getPermables(faction)); faction.setPermittedRelations(MPerm.getPermLever(), MPerm.getPermables(faction));
@ -161,6 +163,7 @@ public class FactionColl extends Coll<Faction> {
faction.setPermittedRelations(MPerm.getPermDoor(), MPerm.getPermables(faction)); faction.setPermittedRelations(MPerm.getPermDoor(), MPerm.getPermables(faction));
faction.setPermittedRelations(MPerm.getPermContainer(), MPerm.getPermables(faction)); faction.setPermittedRelations(MPerm.getPermContainer(), MPerm.getPermables(faction));
faction.setPermittedRelations(MPerm.getPermLectern(), MPerm.getPermables(faction));
faction.setPermittedRelations(MPerm.getPermButton(), MPerm.getPermables(faction)); faction.setPermittedRelations(MPerm.getPermButton(), MPerm.getPermables(faction));
faction.setPermittedRelations(MPerm.getPermLever(), MPerm.getPermables(faction)); faction.setPermittedRelations(MPerm.getPermLever(), MPerm.getPermables(faction));

View File

@ -566,6 +566,7 @@ public class MConf extends Entity<MConf> {
MPerm.ID_DOOR, MUtil.set("LEADER", "OFFICER", "MEMBER", "RECRUIT", "ALLY"), MPerm.ID_DOOR, MUtil.set("LEADER", "OFFICER", "MEMBER", "RECRUIT", "ALLY"),
MPerm.ID_BUTTON, MUtil.set("LEADER", "OFFICER", "MEMBER", "RECRUIT", "ALLY"), MPerm.ID_BUTTON, MUtil.set("LEADER", "OFFICER", "MEMBER", "RECRUIT", "ALLY"),
MPerm.ID_LEVER, MUtil.set("LEADER", "OFFICER", "MEMBER", "RECRUIT", "ALLY"), MPerm.ID_LEVER, MUtil.set("LEADER", "OFFICER", "MEMBER", "RECRUIT", "ALLY"),
MPerm.ID_LECTERN, MUtil.set("LEADER", "OFFICER", "MEMBER", "RECRUIT", "ALLY"),
MPerm.ID_CONTAINER, MUtil.set("LEADER", "OFFICER", "MEMBER"), MPerm.ID_CONTAINER, MUtil.set("LEADER", "OFFICER", "MEMBER"),
MPerm.ID_NAME, MUtil.set("LEADER"), MPerm.ID_NAME, MUtil.set("LEADER"),

View File

@ -39,6 +39,7 @@ public class MPerm extends Entity<MPerm> implements Prioritized, Registerable, N
public final static transient String ID_BUTTON = "button"; public final static transient String ID_BUTTON = "button";
public final static transient String ID_LEVER = "lever"; public final static transient String ID_LEVER = "lever";
public final static transient String ID_CONTAINER = "container"; public final static transient String ID_CONTAINER = "container";
public final static transient String ID_LECTERN = "lectern";
public final static transient String ID_NAME = "name"; public final static transient String ID_NAME = "name";
public final static transient String ID_DESC = "desc"; public final static transient String ID_DESC = "desc";
@ -69,6 +70,8 @@ public class MPerm extends Entity<MPerm> implements Prioritized, Registerable, N
public final static transient int PRIORITY_LEVER = 5000; public final static transient int PRIORITY_LEVER = 5000;
public final static transient int PRIORITY_CONTAINER = 6000; public final static transient int PRIORITY_CONTAINER = 6000;
public final static transient int PRIORITY_LECTERN = 1500;
public final static transient int PRIORITY_NAME = 7000; public final static transient int PRIORITY_NAME = 7000;
public final static transient int PRIORITY_DESC = 8000; public final static transient int PRIORITY_DESC = 8000;
public final static transient int PRIORITY_MOTD = 9000; public final static transient int PRIORITY_MOTD = 9000;
@ -117,6 +120,7 @@ public class MPerm extends Entity<MPerm> implements Prioritized, Registerable, N
getPermButton(); getPermButton();
getPermLever(); getPermLever();
getPermContainer(); getPermContainer();
getPermLectern();
getPermName(); getPermName();
getPermDesc(); getPermDesc();
@ -141,6 +145,10 @@ public class MPerm extends Entity<MPerm> implements Prioritized, Registerable, N
getPermPerms(); getPermPerms();
} }
public static MPerm getPermLectern() {
return getCreative(PRIORITY_LECTERN, ID_LECTERN, ID_LECTERN, "read a lectern", true, true, true);
}
public static MPerm getPermBuild() { public static MPerm getPermBuild() {
return getCreative(PRIORITY_BUILD, ID_BUILD, ID_BUILD, "edit the terrain", true, true, true); return getCreative(PRIORITY_BUILD, ID_BUILD, ID_BUILD, "edit the terrain", true, true, true);
} }