Added entityInteract-limitation on region border

This commit is contained in:
Jascha Starke 2013-07-31 14:27:04 +02:00
parent a622d4e405
commit cdcf18cda5
3 changed files with 33 additions and 10 deletions

View file

@ -2,6 +2,7 @@ package de.jaschastarke.minecraft.limitedcreative.regions;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
@ -10,6 +11,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.block.Action; import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerGameModeChangeEvent; import org.bukkit.event.player.PlayerGameModeChangeEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
import org.bukkit.material.Button; import org.bukkit.material.Button;
@ -23,11 +25,8 @@ public class PlayerListener extends Listener {
super(mod); super(mod);
} }
@EventHandler @EventHandler(ignoreCancelled = true)
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if (isCancelled(event))
return;
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) if (event.getAction() != Action.RIGHT_CLICK_BLOCK)
return; 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) { private boolean isRegionOptional(Player player) {
return mod.getRegionManager().getRegionSet(player.getLocation()).allows(Flags.GAMEMODE_OPTIONAL); return mod.getRegionManager().getRegionSet(player.getLocation()).allows(Flags.GAMEMODE_OPTIONAL);

View file

@ -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_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_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: 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_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_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: 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.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.entity: You are not allowed to interact with this type of entity
blocked.use: You are not allowed to use this type of item blocked.use: You are not allowed to use this type of item

View file

@ -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.inventory: Inventar öffnen ist im Kreativ-Modus nicht gestattet
blocked.chest: Der Zugriff auf Truhen 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.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_place: Du kannst keine Blöcke aus einem GameMode-Bereich heraus bauen
blocked.outside_break: Du kannst keine Blöcke außerhalb eines GameMode-Bereich zerstören 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-Bereichts interagieren blocked.outside_interact: Du kannst nicht mit Blöcken außerhalb eines GameMode-Bereichs interagieren
blocked.inside_place: Du kannst keine Blöcke in einen GameMode-Bereich bauen blocked.outside_interact_entity: Du kannst damit nicht aus einem GameMode-Bereich heraus interagieren
blocked.inside_break: Du kannst keine Blöcke in einem GameMode-Bereich zerstören blocked.inside_place: Du kannst keine Blöcke in einen GameMode-Bereich herein bauen
blocked.inside_interact: Du kannst nicht mit Blöcken in einem GameMode-Bereich interagieren 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.interact: Du darfst mit dieser Art Block nicht interagieren
blocked.entity: Du darfst nicht mit diesen Kreaturen interagieren blocked.entity: Du darfst nicht mit diesen Kreaturen interagieren
blocked.use: Du darfst diese Art Gegenstand nicht verwenden blocked.use: Du darfst diese Art Gegenstand nicht verwenden