Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @SuppressWarnings({ "rawtypes", "unchecked" })
- private synchronized boolean updateRegions(final Player player, final MovementWay movement, Location to){
- Set<ProtectedRegion> regions;
- if(this.playerRegions.get(player) == null){
- regions = new HashSet();
- }else{
- regions = new HashSet((Collection)this.playerRegions.get(player));
- }
- Set<ProtectedRegion> oldRegions = new HashSet(regions);
- RegionManager manager = Main.guard.worldGuard().getRegionManager(to.getWorld());
- if(manager == null){
- return false;
- }
- ApplicableRegionSet appRegions = manager.getApplicableRegions(to);
- for(final ProtectedRegion region: appRegions){
- if(!regions.contains(region)){
- RegionEnterEvent e = new RegionEnterEvent(region, player, movement);
- Main.instance.getServer().getPluginManager().callEvent(e);
- if(e.isCancelled()){
- regions.clear();
- regions.addAll(oldRegions);
- return true;
- }
- new Thread(){
- public void run(){
- try{
- sleep(50L);
- }catch(InterruptedException e){}
- RegionEnteredEvent e = new RegionEnteredEvent(region, player, movement);
- Main.instance.getServer().getPluginManager().callEvent(e);
- }
- }.start();
- }
- }
- Collection<ProtectedRegion> app = (Collection)getPrivateValue(appRegions, "applicable");
- Iterator<ProtectedRegion> itr = regions.iterator();
- while(itr.hasNext()){
- final ProtectedRegion region = (ProtectedRegion)itr.next();
- if(!app.contains(region)){
- if(manager.getRegion(region.getId()) != region){
- itr.remove();
- }else{
- RegionLeaveEvent e = new RegionLeaveEvent(region, player, movement);
- Main.instance.getServer().getPluginManager().callEvent(e);
- Bukkit.getLogger().info("RegionLeaveEvent Thrown");
- if(e.isCancelled()){
- regions.clear();regions.addAll(oldRegions);
- return true;
- }
- new Thread(){
- public void run(){
- try{
- sleep(50L);
- }catch(InterruptedException e){}
- RegionLeftEvent e = new RegionLeftEvent(region, player, movement);
- Main.instance.getServer().getPluginManager().callEvent(e);
- Bukkit.getLogger().info("RegionLeftEvent Thrown");
- }
- }.start();
- itr.remove();
- }
- }
- }
- this.playerRegions.put(player, regions);
- return false;
- }
- private Object getPrivateValue(Object obj, String name){
- try{
- Field f = obj.getClass().getDeclaredField(name);
- f.setAccessible(true);
- return f.get(obj);
- }catch(Exception e){
- return null;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement