001/* 002 * Trident - A Multithreaded Server Alternative 003 * Copyright 2014 The TridentSDK Team 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018package net.tridentsdk.base; 019 020import com.google.common.collect.Maps; 021import net.tridentsdk.effect.sound.SoundEffectType; 022 023import java.util.Collections; 024import java.util.EnumSet; 025import java.util.HashMap; 026import java.util.Map; 027import java.util.regex.Pattern; 028 029/** 030 * Enumeration of possible substances in minecraft 031 * 032 * @author The TridentSDK Team 033 * @since 0.3-alpha-DP 034 */ 035public enum Substance { 036 /** 037 * Blocks 038 */ 039 AIR("0"), 040 STONE("1"), 041 GRASS("2"), 042 DIRT("3"), 043 COBBLESTONE("4"), 044 WOOD("5"), 045 SAPLING("6"), 046 BEDROCK("7"), 047 WATER("8"), 048 STATIONARY_WATER("9"), 049 LAVA("10"), 050 STATIONARY_LAVA("11"), 051 SAND("12"), 052 GRAVEL("13"), 053 GOLD_ORE("14"), 054 IRON_ORE("15"), 055 COAL_ORE("16"), 056 LOG("17"), 057 LEAVES("18"), 058 SPONGE("19"), 059 GLASS("20"), 060 LAPIS_ORE("21"), 061 LAPIS_BLOCK("22"), 062 DISPENSER("23"), 063 SANDSTONE("24"), 064 NOTE_BLOCK("25"), 065 BED_BLOCK("26"), 066 POWERED_RAIL("27"), 067 DETECTOR_RAIL("28"), 068 PISTON_STICKY_BASE("29"), 069 WEB("30"), 070 LONG_GRASS("31"), 071 DEAD_BUSH("32"), 072 PISTON_BASE("33"), 073 PISTON_EXTENSION("34"), 074 WOOL("35"), 075 PISTON_MOVING_PIECE("36"), 076 YELLOW_FLOWER("37"), 077 RED_ROSE("38"), 078 BROWN_MUSHROOM("39"), 079 RED_MUSHROOM("40"), 080 GOLD_BLOCK("41"), 081 IRON_BLOCK("42"), 082 DOUBLE_STEP("43"), 083 STEP("44"), 084 BRICK("45"), 085 TNT("46"), 086 BOOKSHELF("47"), 087 MOSSY_COBBLESTONE("48"), 088 OBSIDIAN("49"), 089 TORCH("50"), 090 FIRE("51"), 091 MOB_SPAWNER("52"), 092 WOOD_STAIRS("53"), 093 CHEST("54"), 094 REDSTONE_WIRE("55"), 095 DIAMOND_ORE("56"), 096 DIAMOND_BLOCK("57"), 097 WORKBENCH("58"), 098 CROPS("59"), 099 SOIL("60"), 100 FURNACE("61"), 101 BURNING_FURNACE("62"), 102 SIGN_POST("63"), 103 WOODEN_DOOR("64"), 104 LADDER("65"), 105 RAILS("66"), 106 COBBLESTONE_STAIRS("67"), 107 WALL_SIGN("68"), 108 LEVER("69"), 109 STONE_PLATE("70"), 110 IRON_DOOR_BLOCK("71"), 111 WOOD_PLATE("72"), 112 REDSTONE_ORE("73"), 113 GLOWING_REDSTONE_ORE("74"), 114 REDSTONE_TORCH_OFF("75"), 115 REDSTONE_TORCH_ON("76"), 116 STONE_BUTTON("77"), 117 SNOW("78"), 118 ICE("79"), 119 SNOW_BLOCK("80"), 120 CACTUS("81"), 121 CLAY("82"), 122 SUGAR_CANE_BLOCK("83"), 123 JUKEBOX("84"), 124 FENCE("85"), 125 PUMPKIN("86"), 126 NETHERRACK("87"), 127 SOUL_SAND("88"), 128 GLOWSTONE("89"), 129 PORTAL("90"), 130 JACK_O_LANTERN("91"), 131 CAKE_BLOCK("92"), 132 DIODE_BLOCK_OFF("93"), 133 DIODE_BLOCK_ON("94"), 134 STAINED_GLASS("95"), 135 TRAP_DOOR("96"), 136 MONSTER_EGGS("97"), 137 SMOOTH_BRICK("98"), 138 HUGE_MUSHROOM_1("99"), 139 HUGE_MUSHROOM_2("100"), 140 IRON_FENCE("101"), 141 THIN_GLASS("102"), 142 MELON_BLOCK("103"), 143 PUMPKIN_STEM("104"), 144 MELON_STEM("105"), 145 VINE("106"), 146 FENCE_GATE("107"), 147 BRICK_STAIRS("108"), 148 SMOOTH_STAIRS("109"), 149 MYCEL("110"), 150 WATER_LILY("111"), 151 NETHER_BRICK("112"), 152 NETHER_FENCE("113"), 153 NETHER_BRICK_STAIRS("114"), 154 NETHER_WARTS("115"), 155 ENCHANTMENT_TABLE("116"), 156 BREWING_STAND("117"), 157 CAULDRON("118"), 158 ENDER_PORTAL("119"), 159 ENDER_PORTAL_FRAME("120"), 160 ENDER_STONE("121"), 161 DRAGON_EGG("122"), 162 REDSTONE_LAMP_OFF("123"), 163 REDSTONE_LAMP_ON("124"), 164 WOOD_DOUBLE_STEP("125"), 165 WOOD_STEP("126"), 166 COCOA("127"), 167 SANDSTONE_STAIRS("128"), 168 EMERALD_ORE("129"), 169 ENDER_CHEST("130"), 170 TRIPWIRE_HOOK("131"), 171 TRIPWIRE("132"), 172 EMERALD_BLOCK("133"), 173 SPRUCE_WOOD_STAIRS("134"), 174 BIRCH_WOOD_STAIRS("135"), 175 JUNGLE_WOOD_STAIRS("136"), 176 COMMAND("137"), 177 BEACON("138"), 178 COBBLE_WALL("139"), 179 FLOWER_POT("140"), 180 CARROT("141"), 181 POTATO("142"), 182 WOOD_BUTTON("143"), 183 SKULL("144"), 184 ANVIL("145"), 185 TRAPPED_CHEST("146"), 186 GOLD_PLATE("147"), 187 IRON_PLATE("148"), 188 REDSTONE_COMPARATOR_OFF("149"), 189 REDSTONE_COMPARATOR_ON("150"), 190 DAYLIGHT_DETECTOR("151"), 191 REDSTONE_BLOCK("152"), 192 QUARTZ_ORE("153"), 193 HOPPER("154"), 194 QUARTZ_BLOCK("155"), 195 QUARTZ_STAIRS("156"), 196 ACTIVATOR_RAIL("157"), 197 DROPPER("158"), 198 STAINED_CLAY("159"), 199 STAINED_GLASS_PANE("160"), 200 LEAVES_2("161"), 201 LOG_2("162"), 202 ACACIA_STAIRS("163"), 203 DARK_OAK_STAIRS("164"), 204 SLIME_BLOCK("165"), 205 BARRIER("166"), 206 IRON_TRAP_DOOR("167"), 207 PRISMARINE("168"), 208 SEA_LANTERN("169"), 209 HAY_BLOCK("170"), 210 CARPET("171"), 211 HARD_CLAY("172"), 212 COAL_BLOCK("173"), 213 PACKED_ICE("174"), 214 DOUBLE_PLANT("175"), 215 STANDING_BANNER("176"), 216 WALL_BANNER("177"), 217 DAYLIGHT_DETECTOR_INVERTED("178"), 218 RED_SANDSTONE("179"), 219 RED_SANDSTONE_STAIRS("180"), 220 DOUBLE_STEP_2("181"), 221 STEP_2("182"), 222 SPRUCE_FENCE_GATE("183"), 223 BIRCH_FENCE_GATE("184"), 224 JUNGLE_FENCE_GATE("185"), 225 DARK_OAK_FENCE_GATE("186"), 226 ACACIA_FENCE_GATE("187"), 227 SPRUCE_FENCE("188"), 228 BIRCH_FENCE("189"), 229 JUNGLE_FENCE("190"), 230 DARK_OAK_FENCE("191"), 231 ACACIA_FENCE("192"), 232 /** 233 * Items 234 */ 235 IRON_SPADE("256", 1), 236 IRON_PICKAXE("257", 1), 237 IRON_AXE("258", 1), 238 FLINT_AND_STEEL("259", 1), 239 APPLE("260"), 240 BOW("261", 1), 241 ARROW("262"), 242 COAL("263"), 243 DIAMOND("264"), 244 IRON_INGOT("265"), 245 GOLD_INGOT("266"), 246 IRON_SWORD("267", 1), 247 WOOD_SWORD("268", 1), 248 WOOD_SPADE("269", 1), 249 WOOD_PICKAXE("270", 1), 250 WOOD_AXE("271", 1), 251 STONE_SWORD("272", 1), 252 STONE_SPADE("273", 1), 253 STONE_PICKAXE("274", 1), 254 STONE_AXE("275", 1), 255 DIAMOND_SWORD("276", 1), 256 DIAMOND_SPADE("277", 1), 257 DIAMOND_PICKAXE("278", 1), 258 DIAMOND_AXE("279", 1), 259 STICK("280"), 260 BOWL("281"), 261 MUSHROOM_SOUP("282"), 262 GOLD_SWORD("283", 1), 263 GOLD_SPADE("284", 1), 264 GOLD_PICKAXE("285", 1), 265 GOLD_AXE("286", 1), 266 STRING("287"), 267 FEATHER("288"), 268 SULPHUR("289"), 269 WOOD_HOE("290", 1), 270 STONE_HOE("291", 1), 271 IRON_HOE("292", 1), 272 DIAMOND_HOE("293", 1), 273 GOLD_HOE("294", 1), 274 SEEDS("295"), 275 WHEAT("296"), 276 BREAD("297"), 277 LEATHER_HELMET("298", 1), 278 LEATHER_CHESTPLATE("299", 1), 279 LEATHER_LEGGINGS("300", 1), 280 LEATHER_BOOTS("301", 1), 281 CHAINMAIL_HELMET("302", 1), 282 CHAINMAIL_CHESTPLATE("303", 1), 283 CHAINMAIL_LEGGINGS("304", 1), 284 CHAINMAIL_BOOTS("305", 1), 285 IRON_HELMET("306", 1), 286 IRON_CHESTPLATE("307", 1), 287 IRON_LEGGINGS("308", 1), 288 IRON_BOOTS("309", 1), 289 DIAMOND_HELMET("310", 1), 290 DIAMOND_CHESTPLATE("311", 1), 291 DIAMOND_LEGGINGS("312", 1), 292 DIAMOND_BOOTS("313", 1), 293 GOLD_HELMET("314", 1), 294 GOLD_CHESTPLATE("315", 1), 295 GOLD_LEGGINGS("316", 1), 296 GOLD_BOOTS("317", 1), 297 FLINT("318"), 298 PORK("319"), 299 GRILLED_PORK("320"), 300 PAINTING("321"), // Can place 301 GOLDEN_APPLE("322"), 302 SIGN("323", 16), // Can place 303 WOOD_DOOR("324"), // Can place 304 BUCKET("325", 16), 305 WATER_BUCKET("326", 1), // Can place 306 LAVA_BUCKET("327", 1), // Can place 307 MINECART("328", 1), // Can spawn 308 SADDLE("329", 1), 309 IRON_DOOR("330", 1), // Can place 310 REDSTONE("331"), // Can place 311 SNOW_BALL("332", 16), // Can spawn 312 BOAT("333", 1), // Can spawn 313 LEATHER("334"), 314 MILK_BUCKET("335", 1), 315 CLAY_BRICK("336"), 316 CLAY_BALL("337"), 317 SUGAR_CANE("338"), // Can place 318 PAPER("339"), 319 BOOK("340"), 320 SLIME_BALL("341"), 321 STORAGE_MINECART("342", 1), // Can spawn 322 POWERED_MINECART("343", 1), // Can spawn 323 EGG("344", 16), // Can spawn 324 COMPASS("345"), 325 FISHING_ROD("346", 1), // Can spawn 326 WATCH("347"), 327 GLOWSTONE_DUST("348"), 328 RAW_FISH("349"), 329 COOKED_FISH("350"), 330 INK_SACK("351"), 331 BONE("352"), 332 SUGAR("353"), 333 CAKE("354", 1), // Can place 334 BED("355", 1), // Can place 335 DIODE("356"), // Can place 336 COOKIE("357"), 337 MAP("358"), 338 SHEARS("359", 1), 339 MELON("360"), // Can place 340 PUMPKIN_SEEDS("361"), 341 MELON_SEEDS("362"), 342 RAW_BEEF("363"), 343 COOKED_BEEF("364"), 344 RAW_CHICKEN("365"), 345 COOKED_CHICKEN("366"), 346 ROTTEN_FLESH("367"), 347 ENDER_PEARL("368", 16), // Can spawn 348 BLAZE_ROD("369"), 349 GHAST_TEAR("370"), 350 GOLD_NUGGET("371"), 351 POTION("373", 1), // Can spawn 352 GLASS_BOTTLE("374"), 353 SPIDER_EYE("375"), 354 FERMENTED_SPIDER_EYE("376"), 355 BLAZE_POWDER("377"), 356 MAGMA_CREAM("378"), 357 BREWING_STAND_ITEM("379"), 358 CAULDRON_ITEM("380"), // Can place? 359 EYE_OF_ENDER("381"), // Can spawn 360 SPECKLED_MELON("382"), 361 MONSTER_EGG("383"), // Can spawn 362 EXP_BOTTLE("384"), // Can spawn 363 FIREBALL("385"), 364 BOOK_AND_QUILL("386", 1), 365 WRITTEN_BOOK("387", 16), 366 EMERALD("388"), 367 ITEM_FRAME("389"), // Can spawn 368 FLOWER_POT_ITEM("390"), // Applyable 369 CARROT_ITEM("391"), 370 POTATO_ITEM("392"), 371 BAKED_POTATO("393"), 372 POISONOUS_POTATO("394"), 373 EMPTY_MAP("395"), 374 GOLDEN_CARROT("396"), 375 SKULL_ITEM("397"), // Can place 376 CARROT_STICK("398", 1), 377 NETHER_STAR("399"), 378 PUMPKIN_PIE("400"), 379 FIREWORK("401"), // Can spawn 380 FIREWORK_CHARGE("402"), 381 ENCHANTED_BOOK("403", 1), 382 REDSTONE_COMPARATOR("404"), // Can place 383 NETHER_BRICK_ITEM("405"), 384 QUARTZ("406"), 385 EXPLOSIVE_MINECART("407", 1), // Can spawn 386 HOPPER_MINECART("408", 1), // Can spawn 387 PRISMARINE_SHARD("409"), 388 PRISMARINE_CRYSTALS("410"), 389 RABBIT("411"), 390 COOKED_RABBIT("412"), 391 RABBIT_STEW("413", 1), 392 RABBIT_FOOT("414"), 393 RABBIT_HIDE("415"), 394 ARMOR_STAND("416"), 395 IRON_BARDING("417", 1), 396 GOLD_BARDING("418", 1), 397 DIAMOND_BARDING("419", 1), 398 LEASH("420"), 399 NAME_TAG("421"), 400 COMMAND_MINECART("422", 1), // Can spawn 401 MUTTON("423"), 402 COOKED_MUTTON("424"), 403 BANNER("425"), // Can place? 404 SPRUCE_DOOR("427"), // Can place 405 BIRCH_DOOR("428"), // Can place 406 JUNGLE_DOOR("429"), // Can place 407 ACACIA_DOOR("430"), // Can place 408 DARK_OAK_DOOR("431"), // Can place 409 SHIELD("442", 1), 410 GOLD_RECORD("2256", 1), 411 GREEN_RECORD("2257", 1), 412 RECORD_3("2258", 1), 413 RECORD_4("2259", 1), 414 RECORD_5("2260", 1), 415 RECORD_6("2261", 1), 416 RECORD_7("2262", 1), 417 RECORD_8("2263", 1), 418 RECORD_9("2264", 1), 419 RECORD_10("2265", 1), 420 RECORD_11("2266", 1), 421 RECORD_12("2267", 1); 422 423 private final Pattern PATTERN = Pattern.compile("_"); 424 private final String id; 425 private final String data; 426 private final int maxStack; 427 private final int idInt; 428 private final String replaced; 429 430 private static final Map<Integer, Substance> ids; 431 432 static { 433 HashMap<Integer, Substance> builder = Maps.newHashMap(); 434 for (Substance substance: EnumSet.allOf(Substance.class)) { 435 builder.put(substance.idInt, substance); 436 } 437 ids = Collections.unmodifiableMap(builder); 438 } 439 440 Substance(String id, int stack, String data) { 441 this.id = id; 442 this.maxStack = stack; 443 this.data = data; 444 this.replaced = PATTERN.matcher(id).replaceAll(" "); 445 446 this.idInt = Integer.parseInt(id); 447 } 448 449 Substance(String id, int stack) { 450 this(id, stack, ""); 451 } 452 453 Substance(String id) { 454 this(id, 64, ""); 455 } 456 457 /** 458 * Matches a Material from a String 459 * 460 * @param id String to be matched 461 * @return Material which was matched using id 462 */ 463 public static Substance fromStringId(String id) { 464 for (Substance mat : Substance.values()) { 465 if (mat.replaced.equalsIgnoreCase(id)) 466 return mat; 467 } 468 469 return null; 470 } 471 472 /** 473 * Returns the substance that associated with a given id 474 * 475 * <p>Should be the favored method for getting a substance</p> 476 * <p>E.g. fromId(1) will return Substance.STONE</p> 477 * 478 * @param id 479 * @return 480 */ 481 public static Substance fromId(int id) { 482 return ids.get(id); 483 } 484 485 /** 486 * Gets the block ID of the Material 487 * 488 * @return ID of the Material 489 */ 490 public String idString() { 491 return this.id; 492 } 493 494 /** 495 * Returns the Id of this substance 496 * @return the id of this substance 497 */ 498 public int id() { 499 return idInt; 500 } 501 502 /** 503 * Gets data of this Material 504 * 505 * @return Data of this Material 506 */ 507 public String data() { 508 return this.data; 509 } 510 511 /** 512 * Checks if the substance is a block 513 * 514 * @return True if the substance is a block 515 */ 516 public boolean isBlock() { 517 return Integer.parseInt(this.id) < 255; 518 } 519 520 /** 521 * Check the maximum size of a stack for this Material 522 * 523 * @return The maximum size of a stack for this Material 524 */ 525 public int maxStackSize() { 526 return this.maxStack; 527 } 528 529 /** 530 * Checks if the substance is edible or not 531 * 532 * @return True if the substance is edible 533 */ 534 public boolean isEdible() { 535 switch (this) { 536 case BREAD: 537 case CARROT_ITEM: 538 case BAKED_POTATO: 539 case POTATO_ITEM: 540 case POISONOUS_POTATO: 541 case GOLDEN_CARROT: 542 case PUMPKIN_PIE: 543 case COOKIE: 544 case MELON: 545 case MUSHROOM_SOUP: 546 case RAW_CHICKEN: 547 case COOKED_CHICKEN: 548 case RAW_BEEF: 549 case COOKED_BEEF: 550 case RAW_FISH: 551 case COOKED_FISH: 552 case PORK: 553 case GRILLED_PORK: 554 case APPLE: 555 case GOLDEN_APPLE: 556 case ROTTEN_FLESH: 557 case SPIDER_EYE: 558 case RABBIT: 559 case COOKED_RABBIT: 560 case RABBIT_STEW: 561 case MUTTON: 562 case COOKED_MUTTON: 563 case POTION: 564 return true; 565 default: 566 return false; 567 } 568 } 569 570 /** 571 * Check if a item is a disc (record) 572 * 573 * @return True if the item is a disc (record) 574 */ 575 public boolean isDisc() { 576 return !this.isBlock() && this.idInt >= 2256; 577 } 578 579 /** 580 * Check if a item is wearable (armor) 581 * 582 * @return True if the item is wearable (armor) 583 */ 584 public boolean isWearable() { 585 if (this.isBlock() && this != PUMPKIN) { 586 return false; 587 } 588 589 switch (this) { 590 case PUMPKIN: 591 case LEATHER_HELMET: 592 case LEATHER_CHESTPLATE: 593 case LEATHER_LEGGINGS: 594 case LEATHER_BOOTS: 595 case CHAINMAIL_HELMET: 596 case CHAINMAIL_CHESTPLATE: 597 case CHAINMAIL_LEGGINGS: 598 case CHAINMAIL_BOOTS: 599 case IRON_HELMET: 600 case IRON_CHESTPLATE: 601 case IRON_LEGGINGS: 602 case IRON_BOOTS: 603 case DIAMOND_HELMET: 604 case DIAMOND_CHESTPLATE: 605 case DIAMOND_LEGGINGS: 606 case DIAMOND_BOOTS: 607 case GOLD_HELMET: 608 case GOLD_CHESTPLATE: 609 case GOLD_LEGGINGS: 610 case GOLD_BOOTS: 611 return true; 612 default: 613 return false; 614 } 615 } 616 617 /** 618 * Check if a block is solid. 619 * 620 * @return True if the block is solid 621 */ 622 public boolean isSolid() { 623 if (!this.isBlock()) { 624 return false; 625 } 626 627 switch (this) { 628 case AIR: 629 case SAPLING: 630 case WATER: 631 case STATIONARY_WATER: 632 case LAVA: 633 case STATIONARY_LAVA: 634 case POWERED_RAIL: 635 case DETECTOR_RAIL: 636 case LONG_GRASS: 637 case DEAD_BUSH: 638 case YELLOW_FLOWER: 639 case RED_ROSE: 640 case TORCH: 641 case FIRE: 642 case REDSTONE_WIRE: 643 case CROPS: 644 case SIGN_POST: 645 case RAILS: 646 case WALL_SIGN: 647 case LEVER: 648 case STONE_PLATE: 649 case WOOD_PLATE: 650 case REDSTONE_TORCH_OFF: 651 case REDSTONE_TORCH_ON: 652 case STONE_BUTTON: 653 case SUGAR_CANE_BLOCK: 654 case PORTAL: 655 case TRIPWIRE_HOOK: 656 case TRIPWIRE: 657 case CARROT: 658 case POTATO: 659 case WOOD_BUTTON: 660 case GOLD_PLATE: 661 case IRON_PLATE: 662 case ACTIVATOR_RAIL: 663 case DOUBLE_PLANT: 664 return false; 665 default: 666 return true; 667 } 668 } 669 670 /** 671 * Check if a block is flammable or not 672 * 673 * @return True if a block is flammable 674 */ 675 public boolean isFlammable() { 676 if (!this.isBlock()) { 677 return false; 678 } 679 680 switch (this) { 681 case WOOD: 682 case LOG: 683 case LEAVES: 684 case NOTE_BLOCK: 685 case BED_BLOCK: 686 case LONG_GRASS: 687 case DEAD_BUSH: 688 case WOOL: 689 case TNT: 690 case BOOKSHELF: 691 case WOOD_STAIRS: 692 case CHEST: 693 case WORKBENCH: 694 case SIGN_POST: 695 case WOODEN_DOOR: 696 case WALL_SIGN: 697 case WOOD_PLATE: 698 case JUKEBOX: 699 case FENCE: 700 case TRAP_DOOR: 701 case HUGE_MUSHROOM_1: 702 case HUGE_MUSHROOM_2: 703 case VINE: 704 case FENCE_GATE: 705 case WOOD_DOUBLE_STEP: 706 case WOOD_STEP: 707 case SPRUCE_WOOD_STAIRS: 708 case BIRCH_WOOD_STAIRS: 709 case JUNGLE_WOOD_STAIRS: 710 case HAY_BLOCK: 711 case COAL_BLOCK: 712 case TRAPPED_CHEST: 713 case DAYLIGHT_DETECTOR: 714 case CARPET: 715 case DOUBLE_PLANT: 716 case LEAVES_2: 717 case LOG_2: 718 case ACACIA_STAIRS: 719 case DARK_OAK_STAIRS: 720 case SPRUCE_FENCE_GATE: 721 case BIRCH_FENCE_GATE: 722 case JUNGLE_FENCE_GATE: 723 case DARK_OAK_FENCE_GATE: 724 case ACACIA_FENCE_GATE: 725 case SPRUCE_FENCE: 726 case BIRCH_FENCE: 727 case JUNGLE_FENCE: 728 case DARK_OAK_FENCE: 729 case ACACIA_FENCE: 730 return true; 731 default: 732 return false; 733 } 734 } 735 736 /** 737 * Check if a block can burn away 738 * 739 * @return True if a block can burn away 740 */ 741 public boolean isBurnable() { 742 if (!this.isBlock()) { 743 return false; 744 } 745 746 switch (this) { 747 case WOOD: 748 case LOG: 749 case LEAVES: 750 case LONG_GRASS: 751 case WOOL: 752 case YELLOW_FLOWER: 753 case RED_ROSE: 754 case TNT: 755 case BOOKSHELF: 756 case WOOD_STAIRS: 757 case FENCE: 758 case VINE: 759 case FENCE_GATE: 760 case WOOD_DOUBLE_STEP: 761 case WOOD_STEP: 762 case SPRUCE_WOOD_STAIRS: 763 case BIRCH_WOOD_STAIRS: 764 case JUNGLE_WOOD_STAIRS: 765 case HAY_BLOCK: 766 case COAL_BLOCK: 767 case LEAVES_2: 768 case LOG_2: 769 case CARPET: 770 case DOUBLE_PLANT: 771 case ACACIA_STAIRS: 772 case DARK_OAK_STAIRS: 773 case SPRUCE_FENCE_GATE: 774 case BIRCH_FENCE_GATE: 775 case JUNGLE_FENCE_GATE: 776 case DARK_OAK_FENCE_GATE: 777 case ACACIA_FENCE_GATE: 778 case SPRUCE_FENCE: 779 case BIRCH_FENCE: 780 case JUNGLE_FENCE: 781 case DARK_OAK_FENCE: 782 case ACACIA_FENCE: 783 return true; 784 default: 785 return false; 786 } 787 } 788 789 /** 790 * Returns whether or not the item is a weapon 791 * 792 * @return {@code true} if it is a weapon 793 */ 794 public boolean isWeapon() { 795 if (isBlock()) return false; 796 797 switch (this) { 798 case WOOD_SWORD: 799 case STONE_SWORD: 800 case GOLD_SWORD: 801 case IRON_SWORD: 802 case DIAMOND_SWORD: 803 case BOW: 804 return true; 805 default: 806 return false; 807 } 808 } 809 810 /** 811 * Gets if a block is affected by gravity, and falls when you place it. 812 * 813 * @return True if the block is affected by gravity, and falls when you place it. 814 */ 815 public boolean hasGravity() { 816 if (!this.isBlock()) { 817 return false; 818 } 819 820 switch (this) { 821 case SAND: 822 case ANVIL: 823 case GRAVEL: 824 return true; 825 default: 826 return false; 827 } 828 } 829 830 /** 831 * Returns the break sound of the block 832 * 833 * @return The break sound of the block 834 */ 835 public SoundEffectType breakSound(){ 836 if(!this.isBlock()){ 837 return null; 838 } 839 840 switch(this){ 841 case WOOL: 842 case CACTUS: 843 case CAKE_BLOCK: 844 case CARPET: 845 return SoundEffectType.DIG_CLOTH; 846 case GRASS: 847 case SPONGE: 848 case LEAVES: 849 case LEAVES_2: 850 case LONG_GRASS: 851 case SAPLING: 852 case DEAD_BUSH: 853 case YELLOW_FLOWER: 854 case RED_ROSE: 855 case DOUBLE_PLANT: 856 case BROWN_MUSHROOM: 857 case RED_MUSHROOM: 858 case TNT: 859 case CROPS: 860 case SUGAR_CANE_BLOCK: 861 case VINE: 862 case MYCEL: 863 case WATER_LILY: 864 case HAY_BLOCK: 865 return SoundEffectType.DIG_GRASS; 866 case DIRT: 867 case GRAVEL: 868 case SOIL: 869 case CLAY: 870 return SoundEffectType.DIG_GRAVEL; 871 case SAND: 872 case SOUL_SAND: 873 return SoundEffectType.DIG_SAND; 874 case SNOW: 875 case SNOW_BLOCK: 876 return SoundEffectType.DIG_SNOW; 877 case WOOD: 878 case LOG: 879 case LOG_2: 880 case BED_BLOCK: 881 case BOOKSHELF: 882 case TORCH: 883 case FIRE: 884 case ACACIA_STAIRS: 885 case BIRCH_WOOD_STAIRS: 886 case DARK_OAK_STAIRS: 887 case JUNGLE_WOOD_STAIRS: 888 case SPRUCE_WOOD_STAIRS: 889 case WOOD_STAIRS: 890 case CHEST: 891 case WORKBENCH: 892 case LADDER: 893 case SIGN_POST: 894 case WALL_SIGN: 895 case LEVER: 896 case WOOD_PLATE: 897 case REDSTONE_TORCH_OFF: 898 case REDSTONE_TORCH_ON: 899 case FENCE: 900 case ACACIA_FENCE: 901 case BIRCH_FENCE: 902 case DARK_OAK_FENCE: 903 case JUNGLE_FENCE: 904 case SPRUCE_FENCE: 905 case ACACIA_FENCE_GATE: 906 case BIRCH_FENCE_GATE: 907 case DARK_OAK_FENCE_GATE: 908 case FENCE_GATE: 909 case JUNGLE_FENCE_GATE: 910 case SPRUCE_FENCE_GATE: 911 case PUMPKIN: 912 case PUMPKIN_STEM: 913 case MELON_BLOCK: 914 case MELON_STEM: 915 case JACK_O_LANTERN: 916 case DIODE_BLOCK_ON: 917 case DIODE_BLOCK_OFF: 918 case TRAP_DOOR: 919 case HUGE_MUSHROOM_1: 920 case HUGE_MUSHROOM_2: 921 case WOOD_STEP: 922 case WOOD_DOUBLE_STEP: 923 case COCOA: 924 case WOOD_BUTTON: 925 case GOLD_PLATE: 926 case IRON_PLATE: 927 case STONE_PLATE: 928 case REDSTONE_COMPARATOR_OFF: 929 case REDSTONE_COMPARATOR_ON: 930 case DAYLIGHT_DETECTOR: 931 case DAYLIGHT_DETECTOR_INVERTED: 932 case STANDING_BANNER: 933 case WALL_BANNER: 934 case ACACIA_DOOR: 935 case BIRCH_DOOR: 936 case DARK_OAK_DOOR: 937 case JUNGLE_DOOR: 938 case SPRUCE_DOOR: 939 case WOOD_DOOR: 940 case WOODEN_DOOR: 941 return SoundEffectType.DIG_WOOD; 942 case GLASS: 943 case ICE: 944 case PACKED_ICE: 945 case GLOWSTONE: 946 case PORTAL: 947 case STAINED_GLASS: 948 case THIN_GLASS: 949 case STAINED_GLASS_PANE: 950 case SEA_LANTERN: 951 return SoundEffectType.DIG_GLASS; 952 default: 953 return SoundEffectType.DIG_STONE; 954 } 955 } 956 957 public char asExtended () { 958 return (char) (this.idInt << 4); 959 } 960 961 /** 962 * Returns the place sound of the block 963 * 964 * @return The place sound of the block 965 */ 966 public SoundEffectType placeSound(){ 967 if(!this.isBlock()){ 968 return null; 969 } 970 971 switch(this){ 972 case CROPS: 973 case WATER_LILY: 974 case REDSTONE_WIRE: 975 case IRON_DOOR: 976 case NETHER_WARTS: 977 case BED_BLOCK: 978 case PUMPKIN_STEM: 979 case MELON_STEM: 980 case COCOA: 981 case WALL_BANNER: 982 case STANDING_BANNER: 983 case ACACIA_DOOR: 984 case BIRCH_DOOR: 985 case DARK_OAK_DOOR: 986 case JUNGLE_DOOR: 987 case SPRUCE_DOOR: 988 case WOOD_DOOR: 989 case WOODEN_DOOR: 990 return null; 991 case WOOL: 992 case CACTUS: 993 case CAKE_BLOCK: 994 case CARPET: 995 return SoundEffectType.DIG_CLOTH; 996 case GRASS: 997 case SPONGE: 998 case LEAVES: 999 case LEAVES_2: 1000 case LONG_GRASS: 1001 case SAPLING: 1002 case DEAD_BUSH: 1003 case YELLOW_FLOWER: 1004 case RED_ROSE: 1005 case DOUBLE_PLANT: 1006 case BROWN_MUSHROOM: 1007 case RED_MUSHROOM: 1008 case TNT: 1009 case SUGAR_CANE_BLOCK: 1010 case VINE: 1011 case MYCEL: 1012 case HAY_BLOCK: 1013 return SoundEffectType.DIG_GRASS; 1014 case DIRT: 1015 case GRAVEL: 1016 case SOIL: 1017 case CLAY: 1018 return SoundEffectType.DIG_GRAVEL; 1019 case SAND: 1020 case SOUL_SAND: 1021 return SoundEffectType.DIG_SAND; 1022 case SNOW: 1023 case SNOW_BLOCK: 1024 return SoundEffectType.DIG_SNOW; 1025 case WOOD: 1026 case LOG: 1027 case LOG_2: 1028 case BOOKSHELF: 1029 case TORCH: 1030 case FIRE: 1031 case ACACIA_STAIRS: 1032 case BIRCH_WOOD_STAIRS: 1033 case DARK_OAK_STAIRS: 1034 case JUNGLE_WOOD_STAIRS: 1035 case SPRUCE_WOOD_STAIRS: 1036 case WOOD_STAIRS: 1037 case CHEST: 1038 case WORKBENCH: 1039 case LADDER: 1040 case SIGN_POST: 1041 case WALL_SIGN: 1042 case LEVER: 1043 case WOOD_PLATE: 1044 case REDSTONE_TORCH_OFF: 1045 case REDSTONE_TORCH_ON: 1046 case FENCE: 1047 case ACACIA_FENCE: 1048 case BIRCH_FENCE: 1049 case DARK_OAK_FENCE: 1050 case JUNGLE_FENCE: 1051 case SPRUCE_FENCE: 1052 case ACACIA_FENCE_GATE: 1053 case BIRCH_FENCE_GATE: 1054 case DARK_OAK_FENCE_GATE: 1055 case FENCE_GATE: 1056 case JUNGLE_FENCE_GATE: 1057 case SPRUCE_FENCE_GATE: 1058 case PUMPKIN: 1059 case MELON_BLOCK: 1060 case JACK_O_LANTERN: 1061 case DIODE_BLOCK_ON: 1062 case DIODE_BLOCK_OFF: 1063 case TRAP_DOOR: 1064 case HUGE_MUSHROOM_1: 1065 case HUGE_MUSHROOM_2: 1066 case WOOD_STEP: 1067 case WOOD_DOUBLE_STEP: 1068 case WOOD_BUTTON: 1069 case GOLD_PLATE: 1070 case IRON_PLATE: 1071 case STONE_PLATE: 1072 case REDSTONE_COMPARATOR_OFF: 1073 case REDSTONE_COMPARATOR_ON: 1074 case DAYLIGHT_DETECTOR: 1075 case DAYLIGHT_DETECTOR_INVERTED: 1076 return SoundEffectType.DIG_WOOD; 1077 case GLASS: 1078 case ICE: 1079 case PACKED_ICE: 1080 case GLOWSTONE: 1081 case PORTAL: 1082 case STAINED_GLASS: 1083 case THIN_GLASS: 1084 case STAINED_GLASS_PANE: 1085 case SEA_LANTERN: 1086 return SoundEffectType.STEP_STONE; 1087 case ANVIL: 1088 return SoundEffectType.RANDOM_ANVIL_LAND; 1089 default: 1090 return SoundEffectType.DIG_STONE; 1091 } 1092 } 1093 1094 public boolean isFunctional(){ 1095 switch(this){ 1096 case DISPENSER: 1097 case NOTE_BLOCK: 1098 case BED_BLOCK: 1099 case CHEST: 1100 case WORKBENCH: 1101 case FURNACE: 1102 case BURNING_FURNACE: 1103 case LEVER: 1104 case WOOD_BUTTON: 1105 case STONE_BUTTON: 1106 case ACACIA_DOOR: 1107 case BIRCH_DOOR: 1108 case DARK_OAK_DOOR: 1109 case JUNGLE_DOOR: 1110 case SPRUCE_DOOR: 1111 case WOOD_DOOR: 1112 case WOODEN_DOOR: 1113 case TRAP_DOOR: 1114 case DIODE_BLOCK_OFF: 1115 case DIODE_BLOCK_ON: 1116 case ANVIL: 1117 case DROPPER: 1118 case ACACIA_FENCE_GATE: 1119 case BIRCH_FENCE_GATE: 1120 case DARK_OAK_FENCE_GATE: 1121 case FENCE_GATE: 1122 case JUNGLE_FENCE_GATE: 1123 case SPRUCE_FENCE_GATE: 1124 case HOPPER: 1125 case REDSTONE_COMPARATOR_ON: 1126 case REDSTONE_COMPARATOR_OFF: 1127 case ENCHANTMENT_TABLE: 1128 case TRAPPED_CHEST: 1129 case ENDER_CHEST: 1130 return true; 1131 default: 1132 return false; 1133 } 1134 } 1135 1136 public boolean canBeReplaced(){ 1137 switch(this){ 1138 case LONG_GRASS: 1139 case DEAD_BUSH: 1140 case SNOW: 1141 return true; 1142 default: 1143 return false; 1144 } 1145 } 1146 1147}