diff --git a/src/main/java/de/jaschastarke/minecraft/limitedcreative/regions/PlayerListener.java b/src/main/java/de/jaschastarke/minecraft/limitedcreative/regions/PlayerListener.java index 34e3b93..a2a706b 100644 --- a/src/main/java/de/jaschastarke/minecraft/limitedcreative/regions/PlayerListener.java +++ b/src/main/java/de/jaschastarke/minecraft/limitedcreative/regions/PlayerListener.java @@ -2,6 +2,7 @@ package de.jaschastarke.minecraft.limitedcreative.regions; import org.bukkit.ChatColor; import org.bukkit.GameMode; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.Sign; @@ -10,6 +11,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerGameModeChangeEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.InventoryHolder; import org.bukkit.material.Button; @@ -23,11 +25,8 @@ public class PlayerListener extends Listener { super(mod); } - @EventHandler + @EventHandler(ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { - if (isCancelled(event)) - return; - if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; @@ -56,6 +55,26 @@ public class PlayerListener extends Listener { } } } + @EventHandler(ignoreCancelled = true) + public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { + PlayerMeta pmeta = new PlayerMeta(event.getPlayer()); + Location loc = event.getRightClicked().getLocation(); + boolean diffrent_region = getRM().isDiffrentRegion(event.getPlayer(), loc); + + if (pmeta.isActiveRegionGameMode() && diffrent_region) { + // do not break outside of "gamemod-change-region" when in the region + if (getRM().getRegionSet(loc).getFlag(Flags.GAMEMODE, event.getPlayer()) != pmeta.getActiveRegionGameMode()) { + event.getPlayer().sendMessage(L("blocked.outside_interact_entity")); + event.setCancelled(true); + } + } else if (diffrent_region) { + // do not break inside of "survial-region in creative world" when outside + if (getRM().getRegionSet(loc).getFlag(Flags.GAMEMODE) != null) { + event.getPlayer().sendMessage(L("blocked.inside_interact_entity")); + event.setCancelled(true); + } + } + } private boolean isRegionOptional(Player player) { return mod.getRegionManager().getRegionSet(player.getLocation()).allows(Flags.GAMEMODE_OPTIONAL); diff --git a/src/main/resources/lang/messages.properties b/src/main/resources/lang/messages.properties index 612ad69..dc3c5a0 100644 --- a/src/main/resources/lang/messages.properties +++ b/src/main/resources/lang/messages.properties @@ -43,9 +43,11 @@ blocked.survival_flying: You should stay on ground, when leaving a creative-area blocked.outside_place: You can not place blocks outside of the gamemode-area blocked.outside_break: You can not destroy blocks outside of the gamemode-area blocked.outside_interact: You can not interact with those blocks outside of the gamemode-area +blocked.outside_interact_entity: You can not interact with out of the gamemode-area blocked.inside_place: You can not place blocks inside of the gamemode-area blocked.inside_break: You can not destroy blocks inside of the gamemode-area blocked.inside_interact: You can not interact with those blocks inside of the gamemode-area +blocked.inside_interact_entity: You can not interact with this into gamemode-area blocked.interact: You are not allowed to interact with this type of blocks blocked.entity: You are not allowed to interact with this type of entity blocked.use: You are not allowed to use this type of item diff --git a/src/main/resources/lang/messages_de.properties b/src/main/resources/lang/messages_de.properties index 6b94ae9..3117183 100644 --- a/src/main/resources/lang/messages_de.properties +++ b/src/main/resources/lang/messages_de.properties @@ -40,12 +40,14 @@ exception.region.not_optional: Du kannst in diesem Bereich nicht in den {0}-Modu blocked.inventory: Inventar öffnen ist im Kreativ-Modus nicht gestattet blocked.chest: Der Zugriff auf Truhen ist im Kreativ-Modus nicht gestattet. blocked.survival_flying: Du solltest auf dem Boden stehen um einen Kreativ-Bereich zu verlassen -blocked.outside_place: Du kannst keine Blöcke außerhalb eines GameMode-Bereich bauen -blocked.outside_break: Du kannst keine Blöcke außerhalb eines GameMode-Bereich zerstören -blocked.outside_interact: Du kannst nicht mit Blöcken außerhalb eines GameMode-Bereichts interagieren -blocked.inside_place: Du kannst keine Blöcke in einen GameMode-Bereich bauen -blocked.inside_break: Du kannst keine Blöcke in einem GameMode-Bereich zerstören -blocked.inside_interact: Du kannst nicht mit Blöcken in einem GameMode-Bereich interagieren +blocked.outside_place: Du kannst keine Blöcke aus einem GameMode-Bereich heraus bauen +blocked.outside_break: Du kannst keine Blöcke aus einem GameMode-Bereich heraus zerstören +blocked.outside_interact: Du kannst nicht mit Blöcken außerhalb eines GameMode-Bereichs interagieren +blocked.outside_interact_entity: Du kannst damit nicht aus einem GameMode-Bereich heraus interagieren +blocked.inside_place: Du kannst keine Blöcke in einen GameMode-Bereich herein bauen +blocked.inside_break: Du kannst von außerhalb keine Blöcke in einem GameMode-Bereich zerstören +blocked.inside_interact: Du kannst von außerhalb nicht mit Blöcken in einem GameMode-Bereich interagieren +blocked.inside_interact_entity: Du kannst damit nicht von außerhalb eines GameMode-Bereich interagieren blocked.interact: Du darfst mit dieser Art Block nicht interagieren blocked.entity: Du darfst nicht mit diesen Kreaturen interagieren blocked.use: Du darfst diese Art Gegenstand nicht verwenden