001 package org.bukkit; 002 003 import java.io.File; 004 import org.bukkit.generator.ChunkGenerator; 005 import java.util.Collection; 006 import java.util.HashMap; 007 import java.util.List; 008 import java.util.Map; 009 import java.util.UUID; 010 011 import org.bukkit.block.Biome; 012 import org.bukkit.block.Block; 013 import org.bukkit.entity.*; 014 import org.bukkit.generator.BlockPopulator; 015 import org.bukkit.inventory.ItemStack; 016 import org.bukkit.metadata.Metadatable; 017 import org.bukkit.plugin.messaging.PluginMessageRecipient; 018 import org.bukkit.util.Vector; 019 020 /** 021 * Represents a world, which may contain entities, chunks and blocks 022 */ 023 public interface World extends PluginMessageRecipient, Metadatable { 024 025 /** 026 * Gets the {@link Block} at the given coordinates 027 * 028 * @param x X-coordinate of the block 029 * @param y Y-coordinate of the block 030 * @param z Z-coordinate of the block 031 * @return Block at the given coordinates 032 * @see #getBlockTypeIdAt(int, int, int) Returns the current type ID of 033 * the block 034 */ 035 public Block getBlockAt(int x, int y, int z); 036 037 /** 038 * Gets the {@link Block} at the given {@link Location} 039 * 040 * @param location Location of the block 041 * @return Block at the given location 042 * @see #getBlockTypeIdAt(org.bukkit.Location) Returns the current type ID 043 * of the block 044 */ 045 public Block getBlockAt(Location location); 046 047 /** 048 * Gets the block type ID at the given coordinates 049 * 050 * @param x X-coordinate of the block 051 * @param y Y-coordinate of the block 052 * @param z Z-coordinate of the block 053 * @return Type ID of the block at the given coordinates 054 * @see #getBlockAt(int, int, int) Returns a live Block object at the 055 * given location 056 * @deprecated Magic value 057 */ 058 @Deprecated 059 public int getBlockTypeIdAt(int x, int y, int z); 060 061 /** 062 * Gets the block type ID at the given {@link Location} 063 * 064 * @param location Location of the block 065 * @return Type ID of the block at the given location 066 * @see #getBlockAt(org.bukkit.Location) Returns a live Block object at 067 * the given location 068 * @deprecated Magic value 069 */ 070 @Deprecated 071 public int getBlockTypeIdAt(Location location); 072 073 /** 074 * Gets the highest non-air coordinate at the given coordinates 075 * 076 * @param x X-coordinate of the blocks 077 * @param z Z-coordinate of the blocks 078 * @return Y-coordinate of the highest non-air block 079 */ 080 public int getHighestBlockYAt(int x, int z); 081 082 /** 083 * Gets the highest non-air coordinate at the given {@link Location} 084 * 085 * @param location Location of the blocks 086 * @return Y-coordinate of the highest non-air block 087 */ 088 public int getHighestBlockYAt(Location location); 089 090 /** 091 * Gets the highest non-empty block at the given coordinates 092 * 093 * @param x X-coordinate of the block 094 * @param z Z-coordinate of the block 095 * @return Highest non-empty block 096 */ 097 public Block getHighestBlockAt(int x, int z); 098 099 /** 100 * Gets the highest non-empty block at the given coordinates 101 * 102 * @param location Coordinates to get the highest block 103 * @return Highest non-empty block 104 */ 105 public Block getHighestBlockAt(Location location); 106 107 /** 108 * Gets the {@link Chunk} at the given coordinates 109 * 110 * @param x X-coordinate of the chunk 111 * @param z Z-coordinate of the chunk 112 * @return Chunk at the given coordinates 113 */ 114 public Chunk getChunkAt(int x, int z); 115 116 /** 117 * Gets the {@link Chunk} at the given {@link Location} 118 * 119 * @param location Location of the chunk 120 * @return Chunk at the given location 121 */ 122 public Chunk getChunkAt(Location location); 123 124 /** 125 * Gets the {@link Chunk} that contains the given {@link Block} 126 * 127 * @param block Block to get the containing chunk from 128 * @return The chunk that contains the given block 129 */ 130 public Chunk getChunkAt(Block block); 131 132 /** 133 * Checks if the specified {@link Chunk} is loaded 134 * 135 * @param chunk The chunk to check 136 * @return true if the chunk is loaded, otherwise false 137 */ 138 public boolean isChunkLoaded(Chunk chunk); 139 140 /** 141 * Gets an array of all loaded {@link Chunk}s 142 * 143 * @return Chunk[] containing all loaded chunks 144 */ 145 public Chunk[] getLoadedChunks(); 146 147 /** 148 * Loads the specified {@link Chunk} 149 * 150 * @param chunk The chunk to load 151 */ 152 public void loadChunk(Chunk chunk); 153 154 /** 155 * Checks if the {@link Chunk} at the specified coordinates is loaded 156 * 157 * @param x X-coordinate of the chunk 158 * @param z Z-coordinate of the chunk 159 * @return true if the chunk is loaded, otherwise false 160 */ 161 public boolean isChunkLoaded(int x, int z); 162 163 /** 164 * Checks if the {@link Chunk} at the specified coordinates is loaded and 165 * in use by one or more players 166 * 167 * @param x X-coordinate of the chunk 168 * @param z Z-coordinate of the chunk 169 * @return true if the chunk is loaded and in use by one or more players, 170 * otherwise false 171 */ 172 public boolean isChunkInUse(int x, int z); 173 174 /** 175 * Loads the {@link Chunk} at the specified coordinates 176 * <p> 177 * If the chunk does not exist, it will be generated. 178 * <p> 179 * This method is analogous to {@link #loadChunk(int, int, boolean)} where 180 * generate is true. 181 * 182 * @param x X-coordinate of the chunk 183 * @param z Z-coordinate of the chunk 184 */ 185 public void loadChunk(int x, int z); 186 187 /** 188 * Loads the {@link Chunk} at the specified coordinates 189 * 190 * @param x X-coordinate of the chunk 191 * @param z Z-coordinate of the chunk 192 * @param generate Whether or not to generate a chunk if it doesn't 193 * already exist 194 * @return true if the chunk has loaded successfully, otherwise false 195 */ 196 public boolean loadChunk(int x, int z, boolean generate); 197 198 /** 199 * Safely unloads and saves the {@link Chunk} at the specified coordinates 200 * <p> 201 * This method is analogous to {@link #unloadChunk(int, int, boolean, 202 * boolean)} where safe and saveis true 203 * 204 * @param chunk the chunk to unload 205 * @return true if the chunk has unloaded successfully, otherwise false 206 */ 207 public boolean unloadChunk(Chunk chunk); 208 209 /** 210 * Safely unloads and saves the {@link Chunk} at the specified coordinates 211 * <p> 212 * This method is analogous to {@link #unloadChunk(int, int, boolean, 213 * boolean)} where safe and saveis true 214 * 215 * @param x X-coordinate of the chunk 216 * @param z Z-coordinate of the chunk 217 * @return true if the chunk has unloaded successfully, otherwise false 218 */ 219 public boolean unloadChunk(int x, int z); 220 221 /** 222 * Safely unloads and optionally saves the {@link Chunk} at the specified 223 * coordinates 224 * <p> 225 * This method is analogous to {@link #unloadChunk(int, int, boolean, 226 * boolean)} where save is true 227 * 228 * @param x X-coordinate of the chunk 229 * @param z Z-coordinate of the chunk 230 * @param save Whether or not to save the chunk 231 * @return true if the chunk has unloaded successfully, otherwise false 232 */ 233 public boolean unloadChunk(int x, int z, boolean save); 234 235 /** 236 * Unloads and optionally saves the {@link Chunk} at the specified 237 * coordinates 238 * 239 * @param x X-coordinate of the chunk 240 * @param z Z-coordinate of the chunk 241 * @param save Controls whether the chunk is saved 242 * @param safe Controls whether to unload the chunk when players are 243 * nearby 244 * @return true if the chunk has unloaded successfully, otherwise false 245 */ 246 public boolean unloadChunk(int x, int z, boolean save, boolean safe); 247 248 /** 249 * Safely queues the {@link Chunk} at the specified coordinates for 250 * unloading 251 * <p> 252 * This method is analogous to {@link #unloadChunkRequest(int, int, 253 * boolean)} where safe is true 254 * 255 * @param x X-coordinate of the chunk 256 * @param z Z-coordinate of the chunk 257 * @return true is the queue attempt was successful, otherwise false 258 */ 259 public boolean unloadChunkRequest(int x, int z); 260 261 /** 262 * Queues the {@link Chunk} at the specified coordinates for unloading 263 * 264 * @param x X-coordinate of the chunk 265 * @param z Z-coordinate of the chunk 266 * @param safe Controls whether to queue the chunk when players are nearby 267 * @return Whether the chunk was actually queued 268 */ 269 public boolean unloadChunkRequest(int x, int z, boolean safe); 270 271 /** 272 * Regenerates the {@link Chunk} at the specified coordinates 273 * 274 * @param x X-coordinate of the chunk 275 * @param z Z-coordinate of the chunk 276 * @return Whether the chunk was actually regenerated 277 */ 278 public boolean regenerateChunk(int x, int z); 279 280 /** 281 * Resends the {@link Chunk} to all clients 282 * 283 * @param x X-coordinate of the chunk 284 * @param z Z-coordinate of the chunk 285 * @return Whether the chunk was actually refreshed 286 */ 287 public boolean refreshChunk(int x, int z); 288 289 /** 290 * Drops an item at the specified {@link Location} 291 * 292 * @param location Location to drop the item 293 * @param item ItemStack to drop 294 * @return ItemDrop entity created as a result of this method 295 */ 296 public Item dropItem(Location location, ItemStack item); 297 298 /** 299 * Drops an item at the specified {@link Location} with a random offset 300 * 301 * @param location Location to drop the item 302 * @param item ItemStack to drop 303 * @return ItemDrop entity created as a result of this method 304 */ 305 public Item dropItemNaturally(Location location, ItemStack item); 306 307 /** 308 * Creates an {@link Arrow} entity at the given {@link Location} 309 * 310 * @param location Location to spawn the arrow 311 * @param direction Direction to shoot the arrow in 312 * @param speed Speed of the arrow. A recommend speed is 0.6 313 * @param spread Spread of the arrow. A recommend spread is 12 314 * @return Arrow entity spawned as a result of this method 315 */ 316 public Arrow spawnArrow(Location location, Vector direction, float speed, float spread); 317 318 /** 319 * Creates a tree at the given {@link Location} 320 * 321 * @param location Location to spawn the tree 322 * @param type Type of the tree to create 323 * @return true if the tree was created successfully, otherwise false 324 */ 325 public boolean generateTree(Location location, TreeType type); 326 327 /** 328 * Creates a tree at the given {@link Location} 329 * 330 * @param loc Location to spawn the tree 331 * @param type Type of the tree to create 332 * @param delegate A class to call for each block changed as a result of 333 * this method 334 * @return true if the tree was created successfully, otherwise false 335 */ 336 public boolean generateTree(Location loc, TreeType type, BlockChangeDelegate delegate); 337 338 /** 339 * Creates a entity at the given {@link Location} 340 * 341 * @param loc The location to spawn the entity 342 * @param type The entity to spawn 343 * @return Resulting Entity of this method, or null if it was unsuccessful 344 */ 345 public Entity spawnEntity(Location loc, EntityType type); 346 347 /** 348 * Creates a creature at the given {@link Location} 349 * 350 * @param loc The location to spawn the creature 351 * @param type The creature to spawn 352 * @return Resulting LivingEntity of this method, or null if it was 353 * unsuccessful 354 * @deprecated Has issues spawning non LivingEntities. Use {@link 355 * #spawnEntity(Location, EntityType) spawnEntity} instead. 356 */ 357 @Deprecated 358 public LivingEntity spawnCreature(Location loc, EntityType type); 359 360 /** 361 * Creates a creature at the given {@link Location} 362 * 363 * @param loc The location to spawn the creature 364 * @param type The creature to spawn 365 * @return Resulting LivingEntity of this method, or null if it was 366 * unsuccessful 367 */ 368 @Deprecated 369 public LivingEntity spawnCreature(Location loc, CreatureType type); 370 371 /** 372 * Strikes lightning at the given {@link Location} 373 * 374 * @param loc The location to strike lightning 375 * @return The lightning entity. 376 */ 377 public LightningStrike strikeLightning(Location loc); 378 379 /** 380 * Strikes lightning at the given {@link Location} without doing damage 381 * 382 * @param loc The location to strike lightning 383 * @return The lightning entity. 384 */ 385 public LightningStrike strikeLightningEffect(Location loc); 386 387 /** 388 * Get a list of all entities in this World 389 * 390 * @return A List of all Entities currently residing in this world 391 */ 392 public List<Entity> getEntities(); 393 394 /** 395 * Get a list of all living entities in this World 396 * 397 * @return A List of all LivingEntities currently residing in this world 398 */ 399 public List<LivingEntity> getLivingEntities(); 400 401 /** 402 * Get a collection of all entities in this World matching the given 403 * class/interface 404 * 405 * @param classes The classes representing the types of entity to match 406 * @return A List of all Entities currently residing in this world that 407 * match the given class/interface 408 */ 409 @Deprecated 410 public <T extends Entity> Collection<T> getEntitiesByClass(Class<T>... classes); 411 412 /** 413 * Get a collection of all entities in this World matching the given 414 * class/interface 415 * 416 * @param cls The class representing the type of entity to match 417 * @return A List of all Entities currently residing in this world that 418 * match the given class/interface 419 */ 420 public <T extends Entity> Collection<T> getEntitiesByClass(Class<T> cls); 421 422 /** 423 * Get a collection of all entities in this World matching any of the 424 * given classes/interfaces 425 * 426 * @param classes The classes representing the types of entity to match 427 * @return A List of all Entities currently residing in this world that 428 * match one or more of the given classes/interfaces 429 */ 430 public Collection<Entity> getEntitiesByClasses(Class<?>... classes); 431 432 /** 433 * Get a list of all players in this World 434 * 435 * @return A list of all Players currently residing in this world 436 */ 437 public List<Player> getPlayers(); 438 439 /** 440 * Gets the unique name of this world 441 * 442 * @return Name of this world 443 */ 444 public String getName(); 445 446 /** 447 * Gets the Unique ID of this world 448 * 449 * @return Unique ID of this world. 450 */ 451 public UUID getUID(); 452 453 /** 454 * Gets the default spawn {@link Location} of this world 455 * 456 * @return The spawn location of this world 457 */ 458 public Location getSpawnLocation(); 459 460 /** 461 * Sets the spawn location of the world 462 * 463 * @param x X coordinate 464 * @param y Y coordinate 465 * @param z Z coordinate 466 * @return True if it was successfully set. 467 */ 468 public boolean setSpawnLocation(int x, int y, int z); 469 470 /** 471 * Gets the relative in-game time of this world. 472 * <p> 473 * The relative time is analogous to hours * 1000 474 * 475 * @return The current relative time 476 * @see #getFullTime() Returns an absolute time of this world 477 */ 478 public long getTime(); 479 480 /** 481 * Sets the relative in-game time on the server. 482 * <p> 483 * The relative time is analogous to hours * 1000 484 * <p> 485 * Note that setting the relative time below the current relative time 486 * will actually move the clock forward a day. If you require to rewind 487 * time, please see {@link #setFullTime(long)} 488 * 489 * @param time The new relative time to set the in-game time to (in 490 * hours*1000) 491 * @see #setFullTime(long) Sets the absolute time of this world 492 */ 493 public void setTime(long time); 494 495 /** 496 * Gets the full in-game time on this world 497 * 498 * @return The current absolute time 499 * @see #getTime() Returns a relative time of this world 500 */ 501 public long getFullTime(); 502 503 /** 504 * Sets the in-game time on the server 505 * <p> 506 * Note that this sets the full time of the world, which may cause adverse 507 * effects such as breaking redstone clocks and any scheduled events 508 * 509 * @param time The new absolute time to set this world to 510 * @see #setTime(long) Sets the relative time of this world 511 */ 512 public void setFullTime(long time); 513 514 /** 515 * Returns whether the world has an ongoing storm. 516 * 517 * @return Whether there is an ongoing storm 518 */ 519 public boolean hasStorm(); 520 521 /** 522 * Set whether there is a storm. A duration will be set for the new 523 * current conditions. 524 * 525 * @param hasStorm Whether there is rain and snow 526 */ 527 public void setStorm(boolean hasStorm); 528 529 /** 530 * Get the remaining time in ticks of the current conditions. 531 * 532 * @return Time in ticks 533 */ 534 public int getWeatherDuration(); 535 536 /** 537 * Set the remaining time in ticks of the current conditions. 538 * 539 * @param duration Time in ticks 540 */ 541 public void setWeatherDuration(int duration); 542 543 /** 544 * Returns whether there is thunder. 545 * 546 * @return Whether there is thunder 547 */ 548 public boolean isThundering(); 549 550 /** 551 * Set whether it is thundering. 552 * 553 * @param thundering Whether it is thundering 554 */ 555 public void setThundering(boolean thundering); 556 557 /** 558 * Get the thundering duration. 559 * 560 * @return Duration in ticks 561 */ 562 public int getThunderDuration(); 563 564 /** 565 * Set the thundering duration. 566 * 567 * @param duration Duration in ticks 568 */ 569 public void setThunderDuration(int duration); 570 571 /** 572 * Creates explosion at given coordinates with given power 573 * 574 * @param x X coordinate 575 * @param y Y coordinate 576 * @param z Z coordinate 577 * @param power The power of explosion, where 4F is TNT 578 * @return false if explosion was canceled, otherwise true 579 */ 580 public boolean createExplosion(double x, double y, double z, float power); 581 582 /** 583 * Creates explosion at given coordinates with given power and optionally 584 * setting blocks on fire. 585 * 586 * @param x X coordinate 587 * @param y Y coordinate 588 * @param z Z coordinate 589 * @param power The power of explosion, where 4F is TNT 590 * @param setFire Whether or not to set blocks on fire 591 * @return false if explosion was canceled, otherwise true 592 */ 593 public boolean createExplosion(double x, double y, double z, float power, boolean setFire); 594 595 /** 596 * Creates explosion at given coordinates with given power and optionally 597 * setting blocks on fire or breaking blocks. 598 * 599 * @param x X coordinate 600 * @param y Y coordinate 601 * @param z Z coordinate 602 * @param power The power of explosion, where 4F is TNT 603 * @param setFire Whether or not to set blocks on fire 604 * @param breakBlocks Whether or not to have blocks be destroyed 605 * @return false if explosion was canceled, otherwise true 606 */ 607 public boolean createExplosion(double x, double y, double z, float power, boolean setFire, boolean breakBlocks); 608 609 /** 610 * Creates explosion at given coordinates with given power 611 * 612 * @param loc Location to blow up 613 * @param power The power of explosion, where 4F is TNT 614 * @return false if explosion was canceled, otherwise true 615 */ 616 public boolean createExplosion(Location loc, float power); 617 618 /** 619 * Creates explosion at given coordinates with given power and optionally 620 * setting blocks on fire. 621 * 622 * @param loc Location to blow up 623 * @param power The power of explosion, where 4F is TNT 624 * @param setFire Whether or not to set blocks on fire 625 * @return false if explosion was canceled, otherwise true 626 */ 627 public boolean createExplosion(Location loc, float power, boolean setFire); 628 629 /** 630 * Gets the {@link Environment} type of this world 631 * 632 * @return This worlds Environment type 633 */ 634 public Environment getEnvironment(); 635 636 /** 637 * Gets the Seed for this world. 638 * 639 * @return This worlds Seed 640 */ 641 public long getSeed(); 642 643 /** 644 * Gets the current PVP setting for this world. 645 * 646 * @return True if PVP is enabled 647 */ 648 public boolean getPVP(); 649 650 /** 651 * Sets the PVP setting for this world. 652 * 653 * @param pvp True/False whether PVP should be Enabled. 654 */ 655 public void setPVP(boolean pvp); 656 657 /** 658 * Gets the chunk generator for this world 659 * 660 * @return ChunkGenerator associated with this world 661 */ 662 public ChunkGenerator getGenerator(); 663 664 /** 665 * Saves world to disk 666 */ 667 public void save(); 668 669 /** 670 * Gets a list of all applied {@link BlockPopulator}s for this World 671 * 672 * @return List containing any or none BlockPopulators 673 */ 674 public List<BlockPopulator> getPopulators(); 675 676 /** 677 * Spawn an entity of a specific class at the given {@link Location} 678 * 679 * @param location the {@link Location} to spawn the entity at 680 * @param clazz the class of the {@link Entity} to spawn 681 * @param <T> the class of the {@link Entity} to spawn 682 * @return an instance of the spawned {@link Entity} 683 * @throws IllegalArgumentException if either parameter is null or the 684 * {@link Entity} requested cannot be spawned 685 */ 686 public <T extends Entity> T spawn(Location location, Class<T> clazz) throws IllegalArgumentException; 687 688 /** 689 * Spawn a {@link FallingBlock} entity at the given {@link Location} of 690 * the specified {@link Material}. The material dictates what is falling. 691 * When the FallingBlock hits the ground, it will place that block. 692 * <p> 693 * The Material must be a block type, check with {@link Material#isBlock() 694 * material.isBlock()}. The Material may not be air. 695 * 696 * @param location The {@link Location} to spawn the FallingBlock 697 * @param material The block {@link Material} type 698 * @param data The block data 699 * @return The spawned {@link FallingBlock} instance 700 * @throws IllegalArgumentException if {@link Location} or {@link 701 * Material} are null or {@link Material} is not a block 702 * @deprecated Magic value 703 */ 704 @Deprecated 705 public FallingBlock spawnFallingBlock(Location location, Material material, byte data) throws IllegalArgumentException; 706 707 /** 708 * Spawn a {@link FallingBlock} entity at the given {@link Location} of 709 * the specified blockId (converted to {@link Material}) 710 * 711 * @param location The {@link Location} to spawn the FallingBlock 712 * @param blockId The id of the intended material 713 * @param blockData The block data 714 * @return The spawned FallingBlock instance 715 * @throws IllegalArgumentException if location is null, or blockId is 716 * invalid 717 * @see #spawnFallingBlock(org.bukkit.Location, org.bukkit.Material, byte) 718 * @deprecated Magic value 719 */ 720 @Deprecated 721 public FallingBlock spawnFallingBlock(Location location, int blockId, byte blockData) throws IllegalArgumentException; 722 723 /** 724 * Plays an effect to all players within a default radius around a given 725 * location. 726 * 727 * @param location the {@link Location} around which players must be to 728 * hear the sound 729 * @param effect the {@link Effect} 730 * @param data a data bit needed for some effects 731 */ 732 public void playEffect(Location location, Effect effect, int data); 733 734 /** 735 * Plays an effect to all players within a given radius around a location. 736 * 737 * @param location the {@link Location} around which players must be to 738 * hear the effect 739 * @param effect the {@link Effect} 740 * @param data a data bit needed for some effects 741 * @param radius the radius around the location 742 */ 743 public void playEffect(Location location, Effect effect, int data, int radius); 744 745 /** 746 * Plays an effect to all players within a default radius around a given 747 * location. 748 * 749 * @param location the {@link Location} around which players must be to 750 * hear the sound 751 * @param effect the {@link Effect} 752 * @param data a data bit needed for some effects 753 */ 754 public <T> void playEffect(Location location, Effect effect, T data); 755 756 /** 757 * Plays an effect to all players within a given radius around a location. 758 * 759 * @param location the {@link Location} around which players must be to 760 * hear the effect 761 * @param effect the {@link Effect} 762 * @param data a data bit needed for some effects 763 * @param radius the radius around the location 764 */ 765 public <T> void playEffect(Location location, Effect effect, T data, int radius); 766 767 /** 768 * Get empty chunk snapshot (equivalent to all air blocks), optionally 769 * including valid biome data. Used for representing an ungenerated chunk, 770 * or for fetching only biome data without loading a chunk. 771 * 772 * @param x - chunk x coordinate 773 * @param z - chunk z coordinate 774 * @param includeBiome - if true, snapshot includes per-coordinate biome 775 * type 776 * @param includeBiomeTempRain - if true, snapshot includes per-coordinate 777 * raw biome temperature and rainfall 778 * @return The empty snapshot. 779 */ 780 public ChunkSnapshot getEmptyChunkSnapshot(int x, int z, boolean includeBiome, boolean includeBiomeTempRain); 781 782 /** 783 * Sets the spawn flags for this. 784 * 785 * @param allowMonsters - if true, monsters are allowed to spawn in this 786 * world. 787 * @param allowAnimals - if true, animals are allowed to spawn in this 788 * world. 789 */ 790 public void setSpawnFlags(boolean allowMonsters, boolean allowAnimals); 791 792 /** 793 * Gets whether animals can spawn in this world. 794 * 795 * @return whether animals can spawn in this world. 796 */ 797 public boolean getAllowAnimals(); 798 799 /** 800 * Gets whether monsters can spawn in this world. 801 * 802 * @return whether monsters can spawn in this world. 803 */ 804 public boolean getAllowMonsters(); 805 806 /** 807 * Gets the biome for the given block coordinates. 808 * 809 * @param x X coordinate of the block 810 * @param z Z coordinate of the block 811 * @return Biome of the requested block 812 */ 813 Biome getBiome(int x, int z); 814 815 /** 816 * Sets the biome for the given block coordinates 817 * 818 * @param x X coordinate of the block 819 * @param z Z coordinate of the block 820 * @param bio new Biome type for this block 821 */ 822 void setBiome(int x, int z, Biome bio); 823 824 /** 825 * Gets the temperature for the given block coordinates. 826 * <p> 827 * It is safe to run this method when the block does not exist, it will 828 * not create the block. 829 * 830 * @param x X coordinate of the block 831 * @param z Z coordinate of the block 832 * @return Temperature of the requested block 833 */ 834 public double getTemperature(int x, int z); 835 836 /** 837 * Gets the humidity for the given block coordinates. 838 * <p> 839 * It is safe to run this method when the block does not exist, it will 840 * not create the block. 841 * 842 * @param x X coordinate of the block 843 * @param z Z coordinate of the block 844 * @return Humidity of the requested block 845 */ 846 public double getHumidity(int x, int z); 847 848 /** 849 * Gets the maximum height of this world. 850 * <p> 851 * If the max height is 100, there are only blocks from y=0 to y=99. 852 * 853 * @return Maximum height of the world 854 */ 855 public int getMaxHeight(); 856 857 /** 858 * Gets the sea level for this world. 859 * <p> 860 * This is often half of {@link #getMaxHeight()} 861 * 862 * @return Sea level 863 */ 864 public int getSeaLevel(); 865 866 /** 867 * Gets whether the world's spawn area should be kept loaded into memory 868 * or not. 869 * 870 * @return true if the world's spawn area will be kept loaded into memory. 871 */ 872 public boolean getKeepSpawnInMemory(); 873 874 /** 875 * Sets whether the world's spawn area should be kept loaded into memory 876 * or not. 877 * 878 * @param keepLoaded if true then the world's spawn area will be kept 879 * loaded into memory. 880 */ 881 public void setKeepSpawnInMemory(boolean keepLoaded); 882 883 /** 884 * Gets whether or not the world will automatically save 885 * 886 * @return true if the world will automatically save, otherwise false 887 */ 888 public boolean isAutoSave(); 889 890 /** 891 * Sets whether or not the world will automatically save 892 * 893 * @param value true if the world should automatically save, otherwise 894 * false 895 */ 896 public void setAutoSave(boolean value); 897 898 /** 899 * Sets the Difficulty of the world. 900 * 901 * @param difficulty the new difficulty you want to set the world to 902 */ 903 public void setDifficulty(Difficulty difficulty); 904 905 /** 906 * Gets the Difficulty of the world. 907 * 908 * @return The difficulty of the world. 909 */ 910 public Difficulty getDifficulty(); 911 912 /** 913 * Gets the folder of this world on disk. 914 * 915 * @return The folder of this world. 916 */ 917 public File getWorldFolder(); 918 919 /** 920 * Gets the type of this world. 921 * 922 * @return Type of this world. 923 */ 924 public WorldType getWorldType(); 925 926 /** 927 * Gets whether or not structures are being generated. 928 * 929 * @return True if structures are being generated. 930 */ 931 public boolean canGenerateStructures(); 932 933 /** 934 * Gets the world's ticks per animal spawns value 935 * <p> 936 * This value determines how many ticks there are between attempts to 937 * spawn animals. 938 * <p> 939 * <b>Example Usage:</b> 940 * <ul> 941 * <li>A value of 1 will mean the server will attempt to spawn animals in 942 * this world every tick. 943 * <li>A value of 400 will mean the server will attempt to spawn animals 944 * in this world every 400th tick. 945 * <li>A value below 0 will be reset back to Minecraft's default. 946 * </ul> 947 * <p> 948 * <b>Note:</b> 949 * If set to 0, animal spawning will be disabled for this world. We 950 * recommend using {@link #setSpawnFlags(boolean, boolean)} to control 951 * this instead. 952 * <p> 953 * Minecraft default: 400. 954 * 955 * @return The world's ticks per animal spawns value 956 */ 957 public long getTicksPerAnimalSpawns(); 958 959 /** 960 * Sets the world's ticks per animal spawns value 961 * <p> 962 * This value determines how many ticks there are between attempts to 963 * spawn animals. 964 * <p> 965 * <b>Example Usage:</b> 966 * <ul> 967 * <li>A value of 1 will mean the server will attempt to spawn animals in 968 * this world every tick. 969 * <li>A value of 400 will mean the server will attempt to spawn animals 970 * in this world every 400th tick. 971 * <li>A value below 0 will be reset back to Minecraft's default. 972 * </ul> 973 * <p> 974 * <b>Note:</b> 975 * If set to 0, animal spawning will be disabled for this world. We 976 * recommend using {@link #setSpawnFlags(boolean, boolean)} to control 977 * this instead. 978 * <p> 979 * Minecraft default: 400. 980 * 981 * @param ticksPerAnimalSpawns the ticks per animal spawns value you want 982 * to set the world to 983 */ 984 public void setTicksPerAnimalSpawns(int ticksPerAnimalSpawns); 985 986 /** 987 * Gets the world's ticks per monster spawns value 988 * <p> 989 * This value determines how many ticks there are between attempts to 990 * spawn monsters. 991 * <p> 992 * <b>Example Usage:</b> 993 * <ul> 994 * <li>A value of 1 will mean the server will attempt to spawn monsters in 995 * this world every tick. 996 * <li>A value of 400 will mean the server will attempt to spawn monsters 997 * in this world every 400th tick. 998 * <li>A value below 0 will be reset back to Minecraft's default. 999 * </ul> 1000 * <p> 1001 * <b>Note:</b> 1002 * If set to 0, monsters spawning will be disabled for this world. We 1003 * recommend using {@link #setSpawnFlags(boolean, boolean)} to control 1004 * this instead. 1005 * <p> 1006 * Minecraft default: 1. 1007 * 1008 * @return The world's ticks per monster spawns value 1009 */ 1010 public long getTicksPerMonsterSpawns(); 1011 1012 /** 1013 * Sets the world's ticks per monster spawns value 1014 * <p> 1015 * This value determines how many ticks there are between attempts to 1016 * spawn monsters. 1017 * <p> 1018 * <b>Example Usage:</b> 1019 * <ul> 1020 * <li>A value of 1 will mean the server will attempt to spawn monsters in 1021 * this world on every tick. 1022 * <li>A value of 400 will mean the server will attempt to spawn monsters 1023 * in this world every 400th tick. 1024 * <li>A value below 0 will be reset back to Minecraft's default. 1025 * </ul> 1026 * <p> 1027 * <b>Note:</b> 1028 * If set to 0, monsters spawning will be disabled for this world. We 1029 * recommend using {@link #setSpawnFlags(boolean, boolean)} to control 1030 * this instead. 1031 * <p> 1032 * Minecraft default: 1. 1033 * 1034 * @param ticksPerMonsterSpawns the ticks per monster spawns value you 1035 * want to set the world to 1036 */ 1037 public void setTicksPerMonsterSpawns(int ticksPerMonsterSpawns); 1038 1039 /** 1040 * Gets limit for number of monsters that can spawn in a chunk in this 1041 * world 1042 * 1043 * @return The monster spawn limit 1044 */ 1045 int getMonsterSpawnLimit(); 1046 1047 /** 1048 * Sets the limit for number of monsters that can spawn in a chunk in this 1049 * world 1050 * <p> 1051 * <b>Note:</b> If set to a negative number the world will use the 1052 * server-wide spawn limit instead. 1053 */ 1054 void setMonsterSpawnLimit(int limit); 1055 1056 /** 1057 * Gets the limit for number of animals that can spawn in a chunk in this 1058 * world 1059 * 1060 * @return The animal spawn limit 1061 */ 1062 int getAnimalSpawnLimit(); 1063 1064 /** 1065 * Sets the limit for number of animals that can spawn in a chunk in this 1066 * world 1067 * <p> 1068 * <b>Note:</b> If set to a negative number the world will use the 1069 * server-wide spawn limit instead. 1070 */ 1071 void setAnimalSpawnLimit(int limit); 1072 1073 /** 1074 * Gets the limit for number of water animals that can spawn in a chunk in 1075 * this world 1076 * 1077 * @return The water animal spawn limit 1078 */ 1079 int getWaterAnimalSpawnLimit(); 1080 1081 /** 1082 * Sets the limit for number of water animals that can spawn in a chunk in 1083 * this world 1084 * <p> 1085 * <b>Note:</b> If set to a negative number the world will use the 1086 * server-wide spawn limit instead. 1087 */ 1088 void setWaterAnimalSpawnLimit(int limit); 1089 1090 /** 1091 * Gets the limit for number of ambient mobs that can spawn in a chunk in 1092 * this world 1093 * 1094 * @return The ambient spawn limit 1095 */ 1096 int getAmbientSpawnLimit(); 1097 1098 /** 1099 * Sets the limit for number of ambient mobs that can spawn in a chunk in 1100 * this world 1101 * <p> 1102 * <b>Note:</b> If set to a negative number the world will use the 1103 * server-wide spawn limit instead. 1104 */ 1105 void setAmbientSpawnLimit(int limit); 1106 1107 /** 1108 * Play a Sound at the provided Location in the World 1109 * <p> 1110 * This function will fail silently if Location or Sound are null. 1111 * 1112 * @param location The location to play the sound 1113 * @param sound The sound to play 1114 * @param volume The volume of the sound 1115 * @param pitch The pitch of the sound 1116 */ 1117 void playSound(Location location, Sound sound, float volume, float pitch); 1118 1119 /** 1120 * Get existing rules 1121 * 1122 * @return An array of rules 1123 */ 1124 public String[] getGameRules(); 1125 1126 /** 1127 * Gets the current state of the specified rule 1128 * <p> 1129 * Will return null if rule passed is null 1130 * 1131 * @param rule Rule to look up value of 1132 * @return String value of rule 1133 */ 1134 public String getGameRuleValue(String rule); 1135 1136 /** 1137 * Set the specified gamerule to specified value. 1138 * <p> 1139 * The rule may attempt to validate the value passed, will return true if 1140 * value was set. 1141 * <p> 1142 * If rule is null, the function will return false. 1143 * 1144 * @param rule Rule to set 1145 * @param value Value to set rule to 1146 * @return True if rule was set 1147 */ 1148 public boolean setGameRuleValue(String rule, String value); 1149 1150 /** 1151 * Checks if string is a valid game rule 1152 * 1153 * @param rule Rule to check 1154 * @return True if rule exists 1155 */ 1156 public boolean isGameRule(String rule); 1157 1158 /** 1159 * Represents various map environment types that a world may be 1160 */ 1161 public enum Environment { 1162 1163 /** 1164 * Represents the "normal"/"surface world" map 1165 */ 1166 NORMAL(0), 1167 /** 1168 * Represents a nether based map ("hell") 1169 */ 1170 NETHER(-1), 1171 /** 1172 * Represents the "end" map 1173 */ 1174 THE_END(1); 1175 1176 private final int id; 1177 private static final Map<Integer, Environment> lookup = new HashMap<Integer, Environment>(); 1178 1179 private Environment(int id) { 1180 this.id = id; 1181 } 1182 1183 /** 1184 * Gets the dimension ID of this environment 1185 * 1186 * @return dimension ID 1187 * @deprecated Magic value 1188 */ 1189 @Deprecated 1190 public int getId() { 1191 return id; 1192 } 1193 1194 /** 1195 * Get an environment by ID 1196 * 1197 * @param id The ID of the environment 1198 * @return The environment 1199 * @deprecated Magic value 1200 */ 1201 @Deprecated 1202 public static Environment getEnvironment(int id) { 1203 return lookup.get(id); 1204 } 1205 1206 static { 1207 for (Environment env : values()) { 1208 lookup.put(env.getId(), env); 1209 } 1210 } 1211 } 1212 }