1. Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

PlugIn Regions abbauen vermeiden

Dieses Thema im Forum "Programmierung" wurde erstellt von ThrustLP, 7. April 2014.


  1. ThrustLP
    Offline

    ThrustLP

    Registriert seit:
    3. April 2013
    Beiträge:
    35
    Ich weiß einen ähnlichen Thread hatte ich bereits, aber dieser hier ist aufgeräumter. Der andere Beitrag kann gelöscht werden (wenn nötig)! Also:

    Ich habe die HashMap:

    Code (Text):
    1.  
    2. public HashMap<String, Region> regions = new HashMap<String, Region>();
    3.  
    In dieser sind Regionen gespeichert die im onEnable Teil aus einer Yaml Datei geladen werden. Hier mal mein onEnable:

    Code (Text):
    1.  
    2.     @Override
    3.     public void onEnable(){
    4.         System.out.println("[Jumper] GELADEN");
    5.         this.getCommand("jumper").setExecutor(new InfoCommand());
    6.         this.getCommand("jarena").setExecutor(new RegionCommand(this));
    7.        
    8.         PluginManager pm = this.getServer().getPluginManager();
    9.         pm.registerEvents(new RegionListener(this), this);
    10.        
    11.        
    12.        
    13.         File file = new File("plugins/Jumper", "arenas.yml");
    14.         FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
    15.         for(String region : cfg.getConfigurationSection("").getKeys(false)){
    16.            
    17.             this.getConfig().addDefault("allgemein.consolemessagestart", new String[]{
    18.                     "§aGELADEN"
    19.                    
    20.             });
    21.             this.getConfig().options().copyDefaults(true);
    22.             this.saveConfig();
    23.            
    24.             String world = cfg.getString(region + ".world");
    25.            
    26.             World w = Bukkit.getWorld(world);
    27.            
    28.             if(w != null){
    29.                
    30.                 int minx = cfg.getInt(region + ".minx");
    31.                 int miny = cfg.getInt(region + ".miny");
    32.                 int minz = cfg.getInt(region + ".minz");
    33.                
    34.                 int maxx = cfg.getInt(region + ".maxx");
    35.                 int maxy = cfg.getInt(region + ".maxy");
    36.                 int maxz = cfg.getInt(region + ".maxz");
    37.            
    38.                 this.regions.put(region.toLowerCase(), new Region(new Location(w, minx, miny, minz), new Location(w, maxx, maxy, maxz)));
    39.             }
    40.            
    41.            
    42.            
    43.         }
    44.     }
    45.  
    Nun möchte ich in einem BlockBreakEvent folgendes:

    Wenn ein Player einen Block der sich innerhalb einer dieser Regionen befindet abbaut soll die Aktion zurückgesetzt werden. Achtung: Auch wenn er außerhalb der Region steht soll er die Blöcke innen nicht abbauen können.

    Kann mir jemand einen Code dazu geben? Ich bin noch Anfänger, und habe mir da wohl etwas zu viel vorgenommen, aber den weitern Teil des Plugins schaffe ich dann wieder ;)

    Vielen Dank!

    Hier meine Klasse Region:

    Code (Text):
    1.  
    2. package me.thrustlp.jumper.region;
    3.  
    4. import java.util.HashMap;
    5. import java.util.Map;
    6.  
    7. import org.bukkit.Location;
    8. import org.bukkit.World;
    9. import org.bukkit.configuration.serialization.ConfigurationSerializable;
    10.  
    11. public class Region implements ConfigurationSerializable{
    12.  
    13.     private int minx, miny, minz;
    14.     private int maxx, maxy, maxz;
    15.     private World world;
    16.     public Region(Location loc1, Location loc2){
    17.        
    18.         this.minx = Math.min(loc1.getBlockX(), loc2.getBlockX());
    19.         this.miny = Math.min(loc1.getBlockY(), loc2.getBlockY());
    20.         this.minz = Math.min(loc1.getBlockZ(), loc2.getBlockZ());
    21.        
    22.         this.maxx = Math.max(loc1.getBlockX(), loc2.getBlockX());
    23.         this.maxy = Math.max(loc1.getBlockY(), loc2.getBlockY());
    24.         this.maxz = Math.max(loc1.getBlockZ(), loc2.getBlockZ());
    25.        
    26.         this.world = loc1.getWorld();
    27.        
    28.     }
    29.     public boolean isInside(Location loc){
    30.         if(loc.getWorld() != this.world){
    31.             return false;
    32.         }
    33.         if(loc.getBlockX() < this.minx || loc.getBlockX() > this.maxx || loc.getBlockY() < this.miny || loc.getBlockY() > this.maxy || loc.getBlockZ() < this.minz || loc.getBlockZ() > this.maxz){
    34.             return false;
    35.         }
    36.        
    37.         return true;
    38.     }
    39.    
    40.     @Override
    41.     public Map<String, Object> serialize() {
    42.         Map<String, Object> o = new HashMap<String, Object>();
    43.        
    44.         o.put("minx", this.minx);
    45.         o.put("miny", this.miny);
    46.         o.put("minz", this.minz);
    47.        
    48.         o.put("maxx", this.maxx);
    49.         o.put("maxy", this.maxy);
    50.         o.put("maxz", this.maxz);
    51.        
    52.         o.put("world", this.world.getName());
    53.         return o;
    54.     }
    55.    
    56.    
    57.    
    58. }
    59.  
    60.  
     
    Zuletzt von einem Moderator bearbeitet: 7. April 2014
  2. ThrustLP
    Offline

    ThrustLP

    Registriert seit:
    3. April 2013
    Beiträge:
    35
    Hat keiner ne Idee?D:
     
  3. Wo ist das Problem zu überprüfen, ob der Block in einer der Regionen ist, wenn ja dann soll er entsprechend nicht abgebaut werden. Das ganze kann man dann noch im Block cachen.
     
  4. ThrustLP
    Offline

    ThrustLP

    Registriert seit:
    3. April 2013
    Beiträge:
    35
    Und wie mache ich das?
     
  5. games6471
    Offline

    games6471

    Bukkit bietet doch so schöne Methoden.

    Code (Text):
    1.     public boolean isInside(Location loc) {
    2.         if (!loc.getWorld().getUID().equals(worldUUID)) {
    3.             return false;
    4.         }
    5.  
    6.         return loc.toVector().isInAABB(minVec, maxVec);
    7.     }