ServerPlugin Code Schnipsel

Dieses Thema im Forum "Programmierung" wurde erstellt von GPSforLEGENDS, 11. Dezember 2014.

?

Wie findet ihr das Thema?

  1. Toll, ich bin gespannt was für Ideen andere haben

    12 Stimme(n)
    70,6%
  2. Sinnlos

    5 Stimme(n)
    29,4%
  1. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Dies sollte ein Thema sein in dem ihr kleine code Abschnitte posten sollt, die ihr als lustig oder Sinnvoll erachtet.
    Am besten ihr schreibt einfach kurz hin was dieser Schnipsel bewirken soll und in der nächsten Zeile den Code.
    Nachfolgende können diesen Schnipsel benutzen.
    Mal sehen was ihr alles für Ideen habt und ob man später aus allen Schnipseln ein tolles Bild (Plugin) legen kann ;)
    Weiterhin können auch andere Vorschläge machen wie man den Code verbessern könnte.

    Ich beginne mal einfach mit einen Schnipsel mit dem Ihr Minen legen könnt und diese durch Rauch gekennzeichnet werden:
    Code (Text):
    1.  
    2. List<Block> blockList = new ArrayList<Block>();
    3.  
    4.     public void onEnable() {
    5.         PluginManager pm = Bukkit.getPluginManager();
    6.         pm.registerEvents(this, this);
    7.      
    8.         Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
    9.          
    10.             public void run() {
    11.                 for(Block b : blockList){
    12.                     b.getLocation().getWorld().playEffect(b.getLocation(), Effect.SMOKE, 2);
    13.                 }
    14.             }
    15.         }, 20L, 20L);
    16.     }
    17.  
    18.     public void onDisable() {
    19.      
    20.     }
    21.  
    22.     @EventHandler
    23.     public void onBlockPlace(BlockPlaceEvent e){
    24.         Block b = e.getBlock();
    25.         if(b.getType() == Material.STONE_PLATE){
    26.             b.setType(Material.AIR);
    27.             final Block finalb = b;
    28.             blockList.add(finalb);
    29.          
    30.         }
    31.     }
    32.  
    33.     @EventHandler
    34.     public void onPlayerMove(PlayerMoveEvent e){
    35.         Player p = e.getPlayer();
    36.         if(blockList.contains(p.getLocation().getBlock())){
    37.             Block b = p.getLocation().getBlock();
    38.             World w = p.getWorld();
    39.             Location loc = p.getLocation();
    40.             w.createExplosion(loc, 3);
    41.             blockList.remove(b);
    42.         }
    43.     }
    44.  
     
    #1
  2. DerDr4g0n
    Offline

    DerDr4g0n

    Registriert seit:
    17. Oktober 2014
    Beiträge:
    15
    Ort:
    Planet Erde.
    Für jede Mine einen eigenen Task? ... Einer würds auch tun aber musst du wissen.
     
    #2
    GPSforLEGENDS gefällt das.
  3. DerDr4g0n
    Offline

    DerDr4g0n

    Registriert seit:
    17. Oktober 2014
    Beiträge:
    15
    Ort:
    Planet Erde.
    Der neue Code sieht ja gleich schon mal viel besser aus. ;)
     
    #3
  4. Gelox_
    Offline

    Gelox_

    Registriert seit:
    27. Dezember 2014
    Beiträge:
    1
    Code (Text):
    1. public int getPing(Player p) { CraftPlayer cp = (CraftPlayer) p; EntityPlayer ep = cp.getHandle(); return ep.ping; }
    2.  
    3. @EventHandler
    4. public void onLogin(PlayerLoginEvent e) {
    5.   Player p = e.getPlayer();
    6.   if(getPing(p) >= 999) {
    7.     e.disallow(null, "Dein Ping ist eine Schande für uns.");
    8.   } else if(getPing(p) <= 10) {
    9.     e.disallow(null, "PingPlayer sind nicht erwünscht.");
    10.   }
    11. }
    Gruß
    Gelox_
     
    #4
    OldCrafterHD, DerDr4g0n und GPSforLEGENDS gefällt das.
  5. LarsD1999
    Offline

    LarsD1999

    Registriert seit:
    18. Februar 2012
    Beiträge:
    9
    Code (Text):
    1. Vector v = new Vector(p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ());
    2.              Vector2D min2D = ChunkStore.toChunk(v);
    3.                 Vector min = new Vector(min2D.getBlockX() * 16, 0, min2D.getBlockZ() * 16);
    4.                 Vector max = new Vector(min2D.getBlockX() * 16, 0, min2D.getBlockZ() * 16).add(new Vector(15,127,15));
    5.              
    6.                 CuboidRegionSelector selector = new CuboidRegionSelector();
    7.                 selector.selectPrimary(min);
    8.                 selector.selectSecondary(max);
    9.              
    10.              
    11.                 int x = max.getBlockX();
    12.                 int z = min.getBlockZ();
    13.              
    14.              
    15.              
    16.                 ProtectedCuboidRegion region = new ProtectedCuboidRegion(
    17.                         "chunk_" + x + "_" + z,
    18.                         new BlockVector(min),
    19.                         new BlockVector(max)
    20.         );
    21.    
    22.         DefaultDomain owners = new DefaultDomain();
    23.         owners.addPlayer(main.getWorldGuard().wrapPlayer(>> PLAYER <<));
    24.    
    25.         region.setOwners(owners);
    26.         main.getWorldGuard().getRegionManager(p.getWorld()).addRegion(region);

    Das ist ein Codeschnipsel, mitdem man mit der WorldGuard und WorldEdit API einen Chunk per Plugin protecten kann. Ich finde das gut für Citybuild Server :) Ich meine einige große CitybuildServer haben das auch. Vllt hilft das jemanden.

    Hier nochmal die Implementierung von WorldEdit und WorldGuard:


    Code (Text):
    1. public WorldGuardPlugin getWorldGuard() {
    2.          Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin("WorldGuard");
    3.    
    4.          // WorldGuard may not be loaded
    5.          if (plugin == null || !(plugin instanceof WorldGuardPlugin)) {
    6.              return null; // Maybe you want throw an exception instead
    7.          }
    8.    
    9.          return (WorldGuardPlugin) plugin;
    10.      }
    11.  
    12.      public WorldEditPlugin getWorldEdit() {
    13.              Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
    14.            
    15.          // WorldEdit may not be loaded
    16.          if (plugin == null || !(plugin instanceof WorldEditPlugin)) {
    17.              return null; // Maybe you want throw an exception instead
    18.          }
    19.    
    20.          return (WorldEditPlugin) plugin;
    21.      }
    22.     public void onEnable(){
    23.         if(getWorldGuard() == null){
    24.             System.err.print("[ECB] WorldGuard fehlt!");
    25.             System.exit(0);
    26.         }
    27.         if(getWorldEdit() == null){
    28.             System.err.print("[ECB] WorldEdit fehlt!");
    29.             System.exit(0);
    30.         }
    31.     }
    32.  
    33.  
     
    #5
  6. DerDr4g0n
    Offline

    DerDr4g0n

    Registriert seit:
    17. Oktober 2014
    Beiträge:
    15
    Ort:
    Planet Erde.
    Ich würde davon abraten System.exit(0) in einem Plugin zu verwenden. Wenn dann das Plugin deaktivieren setEnabled(false) oder denn Server stoppen. Bukkit.shutdown().
     
    #6
  7. LarsD1999
    Offline

    LarsD1999

    Registriert seit:
    18. Februar 2012
    Beiträge:
    9
    Am Ende ist es der gleiche Effekt / hat den gleichen Sinn. Egal mit welchem Weg man es macht.
     
    #7