diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..49b7690 --- /dev/null +++ b/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..ef5dccf --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + HCF-Exem + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..3a21537 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/bin/balances.yml b/bin/balances.yml new file mode 100644 index 0000000..18e0854 --- /dev/null +++ b/bin/balances.yml @@ -0,0 +1 @@ +balances: {} diff --git a/bin/config.cdl b/bin/config.cdl new file mode 100644 index 0000000..c8a74cc --- /dev/null +++ b/bin/config.cdl @@ -0,0 +1,306 @@ +// HCF Configuration File +// Be sure to double-check your config +// Credits - Techcable's Configuration API + +// If the plugin should attempt to limit entities to reduce lag. +// currently what this does is allow only 25 entities in one chunk. +handleEntityLimiting = true + +// If arrows shot from a bow with infinity should be removed +// when they land to reduce entity lag. +removeInfinityArrowsOnLand = true + +// The maximum Beacon strength level +beaconStrengthLevelLimit = 1 + +// If boats should not be allowed to be placed on land. +disableBoatPlacementOnLand = true + +enderpearlGlitching { + // If this plugin should try and block Enderpearl glitching. + enabled = true + + // If the enderpearl should be refunded if the player was detected. + refund = true +} + +// If enderchests should be disabled. +disableEnderchests = true + +// If beds cannot be placed in the Nether. +preventPlacingBedsNether = false + +// Timezone to use for events and stuff +serverTimeZone = "America/New_York" + +// The speed at which items in furnaces cook, set to 1.0 for default. +furnaceCookSpeedMultiplier = 6.0 + +brewingSpeedMultiplier = 6.0 + +// If you should be able to bottle exp by crafting a glass bottle. +bottledExp = true + +// If you should be able to de-enchant books by right clicking enchant tables. +bookDeenchanting = true + +// If death signs should spawn upon deaths. +deathSigns = true + +// If death signs should thaw upon deaths. +deathLightning = true + +// The current number of the map. +mapNumber = 1 + +// If the server is in a kit map mode. +kitMap = false + +// If ally damage should be prevented or just warn the attacker. +preventAllyDamage = true + +economy { + // The amount of money a player starts off with. + startingBalance = 0 +} + +spawners { + // If players should not be able to break spawners in the Nether. + preventBreakingNether = true + + // If players should not be able to place spawners in the Nether. + preventPlacingNether = true +} + +expMultiplier { + // The multipliers to set for experience, set to 1.0 to normalise as vanilla. + global = 2.0 + fishing = 2.0 + smelting = 2.0 + lootingPerLevel = 1.5 + luckPerLevel = 1.5 + fortunePerLevel = 1.5 +} + +scoreboard { + sidebar { + // The title of the sidebar, use {MAP_NUMBER} as a + // placeholder with & as colour codes. + title = "&9&lMC-Market &7(Map {MAP_NUMBER})" + + // If this plugin utilises the sidebar. + enabled = true + } + + nametags { + // If this plugin will utilise nametags. + enabled = true + } +} + +combatlog { + // If this plugin will protect from combat-logging. + enabled = true + + // The ticks for when a combat logger NPC should despawn. + despawnDelayTicks = 900 +} + +warzone { + // The radius of the warzone. + radiusOverworld = 1000 + radiusNether = 1000 +} + +factions { + conquest { + // How much points should a faction lose when a player dies in Conquest. + pointLossPerDeath = 20 + + // How much points should a faction need to win Conquest. + requiredVictoryPoints = 300 + + // If negative points are possible during conquest. + allowNegativePoints = true + } + + roads { + // If players are allowed to claim next to roads + allowClaimsBesides = true + } + + // List of faction names that cannot be used. + disallowedFactionNames = [ + "EOTW", + "MOKU" + ] + + home { + // The time in seconds to teleport to faction home, -1 to disable, 0 for instant + teleportDelay { + NETHER = 30 + THE_END = -1 + NORMAL = 10 + } + + // The maximum height to set a faction home, use -1 to ignore this. + maxHeight = -1 + + // If faction homing in enemy territory should be allowed. + allowTeleportingInEnemyTerritory = true + } + + // Minimum amount of characters a faction name must be. + nameMinCharacters = 3 + + // Maximum amount of characters a faction name must be. + nameMaxCharacters = 15 + + // Maximum amount of members a faction can own. + maxMembers = 20 + + // Maximum amount of claims a faction can own. + maxClaims = 8 + + // Maximum amount of allies a faction can have. + maxAllies = 0 + + subclaim { + // The minimum characters a player can name a subclaim. + nameMinCharacters = 3 + + // The maximum characters a player can name a subclaim. + nameMaxCharacters = 16 + } + + dtr { + regenFreeze { + // The minutes for faction DTR regen freeze to + // end not including any multipliers, etc. + baseMinutes = 40 + + // How much longer the DTR freeze should be for factions with + // more members. Set to 0 to disable. + minutesPerMember = 2 + } + + // The minimum DTR a faction can have. + minimum = -50 + + // The maximum DTR a faction will regenerate to. + maximum = 6.5 + + // Time in milliseconds between a DTR update. + millisecondsBetweenUpdates = 45000 + + // The DTR again when DTR updates. + incrementBetweenUpdates = 0.1 + } + + relationColours { + // The nametag and chat colours to show for faction relations. + wilderness = "DARK_GREEN" + warzone = "RED" + teammate = "DARK_GREEN" + ally = "AQUA" + enemy = "RED" + road = "RED" + safezone = "GREEN" + archerTagged = "BLUE" + combatTag = "DARK_RED" + enderPearl = "LIGHT_PURPLE" + invincibility = "DARK_GREEN" + gapple = "DARK_PURPLE" + logout = "GREEN" + stuck = "GREEN" + teleport = "DARK_AQUA" + + } + + joinNewFactionDelaySeconds = 15 +} + +deathban { + // The regular deathban duration. + baseDurationMinutes = 60 + + // The seconds before kicking after showing the user + // the respawn screen from a deathban. + respawnScreenSecondsBeforeKick = 15 +} + +end { + // If the end should be opened. + open = true + + // The location of the spawn point when leaving end by End Portal. + exitLocation = "world,0.5,75,0.5,0,0" + + // If fire should be extinguished when leaving the end through an End Portal. + extinguishFireOnExit = true + + // If strength should be removed when entering the end through an End Portal. + removeStrengthOnEntrance = true +} + +eotw { + chatSymbolPrefix = " \u2605" + chatSymbolSuffix = "" + + // List of UUIDs that capped last maps EOTW. + lastMapCapperUuids = [ + ] +} + +// The maximum levels an enchantment can be. +enchantmentLimits = [ + "PROTECTION_ENVIRONMENTAL = 1", + "PROTECTION_FIRE = 3", + "SILK_TOUCH = 1", + "DURABILITY = 3", + "PROTECTION_EXPLOSIONS = 3", + "LOOT_BONUS_BLOCKS = 3", + "PROTECTION_PROJECTILE = 3", + "OXYGEN = 3", + "WATER_WORKER = 1", + "THORNS = 0", + "DAMAGE_ALL = 1", + "ARROW_KNOCKBACK = 1", + "KNOCKBACK = 0", + "FIRE_ASPECT = 0", + "LOOT_BONUS_MOBS = 3", + "LUCK = 3", + "ARROW_DAMAGE = 3", + "LURE = 3" +] + +// The maximum levels a potion can be brewed to. +potionLimits = [ + "STRENGTH = 0", + "INVISIBILITY = 1", + "REGEN = 0", + "WEAKNESS = 0", + "INSTANT_DAMAGE = 0", + "SLOWNESS = 1", + "POISON = 1" +] + +subclaimSigns { + // Protects against members that are not on the sign opening. + private = true + + // Protects against any non-officer opening. + captain = true + + // Protects against any non-leader opening. + leader = false + + // If subclaim protected objects should be protected from hopper + // items too, disabling this may increase performance. + hopperCheck = true +} + +whitelist { + // Changes the vanilla whitelist message. + message = "&cThe server is currently locked, try again soon." +} \ No newline at end of file diff --git a/bin/config.yml b/bin/config.yml new file mode 100644 index 0000000..e0055de --- /dev/null +++ b/bin/config.yml @@ -0,0 +1,778 @@ +revive-settings: + gold: + use: "hcf.revive.gold" + prefix: "&6[GOLD] " + name: "GOLD" + minutes-cooldown: 30 + seconds-cooldown: 1800 + platinum: + use: "hcf.revive.platinum" + prefix: "&b[PLATINUM] " + name: "PLATINUM" + minutes-cooldown: 60 + seconds-cooldown: 3600 + +revive-messages: + successfully-revived: "&cYou have successfully revived '%target%'" + broadcast: "&c%prefix% &8%player% &7used his %rank% rank to revive &8%target%" + cooldown: "%prefix% &eYou still have cooldown &7(%cooldown%&7) &efor revive %name%!" +chat: + use-protocol-lib: true + spam-cooldown: 5 + disabled: + millis: 0 + slowed: + millis: 0 + slowed-delay: 15 + alliance: + prefix: "\xa7b(Ally-Chat) %player%: %message%" + faction: + prefix: "\xa72(Team-Chat) %player%: %message%" + public: + prefix-faction: "\xa76[%tag%\xa76] %player%\xa77: \xa7f%message%" + prefix-no-faction: "%player%\xa77: \xa7f%message%" +warp-manager: + warp-delay-millis: 2000 +auto-save: + enabled: true + time: "15min" + command: "save-all" + message: "&cSaving all data has finished." +anvil-spam-fixer: + enabled: true + violation: 3 + messages: + flag: "&c%PLAYER% &chas been flagged for anvil spamming &8(&c%VELOCITY%&fVL&8) (perm: hcf.anvilspam.alert)" +kitmap-gui: + enabled: true + title: "&6&lHCF &c[Map 1]" + id-animation: + - 7 + - 8 + - 0 + - 15 + - 12 +kitmap-selector: + enabled: true +border: + worldBorder: 3000 + netherBorder: 1000 + endBorder: 1500 +border-messages: + no-bucket-fill: "&cYou cannot fill buckets past the border." + no-bucket-empty: "&cYou cannot empty buckets past the border." + no-blocks-place: "&cYou cannot place blocks past the border." + no-blocks-break: "&cYou cannot break blocks past the border." + border-no-go: "&cYou cannot go past the border." + border-portal-no-go: "&cThis portals travel location was over the border. It has been moved inwards." +death-messages: + combat-logger: "&8(&cCombat-Logger&8) &e%logger%&4[%logger-kills%] &ehas been slain by %killer%&4[%killer-kills%]" + causes: + block-explosion: "&c%player%&4[%player-kills%] &ewas blown to death." + contact: "&c%player%&4[%player-kills%] &ewas slain by a, a, a &a&lCactus&e?" + drowning: "&c%player%&4[%player-kills%] &edrowned." + entity-attack: + player: "&c%player%&4[%player-kills%] &ewas slain by &c%killer%" + player-item: "&c%player%&4[%player-kills%] &ewas slain by &c%killer%&4[%killer-kills%] &eusing &c%killer-hand%" + player-no-item: "&c%player%&4[%player-kills%] &ewas slain by &c%killer%&4[%killer-kills%]" + entity-explosion: "&c%player%&4[%player-kills%] &edied in a explosion." + fall: "&c%player%&4[%player-kills%] &ehit the ground to hard." + falling-block: "&c%player%&4[%player-kills%] &edied to a falling block." + fire: "&c%player%&4[%player-kills%] &eforgot to bring a Fire Resistance potion." + fire-tick: "&c%player%&4[%player-kills%] &eforgot to bring a Fire Resistance potion.." + lava: "&c%player%&4[%player-kills%] &eforgot to bring a Fire Resistance potion." + lightning: "&c%player%&4[%player-kills%] &ewas struck by &fLightning&e." + magic: "&c%player%&4[%player-kills%] &edied to a magic." + melting: "&c%player%&4[%player-kills%] &edied." + poison: "&c%player%&4[%player-kills%] &edied to a poison." + projectile: + unknown: "&c%player%&4[%player-kills%] &edied." + bow-item: "&c%player%&4[%player-kills%] &ewas shot by &c%killer%&4[%killer-kills%]" + bow-item-distance: "&c%player%&4[%player-kills%] &ewas shot by &c%killer%&4[%killer-kills%] &eusing &c%killer-hand% &efrom &9&l%distance% blocks." + starvation: "&c%player%&4[%player-kills%] &eforgot to pack some lunch and starved to death." + suffocation: "&c%player%&4[%player-kills%] &esuffocated in a wall." + suicide: "&c%player%&4[%player-kills%] &ekilled himself." + thorns: "&c%player%&4[%player-kills%] &edied." + void: "&c%player%&4[%player-kills%] &efell into the void." + wither: "&c%player%&4[%player-kills%] &ewhitered away." + unknown: "&c%player%&4[%player-kills%] &edied." + custom: "&c%player%&4[%player-kills%] &edied." +skygear: + enabled: true + spawntoken: + cooldown: 120 + endportaltoken: + cooldown: 120 + coordinates: + x: 1500 + y: 75 + z: 1500 +throwable-cobwebs: + cooldown: 30 + despawn-after: 5 + vector-multiplier: 2 + cobweb-name: "&3ThrowableCobweb" +glowstone-mountain: + enabled: true + regeneration: 72000 + location: '[world,24.50070339453891,72.0,137.55239634209465]' +glowstone-mountain-messages: + regenerated: "&5Glowstone Mountain has been regenerated." + disabled: "&cGlowstone mountain is disabled." + set-disabled: "&cYou have disabled the Glowstone Mountain!" + set-enabled: "&aYou have enabled the Glowstone Mountain!" + set-location: "&aYou have set the location of Glowstone Mountain!" + faction-show-location: "&eLocation: set location in config" + reloaded: "&aYou have reloaded the config." +configuration: + server-name: "MC-Market" + teamspeak: "ts.mcmarket.com" + store: "store.buycraft.com" + website: "www.website.com" + starting-balance: 250 + famous-subscribers: 2000 + famous-videos: 2 + famous-views: 1000 + youtube-subscribers: 1000 + youtube-videos: 2 + youtube-views: 500 + splash-potion-velocity: 2.0 + use-dtc: false +deathmessages: + enabled: false + deathmessage-format: "%player%&4[%kills%&4]" +event-utilities: + timezone: "Europe/Ljubljana" + auto-run-scheduler: + enabled: true + time: "3h" + run-command: "event start %event%" + event-list: + - "Stronghold" + - "Palace" + - "Citadel" + - "Fury" + koth: + faction-color: "&9&l" + win-command: "key eventkey KOTH %key% %player% 2" + citadel: + faction-color: "&5&l" + win-command: "key eventkey CITADEL %key% %player% 2" + palace: + faction-color: "&e&l" + cap-time: "25min" + win-command: "key eventkey PALACE %key% %player% 2" + conquest: + faction-color: "&9&l" + win-command: "key eventkey CONQUEST %key% %player% 2" + fury: + faction-color: "&9&l" + switch-time: "1min" + cap-time: "30s" + required-points: 100 + point-loss-per-death: 10 + win-command: "key eventkey FURY %key% %player% 2" +faction-utilities: + elevators: + minecart: + enabled: true + combat-usage: false + sign: + enabled: true + enemy-claim-usage: false + combat-usage: false + end-portal-faction: + deathban: false + safezone: false + player-faction: + dtr-loss-per-death: 1.0 + sotw: + auto-inventory: false +killstreaks: + enabled: true + broadcast-message: "&c&l%player% &ehas reached kill streak of &c&l%killstreak% &eand received &c&l%item%" + items: + DontRemoveThis: + name: "DontRemove" + command: "dont remove this its an example" + kills: 100000 +deathban: + deathban1: + permission: 'deathban.1' + time: 30m + deathban2: + permission: 'deathban.2' + time: 60m + deathban3: + permission: 'deathban.3' + time: 90m + deathban4: + permission: 'deathban.4' + time: 120m + deathban5: + permission: 'deathban.5' + time: 140m + deathban6: + permission: 'deathban.6' + time: 160m +classes: + class-equiped: + - '&bClass: &l%class% &7-->&a Enabled' + - '&bClass Info: www.website.com/%class%' + class-un-equiped: + - '&bClass: &l%class% &7-->&c Disabled' + archer: + enabled: true + use-colorful-armor: true + name: "Archer" + damage-percentage: 20 + speed-cooldown: 60 + equipment: + helmet: LEATHER_HELMET + chestplate: LEATHER_CHESTPLATE + leggings: LEATHER_LEGGINGS + boots: LEATHER_BOOTS + bard: + enabled: true + name: "Bard" + max-energy: 100 + energy-per-second: 1.0 + teammate-nearby: 25 + buff-cooldown: 10 + buff-duration: 5 + held-item-message: true + effect-message: + - '&7&m--------------------------------' + - ' &e&lEffect: %effect%' + - ' &e&lCost: %energycost%' + - '&7&m--------------------------------' + equipment: + helmet: GOLD_HELMET + chestplate: GOLD_CHESTPLATE + leggings: GOLD_LEGGINGS + boots: GOLD_BOOTS + miner: + enabled: true + name: "Miner" + invisibility-y: 30 + equipment: + helmet: IRON_HELMET + chestplate: IRON_CHESTPLATE + leggings: IRON_LEGGINGS + boots: IRON_BOOTS + rogue: + enabled: true + name: "Rogue" + speed-cooldown: 1 + jump-cooldown: 1 + equipment: + helmet: CHAINMAIL_HELMET + chestplate: CHAINMAIL_CHESTPLATE + leggings: CHAINMAIL_LEGGINGS + boots: CHAINMAIL_BOOTS + ghost: + enabled: true + name: "Ghost" + mode-cooldown: 48 + equipment: + helmet: CHAINMAIL_HELMET + chestplate: DIAMOND_CHESTPLATE + leggings: CHAINMAIL_LEGGINGS + boots: DIAMOND_BOOTS +classes-messages: + archer: + cannot-tag-archers: "&eYou cannot archer tag other archers." + speed-cooldown: "&cYou cannot use Archer speed for another &c&l%cooldown%" + bard: + cannot-equip-class: "&cYou cannot equip Bard Class whilst PVP Protected." + energy-announcer: "&b&lBard energy is now at: &a%energy%" + buff-used: "&eYou have just used &aBard Buff ðat cost you &l%cost% &eof your Energy" + buff-cooldown: "&cYou cannot use this Bard buff for another %cooldown% seconds." + buff-in-safezone: "&cYou may not use bard buffs in safe-zones." + no-enough-energy: "&cYou need at least &l%cost% &cenergy to use this Bard buff, whilst you only have %energy%." + ghost: + damage-near: "&eGhoster has taken damage in stealth mode near you: &7(20x20)" + cooldown: "&cYou cannot use Ghost mode for another %cooldown% seconds." + normal-mode: "&eYou are now in &aNormal &emode." + stealth-mode: "&eYou are now in &7Stealth &emode." + power-mode: "&eYou are now in &cPower &emode &7&o(5 seconds)&e." + miner: + invisibility-added: "&eMiner &6invisibility &ehas been added." + invisibility-removed: "&eMiner &6invisibility &ehas been removed." + rogue: + backstabbed-you: "&c%player% &ehas backstabbed you." + you-backstabbed: "&eYou have backstabbed &c%player%&e." + speed-cooldown: "&cYou cannot use Rogue speed for another %cooldown%." + jump-cooldown: "&cYou cannot use Rogue jump for another %cooldown%." +staffmode: + enabled: true + scoreboard-lines: true + items: + teleportation: + item: COMPASS + amount: 1 + data: 0 + name: "&bTeleport Compass" + lore: + - "&7Right click block: Move through" + - "&7Left click: Move to block in line of sight" + slot: 0 + inspection: + item: BOOK + amount: 1 + data: 0 + name: "&bInspection Tool" + lore: + - "&7Right click to inspect player inventory" + slot: 1 + freeze: + item: ICE + amount: 1 + data: 0 + name: "&bFreeze Player" + lore: + - "&7Right click to freeze player" + slot: 4 + worldedit: + item: WOOD_AXE + amount: 1 + data: 0 + name: "&bWorldEdit Wand" + lore: + - "&7Use this to change blocks" + slot: 2 + xrayer-gui: + item: DIAMOND_PICKAXE + amount: 1 + data: 0 + name: "&bXrayer Gui" + lore: + - "&7Right click to open inventory with miners" + slot: 6 + random-teleportation: + item: RECORD_10 + amount: 1 + data: 0 + name: "&bRandom Teleport" + lore: + - "&7Right click to random teleport" + slot: 8 + staff-gui: + item: SKULL_ITEM + amount: 1 + data: 3 + name: "&bOnline Staff" + lore: + - "&7Right click to random teleport" + slot: 3 + vanish-enabled: + item: INK_SACK + amount: 1 + data: 10 + name: "&bVanished: &aTrue" + lore: + - "&7Right click to disable vanish" + slot: 7 + vanish-disabled: + item: INK_SACK + amount: 1 + data: 8 + name: "&bVanished: &cFalse" + lore: + - "&7Right click to enable vanish" + slot: 7 +scoreboard: + archer-timer: "Archer Mark" + archer-time: "10s" + archer-color: "&e&l" + combat-timer: "Spawn Tag" + combat-time: "30s" + combat-color: "&c&l" + enderpearl-timer: "Enderpearl" + enderpearl-time: "16s" + enderpearl-color: "&3&l" + gapple-timer: "Golden Apple" + gapple-time: "6h" + gapple-color: "&6&l" + apple-timer: "Apple" + apple-time: "30s" + apple-color: "&c&l" + warmup-timer: "Warmup" + warmup-color: "&a&l" + home-timer: "Home" + home-time: "10s" + home-color: "&9&l" + logout-timer: "Logout" + logout-time: "25s" + logout-color: "&4&l" + pvp-timer: "PvP Timer" + pvp-time: "1h" + pvp-color: "&a&l" + stuck-timer: "Stuck" + stuck-time: "3min" + stuck-color: "&4&l" + koth-color: "&9&l" + palace-color: "&6&l" + dtc-color: "&2&l" + focus-nametag-color: "&5&l" +scoreboard-lines: + bars: true + kitmap: + statistics: "&3&lStatistics" + balance: " &7\xbb &bBalance&7: &f%balance%" + kills: " &7\xbb &bKills&7: &f%kills%" + deaths: " &7\xbb &bDeaths&7: &f%deaths%" + killstreaks: " &7\xbb &bKillStreak&7: &f%killstreak%" + class-name: "&e&lClass&7: &c%class%" + stattrak: " &8\xbb &3&lStatTrak&7: &c%kills%" + cobwebs: " &8\xbb &6&lCobwebs&7: &c%cooldown%" + destroy-the-core: "&2&l%dtc-name%&7: &a%points%/%maxpoints%" + miner: + diamonds: " &6» &bDiamonds&7: &c%diamonds%" + cobble-enabled: " &6» &bCobble&7: &aTrue" + cobble-disabled: " &6» &bCobble&7: &cFalse" + invisibility-enabled: " &6» &bInvisible&7: &aTrue" + invisibility-disabled: " &6» &bInvisible&7: &cFalse" + bard: + buff-delay: "&a&lBuff Delay&7: &c%cooldown%" + bard-energy: "&b&lBard Energy&7: &c%energy%" + archer: + speed-cooldown: " &6» &eSpeed&7: &c%cooldown%" + rogue: + speed-cooldown: " &6» &eSpeed&7: &c%cooldown%" + jump-cooldown: " &6» &eJump&7: &c%cooldown%" + ghost: + normal-mode: "&aNormal" + stealth-mode: "&7Stealth" + power-mode: "&c&lPower" + active-mode: " &6\xbb &eMode&7: %mode%" + cooldown: " &6\xbb &eCooldown&7: &c%cooldown%" + staff-mode: + vanish-enabled: " &6%doublearrow% &eVanished&7: &aTrue" + vanish-disabled: " &6%doublearrow% &eVanished&7: &cFalse" + chat-mode-staff: " &6%doublearrow% &eChat&7: &aStaffChat" + chat-mode-global: " &6%doublearrow% &eChat&7: &cGlobalChat" + online: " &6%doublearrow% &eOnline&7: &c%online%" + ticks-per-second: " &6%doublearrow% &eTPS&7: &c%tps%" + eotw: + beginning: " &8» &cEOTW begins in&7: &c%time%" + cappable: " &8» &cCappable in&7: &c%time%" + sotw: + title: "&a&lStart of the World" + time-left: " &8» &c%time%" + fury: + title: "&6&lFury Event &7(%fury%)" + cap-time: "&e%formattedtime%" + switch-time: "&e%switchtime%" + leaderboard: "&6%count%. &e%faction%&7: &e%points% %difference%" +cmd-messages: + no-permission: "&cYou don't have access to this command." + join-message: + - '&7&m%line%' + - '&eWelcome to %title%' + - " &6\xbb &eFactions Size: &7%factionsinfo%" + - " &6\xbb &eMap Kit: &7Protection: %protection% / Sharpness: %sharpness%" + - " &6\xbb &eTeamspeak: &7%teamspeak%" + - " &6\xbb &eWebsite: &7%website%" + - '&7&m%line%' + - '&m' + cobble-disabled: "&7You have disabled cobble picking." + cobble-enabled: "&7You have enabled cobble picking." + coordinates: + - '&7&m--------------------------------' + - ' &e&lUse config.yml to edit coordinations' + - '&7&m--------------------------------' + focus-no-yourself: "&7You can't focus yourself!" + focus-no-faction: "&7You are not in a team!" + focus-target-no-faction: "&7Target is not in a team!" + focus-player-not-online: "&cThat player is not online." + focused-target: "&b&l%target% &7has been focused by &b&l%player%" + hidestaff-show: "&aYou will now be able to see the Staff." + hidestaff-hide: "&cYou will now not be able to see the Staff." + unfocused-target: "&b&l%player% &7has unfocused %target%." + logout-started: "&cYou are &4&lLoging out &cin 30 seconds.." + logout-already-active: "&cYour &4&lLogout &ctimer is already active." + mobdrops-enabled: "&7You have enabled mobdrops picking." + mobdrops-disabled: "&7You have disabled mobdrops picking." + playtime: "&6%target% &ehas been playing for &6%time% ðis map." + staffmode-enabled: "&eYou have enabled &6StaffMode" + staffmode-disabled: "&eYou have disabled &6StaffMode" + staffrevive-target-not-deathbanned: "&c%target% is not deathbanned" + staffrevive-target-revived: "&c%target% &ehas been revived." + request-cooldown: "&cYou still have cooldown %time% for using request" + request-message: "&7[REQUEST] &6&l%player% &chas requested help: &6&l%message%" + report-cooldown: "&cYou still have cooldown for %time%" + report-no-reason: "&cPlease specify reason." + report-message: "&c&lREPORT > &6%reporter% &chas reported &6%hacker% &cfor &6%reason%" + alert-message: "&c&lALERT > %message%" + feed-message: "&eYou have fed yourself" + flight-enabled: "&eYou have enabled your flight." + flight-disabled: "&eYou have disabled your flight." + freeze-no-yourself: "&cYou cannot freeze yourself" + freeze-no-staffmember: "&cYou cannot freeze staffmember." + freeze-player-not-found: "&cPlayer named %target% was not found." + freeze-message: + - "&8&m%line%" + - "" + - "" + - "&6You have been &cFROZEN." + - "&6Join our &cteamspeak, you have 3 minutes." + - "" + - "" + - "&8&m%line%" + invsee-player-not-found: "&cPlayer not found." + invsee-error: "&cERROR: You cannot modify inventory of player that are same or higher ranks than you." + list-message: "&cThere is currently %onlineplayers% online players out of %maxplayers%" + lff-message: + - '&7&m--------------------------------' + - '&m' + - '&6%player% &eis looking to join &6&lFACTION' + - '&eYou can also use placeholder %playerdisplayname%!' + - '&7&m--------------------------------' + removeperm-message: "&aSuccessfully removed %target%'s permissions!" + reset-reclaim-message: "&cYou have succesfully reset %target%'s reclaim settings." + reclaim-already: "&cYou have already reclaimed your donator perks!" + reclaim-no-rank: "&cYou do not have anything to reclaim!" + revive-broadcast: "&7 » &c&l%player% &eused their Diamond rank to revive %target%" + revive2-broadcast: "&7 » &c&l%player% &eused their Gold rank to revive %target%" + rename-message: "&aSuccessfully renamed item to: %name%" + panic-message: + - "&8&m----------------" + - "" + - "&4&l%player% &chas requested Panic Assistance!" + - "" + - "&8&m----------------" + spawn-teleport-message: "&aYou have been teleported to Spawn." + spawner-received: "&7You have received &c%spawner% spawner." + teleport-top-message: "&cYou have been teleported to the top." + vanish-enabled: "&7You have enabled your vanish mode." + vanish-disabled: "&7You have disabled your vanish mode." + lives-check-deathban: "&c%target% is not deathbanned." + lives-clear-deathbans: "&aAll deathbans have been successfully wipped." + lives-revive-not-deathbanned: "&c%target% is not deathbanned." + lives-revive-kitmap-on: "&cYou cannot revive players during KitMap" + lives-revive-eotw-on: "&cYou cannot revive players during End of the World" + lives-revive-enemy: "&cYou have used one life to revive:&r %target%" + lives-revive-teammate: "&cYou have used one life to revive:&r %target%" + lives-set-error: "&c%argument% is not a number." + lives-set-message: "&cYou have set %target%'s lives to %amount%" + bed-bombing-portal: "&cYou may not bedbomb near portal" + book-deenchant: "&eYou have reversed book's form." + crowbar-error: "&eYou can only use Crowbar in overworld." + crowbar-spawner-error: "This Crowbar has no more Spawner uses." + crowbar-endportal-error: "This Crowbar has no more Endportal uses." + deathban-eotw: "&cThanks for playing on our Map 1" + deathban-kick: "&cDeathbanned for %remaining% (%reason%)" + deathban-active: "&cYou have died because %reason% at %location% (%remaining%)" + deathban-active-with-lives: "&cYou have died because %reason% at %location% (%remaining%) You have %lives% lives, reconnect in %livesdelay%" + deathban-used-life: "You have used life to bypass deathban, you have now %lives% lives." + safezone-enderpearl-error: "&cYou may not pearl into the Safezones, your pearl has been refunded." + safezone-attack-error: "&cYou cannot attack players in Safezone" + safezone-out-attack-error: "&cYou cannot attack players that are in Safezone" + staff-connected: "&a&lStaff Online: &f%player%" + staff-disconnected: "&a&lStaff Offline: &f%player%" + subclaim-already-placed: "&cThere is already subclaim on this block: %block%" + subclaim-player-error: "&cSubclaim requires at least one name inserted." + subclaim-leader-error: "&cOnly leader can create LEADER subclaims." + sotw-start-error: "%argument% &cis not valid duration" + sotw-already-active: "&cSOTW is already active, /sotw cancel to end it." + sotw-started: "&cYou have started SOTW for the %time%" + sotw-start: + - "&aStart of the world has started &7(%time%)" + sotw-end: + - "&cStart of the world has ended. &4&lGOOD LUCK TO EVERYONE!" + void-fix-message: "&aYou were saved from falling in void in Overworld." + eotw-started: "&4&LEOTW &chas started." + eotw-claim-error: "&cYou cannot claim during EOTW." +faction-messages: + faction-show: + header: + - ' %faction% &7(%faction-online%/%faction-online-max%) &8- &aHome: &c%home% &7[%status%]' + allies: + - ' &eAllies: %allies%' + leader: + - ' &eLeader: %leader%' + coleaders: + - ' &eCo-Leaders: %co-leaders%' + captains: + - ' &eCaptains: %captains%' + members: + - ' &eMembers: %members%' + use-announcement: false + announcement: + - ' &eAnnouncement: &c%announcement%' + balance: + - ' &eBalance: &c%balance% &eKills: &c%factionkills%' + use-lives: false + lives: + - ' &eLives: &c%lives%' + koth-captures: + - ' &eKoth Captures: &c%koths%' + conquest-captures: + - ' &eConquest Captures: &c%conquests%' + citadel-captures: + - ' &eCitadel Captures: &c%citadels%' + fury-captures: + - ' &eFury Captures: &c%furies%' + palace-captures: + - ' &ePalace Captures: &c%palaces%' + use-founded: false + founded: + - ' &eFounded at: &c%founded%' + dtr: + - ' &eDeaths Until Raidable: [%dtr%/%maxdtr%]' + regen: + - ' &eTime Until Regen: &c%regen%' + faction-member-format: "%color%%name%&e[&a%kills%&e]" + ally-format: "%ally% &e[%ally-online%/%ally-online-max%]" + factionless-prefix: "*" + entering: '&eNow entering: %tofaction%&7(%deathbantofaction%&7)' + leaving: '&eNow leaving: %fromfaction%&7(%deathbanfromfaction%&7)' + created: "&eTeam %faction% &ehas been created by %player%" + disbanded: "&eTeam %faction% &ehas been disbanded by %player%" + renamed: "&eTeam %faction% &ehas been renamed to %factionnewname%" + member-online: "&a&lMember Online: &7%player%" + member-offline: "&c&lMember Offline: &7%player%" + use-default-help: true + custom-help: + - '&6&m--------------------------------------------------' + - '&9&lTeam Help' + - '&7&m--------------------------------------------------' + - '&9General commands' + - '&e/f create &7- Create a new faction' + - '&e/f join &7- Join to faction' + - '&e/f leave &7- Leave your current faction' + - '&e/f home &7- Teleport to your faction home' + - '&e/f d &7- Give money to your faction' + - '&m' + - '&9Information commands' + - '&e/f who &7- Display faction information' + - '&e/f map &7- Show nearby claims' + - '&e/f seechunk &7- Show chunk' + - '&e/f list &7- Show list of factions online' + - '&e/f top &7- Get top factions' + - '&m' + - '&9Moderator commands' + - '&e/f invite &7- Invite player to your faction' + - '&e/f deinvite &7- Revoke player invitation' + - '&e/f showinvites &7- List all pending invites' + - '&e/f kick &7- Kick player from faction' + - '&e/f title <#> &7Set title to player' + - '&e/f announce &7- Announce message to your faction' + - '&e/f claim &7- Start claim for your faction' + - '&e/f claimline <#> &7- Claim <#> line for your faction' + - '&e/f autoclaim &7- Start autoclam for your faction' + - '&e/f sethome &7- Sethome for your faction' + - '&e/f w &7- Take money from your faction' + - '&m' + - '&9Leader commands' + - '&e/f mod &7- Promote/Demote members/moderators' + - '&e/f unclaim &7- Unclaim land' + - '&e/f unclaimall &7- Unclaim all your lands' + - '&e/f tag &7- Rename your faction' + - '&e/f disband &7- Disband your faction' + - '&7&m--------------------------------------------------' + - '&6&m--------------------------------------------------' + warzone: + block-place-build-radius: 300 + requires-both-quadrants: false +kit-messages: + use-default-help: false + custom-help: + - '' + - '' + - '&3&lYou can edit this' + - '&c&lIN CONFIG!' +koth-messages: + controlling: "&cYou are now controlling &4%koth%" + controlling-lost: "&cYou are no longer controlling &4%koth%" + control-lost: "&8[&4&LKOTH&8] &4%player% &chas lost control of &4%koth% &c(%remaining%)" + someone-controlling: "&8[&4&LKOTH&8] &cSomeone is controlling &4%koth% &c(%remaining%)" +conquest-messages: + faction-required: "&cYou must be in faction to contest Conquest." + conquest-started: "&8[&3&lCONQUEST&8] &3%conquest% &9can now be contested." + attempting-control: "&8[&3&lCONQUEST&8] &9Attempting to control %conquest% &7(%remaining%)" + player-knocked: "&8[&3&lCONQUEST&8] &3%player% &9was knocked off %conquest%" + gained-points: "&8[&3&lCONQUEST&8] &3%faction% &9has gained 1 point for capturing %conquest% &7(%points%/%maxpoints%)" + lost-points: "&8[&3&lCONQUEST&8] &3%faction% &9has lost %deathpoints% because %player% died &7(%points%/%maxpoints%)" +citadel-messages: + controlling: "&dYou are now controlling &5%citadel%" + controlling-lost: "&dYou are no longer controlling &5%citadel%" + control-lost: "&8[&5&lCitadel&8] &5%player% &dhas lost control of &5%citadel% &d(%remaining%)" + someone-controlling: "&8[&5&lCitadel&8] &dSomeone is controlling 5%citadel% &d(%remaining%)" +palace-messages: + controlling: "&eYou are now controlling &6%palace%" + controlling-lost: "&eYou are no longer controlling &6%palace%" + control-lost: "&8[&6&lPalace&8] &6%player% &ehas lost control of &6%palace% &e(%remaining%)" + someone-controlling: "&8[&6&lPalace&8] &eSomeone is controlling &6%palace% &e(%remaining%)" +fury-messages: + faction-required: "&cYou must be in faction to contest Fury." + fury-started: "&6&lFURY &8> &6%fury% &ecan now be contested." + capzone-switch: "&6&lFURY &8> &eCapzone has been switched. &6%capzone% &eis new capzone." + attempting-control: "&6&lFURY &8> &eAttempting to control %fury% &7(%remaining%)" + player-knocked: "&6&lFURY &8> &e%player% &6was knocked off %fury%" + gained-points: "&6&lFURY &8> &6%faction% &ehas gained 1 point for capturing %fury% &7(%points%/%maxpoints%)" + lost-points: "&6&lFURY &8> &e%faction% &6has lost %deathpoints% because %player% died &7(%points%/%maxpoints%)" +miscellaneous-messages: + vanish-place-error: "&cYou cannot place blocks while you are vanished." + vanish-break-error: "&cYou cannot break blocks while you are vanished." + vanish-drop-item-error: "&cYou cannot drop items while you are in StaffMode." + wall-timer-notifier: "&cThis wall will prevent you from entering %claim% whilst you have your %timer% timer." +chest-configuration: + size: 9 + autosave: 10 + silentAutosave: false + clearOnDeath: false + dropOnDeath: false + permission-use-chest: "chest.use" + permission-others-chest: "chest.admin" + permission-bypass: "chest.bypass" + permission-clear-chest: "chest.clear" + permission-others-clear: "chest.admin" + permission-use-disposal: "disposal.use" + permission-savechest: "chest.savechest" + permission-savechests: "chest.savechests" + permission-use-workbench: "workbench.use" +chest-messages: + prefix: "&c[Chests]" + no-permission: "You don't have enough permissions." + no-safezone: "&cYou can only use chests in safezone." + gamemode-error: "&cYou cannot use chests in gamemode!" + cleared-chest: "&aSuccessfully clear your chest." +tablist: + player-info: "&ePlayer Info" + kill-counter: "&7Kills: " + death-counter: "&7Deaths: " + + location: "&eLocation" + + faction-info: "&eFaction Info" + dtr: "&eDTR: " + faction-online: "&eOnline: " + faction-balance: "&eBalance: $" + hq: "&eHQ: " + + next-koth: "&eNext KOTH" + none-scheduled: "&7None Scheduled" + + title: "&6&lMC-Market" + players-online: "&ePlayers Online" + faction-name-color: "&e" + + faction-list: "&eFaction List" + + end-portals: "&eEnd Portals:" + end-portals-coordinates: "&71000, 1000" + end-portals-quadrants: "&7in each quadrant" + + kit: "&eKit:" + kit-info: "&7Prot 1, Sharp 1" + + border: "&eBorder:" + border-info: "&73000" + + online-players: "&ePlayers Online:" + online-players-info: "&7%online-players%" + + citadel-cappers: "&eCitadel Cappers:" + citadel-cappers-info: "&7NoLimit" \ No newline at end of file diff --git a/bin/event-schedules.txt b/bin/event-schedules.txt new file mode 100644 index 0000000..92fb6ce --- /dev/null +++ b/bin/event-schedules.txt @@ -0,0 +1,2 @@ +# year,month,day,hour,minute:eventName (24 hour clock) +#2017,08,25,03,30,PM:Pagoda This would run event named 'Pagoda' at 3:30AM on the 25th of August, 2017. diff --git a/bin/faction-users.yml b/bin/faction-users.yml new file mode 100644 index 0000000..bf82e98 --- /dev/null +++ b/bin/faction-users.yml @@ -0,0 +1 @@ +users: {} diff --git a/bin/factions.yml b/bin/factions.yml new file mode 100644 index 0000000..10bc293 --- /dev/null +++ b/bin/factions.yml @@ -0,0 +1 @@ +factions: {} diff --git a/bin/items.csv b/bin/items.csv new file mode 100644 index 0000000..56c277d --- /dev/null +++ b/bin/items.csv @@ -0,0 +1,7449 @@ +#version: TeamCity +#If you change this file, it will not be automatically updated after the next release. +#item,id,metadata +stone,1,0 +sstone,1,0 +smoothstone,1,0 +rock,1,0 +grass,2,0 +greendirt,2,0 +greenearth,2,0 +greenland,2,0 +dirt,3,0 +earth,3,0 +land,3,0 +grasslessdirt,3,1 +grasslessearth,3,1 +grasslessland,3,1 +podzol,3,2 +cobblestone,4,0 +cstone,4,0 +cobble,4,0 +wood,5,0 +plank,5,0 +woodenplank,5,0 +woodplank,5,0 +wplank,5,0 +plankwooden,5,0 +plankwood,5,0 +plankw,5,0 +oakplank,5,0 +oakwoodenplank,5,0 +oakwoodplank,5,0 +oakwplank,5,0 +oakplankwooden,5,0 +oakplankwood,5,0 +oakplankw,5,0 +oplank,5,0 +owoodenplank,5,0 +owoodplank,5,0 +owplank,5,0 +oplankwooden,5,0 +oplankwood,5,0 +oplankw,5,0 +pineplank,5,1 +pinewoodenplank,5,1 +pinewoodplank,5,1 +pinewplank,5,1 +pineplankwooden,5,1 +pineplankwood,5,1 +pineplankw,5,1 +pplank,5,1 +pwoodenplank,5,1 +pwoodplank,5,1 +pwplank,5,1 +pplankwooden,5,1 +pplankwood,5,1 +pplankw,5,1 +darkplank,5,1 +darkwoodenplank,5,1 +darkwoodplank,5,1 +darkwplank,5,1 +darkplankwooden,5,1 +darkplankwood,5,1 +darkplankw,5,1 +dplank,5,1 +dwoodenplank,5,1 +dwoodplank,5,1 +dwplank,5,1 +dplankwooden,5,1 +dplankwood,5,1 +dplankw,5,1 +spruceplank,5,1 +sprucewoodenplank,5,1 +sprucewoodplank,5,1 +sprucewplank,5,1 +spruceplankwooden,5,1 +spruceplankwood,5,1 +spruceplankw,5,1 +splank,5,1 +swoodenplank,5,1 +swoodplank,5,1 +swplank,5,1 +splankwooden,5,1 +splankwood,5,1 +splankw,5,1 +birchplank,5,2 +birchwoodenplank,5,2 +birchwoodplank,5,2 +birchwplank,5,2 +birchplankwooden,5,2 +birchplankwood,5,2 +birchplankw,5,2 +bplank,5,2 +bwoodenplank,5,2 +bwoodplank,5,2 +bwplank,5,2 +bplankwooden,5,2 +bplankwood,5,2 +bplankw,5,2 +lightplank,5,2 +lightwoodenplank,5,2 +lightwoodplank,5,2 +lightwplank,5,2 +lightplankwooden,5,2 +lightplankwood,5,2 +lightplankw,5,2 +lplank,5,2 +lwoodenplank,5,2 +lwoodplank,5,2 +lwplank,5,2 +lplankwooden,5,2 +lplankwood,5,2 +lplankw,5,2 +whiteplank,5,2 +whitewoodenplank,5,2 +whitewoodplank,5,2 +whitewplank,5,2 +whiteplankwooden,5,2 +whiteplankwood,5,2 +whiteplankw,5,2 +wwoodenplank,5,2 +wwoodplank,5,2 +wwplank,5,2 +wplankwooden,5,2 +wplankwood,5,2 +wplankw,5,2 +jungleplank,5,3 +junglewoodenplank,5,3 +junglewoodplank,5,3 +junglewplank,5,3 +jungleplankwooden,5,3 +jungleplankwood,5,3 +jungleplankw,5,3 +jplank,5,3 +jwoodenplank,5,3 +jwoodplank,5,3 +jwplank,5,3 +jplankwooden,5,3 +jplankwood,5,3 +jplankw,5,3 +forestplank,5,3 +forestwoodenplank,5,3 +forestwoodplank,5,3 +forestwplank,5,3 +forestplankwooden,5,3 +forestplankwood,5,3 +forestplankw,5,3 +fplank,5,3 +fwoodenplank,5,3 +fwoodplank,5,3 +fwplank,5,3 +fplankwooden,5,3 +fplankwood,5,3 +fplankw,5,3 +acaciaplank,5,4 +acaciawoodenplank,5,4 +acaciawoodplank,5,4 +acaciawplank,5,4 +acaciaplankwooden,5,4 +acaciaplankwood,5,4 +acaciaplankw,5,4 +aplank,5,4 +awoodenplank,5,4 +awoodplank,5,4 +awplank,5,4 +aplankwooden,5,4 +aplankwood,5,4 +aplankw,5,4 +darkoakplank,5,5 +darkoakwoodenplank,5,5 +darkoakwoodplank,5,5 +darkoakwplank,5,5 +darkoakplankwooden,5,5 +darkoakplankwood,5,5 +darkoakplankw,5,5 +doakplank,5,5 +doakwoodenplank,5,5 +doakwoodplank,5,5 +doakwplank,5,5 +doakplankwooden,5,5 +doakplankwood,5,5 +doakplankw,5,5 +doplank,5,5 +dowoodenplank,5,5 +dowoodplank,5,5 +dowplank,5,5 +doplankwooden,5,5 +doplankwood,5,5 +doplankw,5,5 +sapling,6,0 +treesapling,6,0 +logsapling,6,0 +trunksapling,6,0 +woodsapling,6,0 +oaktreesapling,6,0 +oaklogsapling,6,0 +oaktrunksapling,6,0 +oakwoodsapling,6,0 +osapling,6,0 +otreesapling,6,0 +ologsapling,6,0 +otrunksapling,6,0 +owoodsapling,6,0 +darksapling,6,1 +darktreesapling,6,1 +darklogsapling,6,1 +darktrunksapling,6,1 +darkwoodsapling,6,1 +sprucesapling,6,1 +sprucetreesapling,6,1 +sprucelogsapling,6,1 +sprucetrunksapling,6,1 +sprucewoodsapling,6,1 +pinesapling,6,1 +pinetreesapling,6,1 +pinelogsapling,6,1 +pinetrunksapling,6,1 +pinewoodsapling,6,1 +dsapling,6,1 +dtreesapling,6,1 +dlogsapling,6,1 +dtrunksapling,6,1 +dwoodsapling,6,1 +ssapling,6,1 +streesapling,6,1 +slogsapling,6,1 +strunksapling,6,1 +swoodsapling,6,1 +psapling,6,1 +ptreesapling,6,1 +plogsapling,6,1 +ptrunksapling,6,1 +pwoodsapling,6,1 +birchsapling,6,2 +birchtreesapling,6,2 +birchlogsapling,6,2 +birchtrunksapling,6,2 +birchwoodsapling,6,2 +lightsapling,6,2 +lighttreesapling,6,2 +lightlogsapling,6,2 +lighttrunksapling,6,2 +lightwoodsapling,6,2 +whitesapling,6,2 +whitetreesapling,6,2 +whitelogsapling,6,2 +whitetrunksapling,6,2 +whitewoodsapling,6,2 +bsapling,6,2 +btreesapling,6,2 +blogsapling,6,2 +btrunksapling,6,2 +bwoodsapling,6,2 +lsapling,6,2 +ltreesapling,6,2 +llogsapling,6,2 +ltrunksapling,6,2 +lwoodsapling,6,2 +wsapling,6,2 +wtreesapling,6,2 +wlogsapling,6,2 +wtrunksapling,6,2 +wwoodsapling,6,2 +junglesapling,6,3 +jungletreesapling,6,3 +junglelogsapling,6,3 +jungletrunksapling,6,3 +junglewoodsapling,6,3 +forestsapling,6,3 +foresttreesapling,6,3 +forestlogsapling,6,3 +foresttrunksapling,6,3 +forestwoodsapling,6,3 +jsapling,6,3 +jtreesapling,6,3 +jlogsapling,6,3 +jtrunksapling,6,3 +jwoodsapling,6,3 +fsapling,6,3 +ftreesapling,6,3 +flogsapling,6,3 +ftrunksapling,6,3 +fwoodsapling,6,3 +acaciasapling,6,4 +acaciatreesapling,6,4 +acacialogsapling,6,4 +acaciatrunksapling,6,4 +acaciawoodsapling,6,4 +asapling,6,4 +atreesapling,6,4 +alogsapling,6,4 +atrunksapling,6,4 +awoodsapling,6,4 +darkoaksapling,6,5 +darkoaktreesapling,6,5 +darkoaklogsapling,6,5 +darkoaktrunksapling,6,5 +darkoakwoodsapling,6,5 +doaksapling,6,5 +doaktreesapling,6,5 +doaklogsapling,6,5 +doaktrunksapling,6,5 +dosapling,6,5 +dowoodsapling,6,5 +dotreesapling,6,5 +dologsapling,6,5 +dotrunksapling,6,5 +bedrock,7,0 +oprock,7,0 +opblock,7,0 +adminblock,7,0 +adminrock,7,0 +adminium,7,0 +water,8,0 +stationarywater,9,0 +stillwater,9,0 +swater,9,0 +lava,10,0 +stationarylava,11,0 +stilllava,11,0 +slava,11,0 +sand,12,0 +redsand,12,1 +rsand,12,1 +gravel,13,0 +goldore,14,0 +oregold,14,0 +gore,14,0 +oreg,14,0 +ogold,14,0 +goldo,14,0 +ironore,15,0 +oreiron,15,0 +irono,15,0 +oiron,15,0 +steelore,15,0 +oresteel,15,0 +steelo,15,0 +osteel,15,0 +iore,15,0 +orei,15,0 +sore,15,0 +ores,15,0 +coalore,16,0 +orecoal,16,0 +coalo,16,0 +ocoal,16,0 +core,16,0 +tree,17,0 +log,17,0 +trunk,17,0 +oak,17,0 +oaktree,17,0 +oaklog,17,0 +oaktrunk,17,0 +oakwood,17,0 +otree,17,0 +olog,17,0 +otrunk,17,0 +owood,17,0 +pine,17,1 +pinetree,17,1 +pinelog,17,1 +pinetrunk,17,1 +pinewood,17,1 +darktree,17,1 +darklog,17,1 +darktrunk,17,1 +darkwood,17,1 +spruce,17,1 +sprucetree,17,1 +sprucelog,17,1 +sprucetrunk,17,1 +sprucewood,17,1 +dtree,17,1 +dlog,17,1 +dtrunk,17,1 +dwood,17,1 +stree,17,1 +slog,17,1 +strunk,17,1 +swood,17,1 +ptree,17,1 +plog,17,1 +ptrunk,17,1 +pwood,17,1 +birch,17,2 +birchtree,17,2 +birchlog,17,2 +birchtrunk,17,2 +birchwood,17,2 +whitetree,17,2 +whitelog,17,2 +whitetrunk,17,2 +whitewood,17,2 +lighttree,17,2 +lightlog,17,2 +lighttrunk,17,2 +lightwood,17,2 +btree,17,2 +blog,17,2 +btrunk,17,2 +bwood,17,2 +wtree,17,2 +wlog,17,2 +wtrunk,17,2 +wwood,17,2 +ltree,17,2 +llog,17,2 +ltrunk,17,2 +lwood,17,2 +jungletree,17,3 +junglelog,17,3 +jungletrunk,17,3 +junglewood,17,3 +jungle,17,3 +forest,17,3 +foresttree,17,3 +forestlog,17,3 +foresttrunk,17,3 +forestwood,17,3 +jtree,17,3 +jlog,17,3 +jtrunk,17,3 +jwood,17,3 +ftree,17,3 +flog,17,3 +ftrunk,17,3 +fwood,17,3 +leaves,18,0 +leaf,18,0 +treeleaves,18,0 +logleaves,18,0 +trunkleaves,18,0 +woodleaves,18,0 +oakleaves,18,0 +oakleaf,18,0 +oleaves,18,0 +oleaf,18,0 +oaktreeleaves,18,0 +oaklogleaves,18,0 +oaktrunkleaves,18,0 +oakwoodleaves,18,0 +otreeleaves,18,0 +ologleaves,18,0 +otrunkleaves,18,0 +owoodleaves,18,0 +treeleaf,18,0 +logleaf,18,0 +trunkleaf,18,0 +woodleaf,18,0 +oaktreeleaf,18,0 +oaklogleaf,18,0 +oaktrunkleaf,18,0 +oakwoodleaf,18,0 +otreeleaf,18,0 +ologleaf,18,0 +otrunkleaf,18,0 +owoodleaf,18,0 +pineleaves,18,1 +pineleaf,18,1 +pleaves,18,1 +pleaf,18,1 +pinetreeleaves,18,1 +pinelogleaves,18,1 +pinetrunkleaves,18,1 +pinewoodleaves,18,1 +ptreeleaves,18,1 +plogleaves,18,1 +ptrunkleaves,18,1 +pwoodleaves,18,1 +spruceleaves,18,1 +spruceleaf,18,1 +sleaves,18,1 +sleaf,18,1 +sprucetreeleaves,18,1 +sprucelogleaves,18,1 +sprucetrunkleaves,18,1 +sprucewoodleaves,18,1 +streeleaves,18,1 +slogleaves,18,1 +strunkleaves,18,1 +swoodleaves,18,1 +darkleaves,18,1 +darkleaf,18,1 +dleaves,18,1 +dleaf,18,1 +darktreeleaves,18,1 +darklogleaves,18,1 +darktrunkleaves,18,1 +darkwoodleaves,18,1 +dtreeleaves,18,1 +dlogleaves,18,1 +dtrunkleaves,18,1 +dwoodleaves,18,1 +sprucetreeleaf,18,1 +sprucelogleaf,18,1 +sprucetrunkleaf,18,1 +sprucewoodleaf,18,1 +streeleaf,18,1 +slogleaf,18,1 +strunkleaf,18,1 +swoodleaf,18,1 +pinetreeleaf,18,1 +pinelogleaf,18,1 +pinetrunkleaf,18,1 +pinewoodleaf,18,1 +ptreeleaf,18,1 +plogleaf,18,1 +ptrunkleaf,18,1 +pwoodleaf,18,1 +darktreeleaf,18,1 +darklogleaf,18,1 +darktrunkleaf,18,1 +darkwoodleaf,18,1 +dtreeleaf,18,1 +dlogleaf,18,1 +dtrunkleaf,18,1 +dwoodleaf,18,1 +birchleaves,18,2 +birchleaf,18,2 +bleaves,18,2 +bleaf,18,2 +birchtreeleaves,18,2 +birchlogleaves,18,2 +birchtrunkleaves,18,2 +birchwoodleaves,18,2 +btreeleaves,18,2 +blogleaves,18,2 +btrunkleaves,18,2 +bwoodleaves,18,2 +lightleaves,18,2 +lightleaf,18,2 +lleaves,18,2 +lleaf,18,2 +lighttreeleaves,18,2 +lightlogleaves,18,2 +lighttrunkleaves,18,2 +lightwoodleaves,18,2 +ltreeleaves,18,2 +llogleaves,18,2 +ltrunkleaves,18,2 +lwoodleaves,18,2 +whiteleaves,18,2 +whiteleaf,18,2 +wleaves,18,2 +wleaf,18,2 +whitetreeleaves,18,2 +whitelogleaves,18,2 +whitetrunkleaves,18,2 +whitewoodleaves,18,2 +wtreeleaves,18,2 +wlogleaves,18,2 +wtrunkleaves,18,2 +wwoodleaves,18,2 +birchtreeleaf,18,2 +birchlogleaf,18,2 +birchtrunkleaf,18,2 +birchwoodleaf,18,2 +btreeleaf,18,2 +blogleaf,18,2 +btrunkleaf,18,2 +bwoodleaf,18,2 +lighttreeleaf,18,2 +lightlogleaf,18,2 +lighttrunkleaf,18,2 +lightwoodleaf,18,2 +ltreeleaf,18,2 +llogleaf,18,2 +ltrunkleaf,18,2 +lwoodleaf,18,2 +whitetreeleaf,18,2 +whitelogleaf,18,2 +whitetrunkleaf,18,2 +whitewoodleaf,18,2 +wtreeleaf,18,2 +wlogleaf,18,2 +wtrunkleaf,18,2 +wwoodleaf,18,2 +jungleleaves,18,3 +jungleleaf,18,3 +jleaves,18,3 +jleaf,18,3 +jungletreeleaves,18,3 +junglelogleaves,18,3 +jungletrunkleaves,18,3 +junglewoodleaves,18,3 +jtreeleaves,18,3 +jlogleaves,18,3 +jtrunkleaves,18,3 +jwoodleaves,18,3 +forestleaves,18,3 +forestleaf,18,3 +fleaves,18,3 +fleaf,18,3 +foresttreeleaves,18,3 +forestlogleaves,18,3 +foresttrunkleaves,18,3 +forestwoodleaves,18,3 +ftreeleaves,18,3 +flogleaves,18,3 +ftrunkleaves,18,3 +fwoodleaves,18,3 +jungletreeleaf,18,3 +junglelogleaf,18,3 +jungletrunkleaf,18,3 +junglewoodleaf,18,3 +jtreeleaf,18,3 +jlogleaf,18,3 +jtrunkleaf,18,3 +jwoodleaf,18,3 +foresttreeleaf,18,3 +forestlogleaf,18,3 +foresttrunkleaf,18,3 +forestwoodleaf,18,3 +ftreeleaf,18,3 +flogleaf,18,3 +ftrunkleaf,18,3 +fwoodleaf,18,3 +sponge,19,0 +glass,20,0 +blockglass,20,0 +glassblock,20,0 +lapislazuliore,21,0 +lapislazulio,21,0 +orelapislazuli,21,0 +olapislazuli,21,0 +lapisore,21,0 +lapiso,21,0 +orelapis,21,0 +olapis,21,0 +lore,21,0 +orel,21,0 +lapislazuliblock,22,0 +blocklapislazuli,22,0 +lapisblock,22,0 +blocklapis,22,0 +lblock,22,0 +blockl,22,0 +dispenser,23,0 +dispense,23,0 +sandstone,24,0 +sastone,24,0 +creepersandstone,24,1 +creepersastone,24,1 +creepsandstone,24,1 +creepsastone,24,1 +csandstone,24,1 +csastone,24,1 +hieroglyphicsandstone,24,1 +hieroglyphicsastone,24,1 +hieroglyphsandstone,24,1 +hieroglyphsastone,24,1 +hsandstone,24,1 +hsastone,24,1 +pyramidsandstone,24,1 +pyramidsastone,24,1 +psandstone,24,1 +psastone,24,1 +chiseledsandstone,24,1 +chiseledsastone,24,1 +chiselsandstone,24,1 +chiselsastone,24,1 +smoothsandstone,24,2 +smoothsastone,24,2 +ssandstone,24,2 +smsastone,24,2 +ssastone,24,2 +noteblock,25,0 +musicblock,25,0 +nblock,25,0 +mblock,25,0 +poweredtrack,27,0 +poweredrails,27,0 +poweredrail,27,0 +boostertrack,27,0 +boosterrails,27,0 +boosterrail,27,0 +powertrack,27,0 +powerrails,27,0 +powerrail,27,0 +boosttrack,27,0 +boostrails,27,0 +boostrail,27,0 +ptrack,27,0 +prails,27,0 +prail,27,0 +btrack,27,0 +brails,27,0 +brail,27,0 +detectortrack,28,0 +detectorrails,28,0 +detectorrail,28,0 +detectingtrack,28,0 +detectingrails,28,0 +detectingrail,28,0 +detecttrack,28,0 +detectrails,28,0 +detectrail,28,0 +dtrack,28,0 +drails,28,0 +drail,28,0 +stickypistonbase,29,0 +stickypiston,29,0 +stickpistonbase,29,0 +stickpiston,29,0 +stickyp,29,0 +spistonbase,29,0 +spiston,29,0 +pistonstickybase,29,0 +pistonsticky,29,0 +pistonstickbase,29,0 +pistonstick,29,0 +pistonsbase,29,0 +pistons,29,0 +psticky,29,0 +pstick,29,0 +spiderweb,30,0 +cobweb,30,0 +sweb,30,0 +cweb,30,0 +web,30,0 +longgrass,31,1 +tallgrass,31,1 +wildgrass,31,1 +grasslong,31,1 +grasstall,31,1 +grasswild,31,1 +lgrass,31,1 +tgrass,31,1 +wgrass,31,1 +fern,31,2 +bush,31,2 +deadshrub,32,0 +dshrub,32,0 +deadbush,32,0 +dbush,32,0 +deadsapling,32,0 +piston,33,0 +pistonbase,33,0 +pistonblock,33,0 +whitewool,35,0 +whitecloth,35,0 +whitecotton,35,0 +wcloth,35,0 +wwool,35,0 +wcotton,35,0 +cloth,35,0 +wool,35,0 +cotton,35,0 +orangewool,35,1 +orangecloth,35,1 +orangecotton,35,1 +ocloth,35,1 +owool,35,1 +ocotton,35,1 +magentawool,35,2 +magentacloth,35,2 +magentacotton,35,2 +mcloth,35,2 +mwool,35,2 +mcotton,35,2 +lightbluewool,35,3 +lightbluecloth,35,3 +lightbluecotton,35,3 +lbluecloth,35,3 +lbluewool,35,3 +lbluecotton,35,3 +lightblucloth,35,3 +lightbluwool,35,3 +lightblucotton,35,3 +lblucloth,35,3 +lbluwool,35,3 +lblucotton,35,3 +lbcloth,35,3 +lbwool,35,3 +lbcotton,35,3 +yellowwool,35,4 +yellowcloth,35,4 +yellowcotton,35,4 +ycloth,35,4 +ywool,35,4 +ycotton,35,4 +lightgreenwool,35,5 +lightgreencloth,35,5 +lightgreencotton,35,5 +lgreencloth,35,5 +lgreenwool,35,5 +lgreencotton,35,5 +lightgrecloth,35,5 +lightgrewool,35,5 +lightgrecotton,35,5 +lgrecloth,35,5 +lgrewool,35,5 +lgrecotton,35,5 +limecloth,35,5 +limewool,35,5 +limecotton,35,5 +lcloth,35,5 +lwool,35,5 +lcotton,35,5 +pinkwool,35,6 +pinkcloth,35,6 +pinkcotton,35,6 +picloth,35,6 +piwool,35,6 +picotton,35,6 +darkgraywool,35,7 +darkgraycloth,35,7 +darkgraycotton,35,7 +darkgreywool,35,7 +darkgreycloth,35,7 +darkgreycotton,35,7 +dgraycloth,35,7 +dgraywool,35,7 +dgraycotton,35,7 +dgreycloth,35,7 +dgreywool,35,7 +dgreycotton,35,7 +darkgracloth,35,7 +darkgrawool,35,7 +darkgracotton,35,7 +dgracloth,35,7 +dgrawool,35,7 +dgracotton,35,7 +graycloth,35,7 +graywool,35,7 +graycotton,35,7 +greycloth,35,7 +greywool,35,7 +greycotton,35,7 +gracloth,35,7 +grawool,35,7 +gracotton,35,7 +lightgraywool,35,8 +lightgraycloth,35,8 +lightgraycotton,35,8 +lgraycloth,35,8 +lgraywool,35,8 +lgraycotton,35,8 +lightgreywool,35,8 +lightgreycloth,35,8 +lightgreycotton,35,8 +lgreycloth,35,8 +lgreywool,35,8 +lgreycotton,35,8 +lightgracloth,35,8 +lightgrawool,35,8 +lightgracotton,35,8 +lgracloth,35,8 +lgrawool,35,8 +lgracotton,35,8 +silvercloth,35,8 +silverwool,35,8 +silvercotton,35,8 +sicloth,35,8 +siawool,35,8 +siacotton,35,8 +cyanwool,35,9 +cyancloth,35,9 +cyancotton,35,9 +ccloth,35,9 +cwool,35,9 +ccotton,35,9 +purplewool,35,10 +purplecloth,35,10 +purplecotton,35,10 +pucloth,35,10 +puwool,35,10 +pucotton,35,10 +bluewool,35,11 +bluecloth,35,11 +bluecotton,35,11 +blucloth,35,11 +bluwool,35,11 +blucotton,35,11 +brownwool,35,12 +browncloth,35,12 +browncotton,35,12 +brocloth,35,12 +browool,35,12 +brocotton,35,12 +darkgreenwool,35,13 +darkgreencloth,35,13 +darkgreencotton,35,13 +dgreencloth,35,13 +dgreenwool,35,13 +dgreencotton,35,13 +greencloth,35,13 +greenwool,35,13 +greencotton,35,13 +darkgrecloth,35,13 +darkgrewool,35,13 +darkgrecotton,35,13 +dgrecloth,35,13 +dgrewool,35,13 +dgrecotton,35,13 +grecloth,35,13 +grewool,35,13 +grecotton,35,13 +redwool,35,14 +redcloth,35,14 +redcotton,35,14 +rcloth,35,14 +rwool,35,14 +rcotton,35,14 +blackwool,35,15 +blackcloth,35,15 +blackcotton,35,15 +blacloth,35,15 +blawool,35,15 +blacotton,35,15 +dandelion,37,0 +yellowdandelion,37,0 +ydandelion,37,0 +yellowflower,37,0 +yflower,37,0 +flower,37,0 +rose,38,0 +redrose,38,0 +rrose,38,0 +redflower,38,0 +rflower,38,0 +poppy,38,0 +redpoppy,38,0 +blueorchid,38,1 +cyanorchid,38,1 +lightblueorchid,38,1 +lblueorchid,38,1 +orchid,38,1 +allium,38,2 +magentaallium,38,2 +azurebluet,38,3 +whiteazurebluet,38,3 +abluet,38,3 +azureb,38,3 +houstonia,38,3 +redtulip,38,4 +tulipred,38,4 +rtulip,38,4 +tulipr,38,4 +orangetulip,38,5 +tuliporange,38,5 +otulip,38,5 +tulipo,38,5 +whitetulip,38,6 +tulipwhite,38,6 +wtulip,38,6 +tulipw,38,6 +pinktulip,38,7 +tulippink,38,7 +ptulip,38,7 +tulipp,38,7 +oxeye,38,8 +daisy,38,8 +oxeyedaisy,38,8 +daisyoxeye,38,8 +moondaisy,38,8 +daisymoon,38,8 +lightgrayoxeye,38,8 +lgrayoxeye,38,8 +lightgreyoxeye,38,8 +lgreyoxeye,38,8 +brownmushroom,39,0 +brownshroom,39,0 +brownmush,39,0 +bmushroom,39,0 +bshroom,39,0 +bmush,39,0 +redmushroom,40,0 +redshroom,40,0 +redmush,40,0 +rmushroom,40,0 +rshroom,40,0 +rmush,40,0 +goldblock,41,0 +blockgold,41,0 +gblock,41,0 +blockg,41,0 +ironblock,42,0 +steelblock,42,0 +blockiron,42,0 +blocksteel,42,0 +iblock,42,0 +stblock,42,0 +blocki,42,0 +blockst,42,0 +stonedoublestep,43,0 +stonedstep,43,0 +sdoublestep,43,0 +sdstep,43,0 +doublestonestep,43,0 +dstonestep,43,0 +doublesstep,43,0 +doublestep,43,0 +dstep,43,0 +stonedoubleslab,43,0 +stonedslab,43,0 +sdoubleslab,43,0 +sdslab,43,0 +doublestoneslab,43,0 +dstoneslab,43,0 +doublesslab,43,0 +doubleslab,43,0 +dslab,43,0 +stonedoublehalfblock,43,0 +stonedhalfblock,43,0 +sdoublehalfblock,43,0 +sdhalfblock,43,0 +doublestonehalfblock,43,0 +dstonehalfblock,43,0 +doubleshalfblock,43,0 +doublehalfblock,43,0 +dhalfblock,43,0 +sandstonedoublestep,43,1 +sandstonedstep,43,1 +sstonedoublestep,43,1 +sstonedstep,43,1 +ssdoublestep,43,1 +ssdstep,43,1 +doublesandstonestep,43,1 +dsandstonestep,43,1 +doublesstonestep,43,1 +dsstonestep,43,1 +doublessstep,43,1 +dsstep,43,1 +sandstonedoubleslab,43,1 +sandstonedslab,43,1 +sstonedoubleslab,43,1 +sstonedslab,43,1 +ssdoubleslab,43,1 +ssdslab,43,1 +doublesandstoneslab,43,1 +dsandstoneslab,43,1 +doublesstoneslab,43,1 +dsstoneslab,43,1 +doublessslab,43,1 +dsslab,43,1 +sandstonedoublehalfblock,43,1 +sandstonedhalfblock,43,1 +sstonedoublehalfblock,43,1 +sstonedhalfblock,43,1 +ssdoublehalfblock,43,1 +ssdhalfblock,43,1 +doublesandstonehalfblock,43,1 +dsandstonehalfblock,43,1 +doublesstonehalfblock,43,1 +dsstonehalfblock,43,1 +doublesshalfblock,43,1 +dsshalfblock,43,1 +plankstonedoublestep,43,2 +woodenstonedoublestep,43,2 +woodenstonedstep,43,2 +woodstonedoublestep,43,2 +woodstonedstep,43,2 +wstonedoublestep,43,2 +wstonedstep,43,2 +doublewoodenstonestep,43,2 +dwoodenstonestep,43,2 +doublewoodstonestep,43,2 +dwoodstonestep,43,2 +doublewstonestep,43,2 +dwstonestep,43,2 +woodenstonedoubleslab,43,2 +woodenstonedslab,43,2 +woodstonedoubleslab,43,2 +woodstonedslab,43,2 +wstonedoubleslab,43,2 +wstonedslab,43,2 +doublewoodenstoneslab,43,2 +dwoodenstoneslab,43,2 +doublewoodstoneslab,43,2 +dwoodstoneslab,43,2 +doublewstoneslab,43,2 +dwstoneslab,43,2 +woodenstonedoublehalfblock,43,2 +woodenstonedhalfblock,43,2 +woodstonedoublehalfblock,43,2 +woodstonedhalfblock,43,2 +wstonedoublehalfblock,43,2 +wstonedhalfblock,43,2 +doublewoodenstonehalfblock,43,2 +dwoodenstonehalfblock,43,2 +doublewoodstonehalfblock,43,2 +dwoodstonehalfblock,43,2 +doublewstonehalfblock,43,2 +dwstonehalfblock,43,2 +cobblestonedoublestep,43,3 +cobblestonedstep,43,3 +cobbledoublestep,43,3 +cobbledstep,43,3 +cstonedoublestep,43,3 +cstonedstep,43,3 +csdoublestep,43,3 +csdstep,43,3 +doublecobblestonestep,43,3 +dcobblestonestep,43,3 +doublecobblestep,43,3 +dcobblestep,43,3 +doublecstonestep,43,3 +dcstonestep,43,3 +doublecsstep,43,3 +dcsstep,43,3 +cobblestonedoubleslab,43,3 +cobblestonedslab,43,3 +cobbledoubleslab,43,3 +cobbledslab,43,3 +cstonedoubleslab,43,3 +cstonedslab,43,3 +csdoubleslab,43,3 +csdslab,43,3 +doublecobblestoneslab,43,3 +dcobblestoneslab,43,3 +doublecobbleslab,43,3 +dcobbleslab,43,3 +doublecstoneslab,43,3 +dcstoneslab,43,3 +doublecsslab,43,3 +dcsslab,43,3 +cobblestonedoublehalfblock,43,3 +cobblestonedhalfblock,43,3 +cobbledoublehalfblock,43,3 +cobbledhalfblock,43,3 +cstonedoublehalfblock,43,3 +cstonedhalfblock,43,3 +csdoublehalfblock,43,3 +csdhalfblock,43,3 +doublecobblestonehalfblock,43,3 +dcobblestonehalfblock,43,3 +doublecobblehalfblock,43,3 +dcobblehalfblock,43,3 +doublecstonehalfblock,43,3 +dcstonehalfblock,43,3 +doublecshalfblock,43,3 +dcshalfblock,43,3 +brickdoublestep,43,4 +brickdstep,43,4 +bdoublestep,43,4 +bdstep,43,4 +brickdoubleslab,43,4 +brickdslab,43,4 +bdoubleslab,43,4 +bdslab,43,4 +doublebrickstep,43,4 +dbrickstep,43,4 +doublebstep,43,4 +dbstep,43,4 +doublebrickslab,43,4 +dbrickslab,43,4 +doublebslab,43,4 +dbslab,43,4 +brickdoublehalfblock,43,4 +brickdhalfblock,43,4 +bdoublehalfblock,43,4 +bdhalfblock,43,4 +doublebrickhalfblock,43,4 +dbrickhalfblock,43,4 +doublebhalfblock,43,4 +dbhalfblock,43,4 +stonebrickdoublestep,43,5 +stonebrickdstep,43,5 +stonebdoublestep,43,5 +stonebdstep,43,5 +sbrickdoublestep,43,5 +sbrickdstep,43,5 +sbdoublestep,43,5 +sbdstep,43,5 +stonebrickdoubleslab,43,5 +stonebrickdslab,43,5 +stonebdoubleslab,43,5 +stonebdslab,43,5 +sbrickdoubleslab,43,5 +sbrickdslab,43,5 +sbdoubleslab,43,5 +sbdslab,43,5 +doublestonebrickstep,43,5 +dstonebrickstep,43,5 +doublestonebstep,43,5 +dstonebstep,43,5 +doublesbrickstep,43,5 +dsbrickstep,43,5 +doublesbstep,43,5 +dsbstep,43,5 +doublestonebrickslab,43,5 +dstonebrickslab,43,5 +doublestonebslab,43,5 +dstonebslab,43,5 +doublesbrickslab,43,5 +dsbrickdslab,43,5 +doublesbslab,43,5 +dsbslab,43,5 +stonebrickdoublehalfblock,43,5 +stonebrickdhalfblock,43,5 +stonebdoublehalfblock,43,5 +stonebdhalfblock,43,5 +sbrickdoublehalfblock,43,5 +sbrickdhalfblock,43,5 +sbdoublehalfblock,43,5 +sbdhalfblock,43,5 +doublestonebrickhalfblock,43,5 +dstonebrickhalfblock,43,5 +doublestonebhalfblock,43,5 +dstonebhalfblock,43,5 +doublesbrickhalfblock,43,5 +dsbrickhalfblock,43,5 +doublesbhalfblock,43,5 +dsbhalfblock,43,5 +netherbrickdoubleslab,43,6 +hellbrickdoubleslab,43,6 +nbrickdoubleslab,43,6 +hbrickdoubleslab,43,6 +netherdoubleslab,43,6 +helldoubleslab,43,6 +nbdoubleslab,43,6 +hbdoubleslab,43,6 +hdoubleslab,43,6 +ndoubleslab,43,6 +netherbrickdoublestep,43,6 +hellbrickdoublestep,43,6 +nbrickdoublestep,43,6 +hbrickdoublestep,43,6 +netherdoublestep,43,6 +helldoublestep,43,6 +nbdoublestep,43,6 +hbdoublestep,43,6 +ndoublestep,43,6 +hdoublestep,43,6 +netherbrickdoublehalfblock,43,6 +hellbrickdoublehalfblock,43,6 +nbrickdoublehalfblock,43,6 +hbrickdoublehalfblock,43,6 +netherdoublehalfblock,43,6 +helldoublehalfblock,43,6 +nbdoublehalfblock,43,6 +hbdoublehalfblock,43,6 +ndoublehalfblock,43,6 +hdoublehalfblock,43,6 +netherbrickdslab,43,6 +hellbrickdslab,43,6 +nbrickdslab,43,6 +hbrickdslab,43,6 +netherdslab,43,6 +helldslab,43,6 +nbdslab,43,6 +hbdslab,43,6 +hdslab,43,6 +ndslab,43,6 +netherbrickdstep,43,6 +hellbrickdstep,43,6 +nbrickdstep,43,6 +hbrickdstep,43,6 +netherdstep,43,6 +helldstep,43,6 +nbdstep,43,6 +hbdstep,43,6 +ndstep,43,6 +hdstep,43,6 +netherbrickdhalfblock,43,6 +hellbrickdhalfblock,43,6 +nbrickdhalfblock,43,6 +hbrickdhalfblock,43,6 +netherdhalfblock,43,6 +helldhalfblock,43,6 +nbdhalfblock,43,6 +hbdhalfblock,43,6 +ndhalfblock,43,6 +hdhalfblock,43,6 +doublenetherbrickslab,43,6 +doublehellbrickslab,43,6 +doublenbrickslab,43,6 +doublehbrickslab,43,6 +doublenetherslab,43,6 +doublehellslab,43,6 +doublenbslab,43,6 +doublehbslab,43,6 +doublehslab,43,6 +doublenslab,43,6 +doublenetherbrickstep,43,6 +doublehellbrickstep,43,6 +doublenbrickstep,43,6 +doublehbrickstep,43,6 +doublenetherstep,43,6 +doublehellstep,43,6 +doublenbstep,43,6 +doublehbstep,43,6 +doublenstep,43,6 +doublehstep,43,6 +doublenetherbrickhalfblock,43,6 +doublehellbrickhalfblock,43,6 +doublenbrickhalfblock,43,6 +doublehbrickhalfblock,43,6 +doublenetherhalfblock,43,6 +doublehellhalfblock,43,6 +doublenbhalfblock,43,6 +doublehbhalfblock,43,6 +doublenhalfblock,43,6 +doublehhalfblock,43,6 +dnetherbrickslab,43,6 +dhellbrickslab,43,6 +dnbrickslab,43,6 +dhbrickslab,43,6 +dnetherslab,43,6 +dhellslab,43,6 +dnbslab,43,6 +dhbslab,43,6 +dhslab,43,6 +dnslab,43,6 +dnetherbrickstep,43,6 +dhellbrickstep,43,6 +dnbrickstep,43,6 +dhbrickstep,43,6 +dnetherstep,43,6 +dhellstep,43,6 +dnbstep,43,6 +dhbstep,43,6 +dnstep,43,6 +dhstep,43,6 +dnetherbrickhalfblock,43,6 +dhellbrickhalfblock,43,6 +dnbrickhalfblock,43,6 +dhbrickhalfblock,43,6 +dnetherhalfblock,43,6 +dhellhalfblock,43,6 +dnbhalfblock,43,6 +dhbhalfblock,43,6 +dnhalfblock,43,6 +dhhalfblock,43,6 +netherquartzdoublestep,43,7 +hellquartzdoublestep,43,7 +deathquartzdoublestep,43,7 +nquartzdoublestep,43,7 +hquartzdoublestep,43,7 +dquartzdoublestep,43,7 +quartzdoublestep,43,7 +nqdoublestep,43,7 +hqdoublestep,43,7 +dqdoublestep,43,7 +qdoublestep,43,7 +netherquartzdoubleslab,43,7 +hellquartzdoubleslab,43,7 +deathquartzdoubleslab,43,7 +nquartzdoubleslab,43,7 +hquartzdoubleslab,43,7 +dquartzdoubleslab,43,7 +quartzdoubleslab,43,7 +nqdoubleslab,43,7 +hqdoubleslab,43,7 +dqdoubleslab,43,7 +qdoubleslab,43,7 +netherquartzdoublehalfblock,43,7 +hellquartzdoublehalfblock,43,7 +deathquartzdoublehalfblock,43,7 +nquartzdoublehalfblock,43,7 +hquartzdoublehalfblock,43,7 +dquartzdoublehalfblock,43,7 +quartzdoublehalfblock,43,7 +nqdoublehalfblock,43,7 +hqdoublehalfblock,43,7 +dqdoublehalfblock,43,7 +qdoublehalfblock,43,7 +netherquartzdslab,43,7 +hellquartzdslab,43,7 +deathquartzdslab,43,7 +nquartzdslab,43,7 +hquartzdslab,43,7 +dquartzdslab,43,7 +quartzdslab,43,7 +nqdslab,43,7 +hqdslab,43,7 +dqdslab,43,7 +qdslab,43,7 +netherquartzdstep,43,7 +hellquartzdstep,43,7 +deathquartzdstep,43,7 +nquartzdstep,43,7 +hquartzdstep,43,7 +dquartzdstep,43,7 +quartzdstep,43,7 +nqdstep,43,7 +hqdstep,43,7 +dqdstep,43,7 +qdstep,43,7 +netherquartzdhalfblock,43,7 +hellquartzdhalfblock,43,7 +deathquartzdhalfblock,43,7 +nquartzdhalfblock,43,7 +hquartzdhalfblock,43,7 +dquartzdhalfblock,43,7 +quartzdhalfblock,43,7 +nqdhalfblock,43,7 +hqdhalfblock,43,7 +dqdhalfblock,43,7 +qdhalfblock,43,7 +doublenetherquartzslab,43,7 +doublehellquartzslab,43,7 +doubledeathquartzslab,43,7 +doublenquartzslab,43,7 +doublehquartzslab,43,7 +doubledquartzslab,43,7 +doublequartzslab,43,7 +doublenqslab,43,7 +doublehqslab,43,7 +doubledqslab,43,7 +doubleqslab,43,7 +doublenetherquartzstep,43,7 +doublehellquartzstep,43,7 +doubledeathquartzstep,43,7 +doublenquartzstep,43,7 +doublehquartzstep,43,7 +doubledquartzstep,43,7 +doublequartzstep,43,7 +doublenqstep,43,7 +doublehqstep,43,7 +doubledqstep,43,7 +doubleqstep,43,7 +doublenetherquartzhalfblock,43,7 +doublehellquartzhalfblock,43,7 +doubledeathquartzhalfblock,43,7 +doublenquartzhalfblock,43,7 +doublehquartzhalfblock,43,7 +doubledquartzhalfblock,43,7 +doublequartzhalfblock,43,7 +doublenqhalfblock,43,7 +doublehqhalfblock,43,7 +doubledqhalfblock,43,7 +doubleqhalfblock,43,7 +dnetherquartzslab,43,7 +dhellquartzslab,43,7 +ddeathquartzslab,43,7 +dnquartzslab,43,7 +dhquartzslab,43,7 +ddquartzslab,43,7 +dnqslab,43,7 +dhqslab,43,7 +ddqslab,43,7 +dnetherquartzstep,43,7 +dhellquartzstep,43,7 +ddeathquartzstep,43,7 +dnquartzstep,43,7 +dhquartzstep,43,7 +ddquartzstep,43,7 +dnqstep,43,7 +dhqstep,43,7 +ddqstep,43,7 +dnetherquartzhalfblock,43,7 +dhellquartzhalfblock,43,7 +ddeathquartzhalfblock,43,7 +dnquartzhalfblock,43,7 +dhquartzhalfblock,43,7 +ddquartzhalfblock,43,7 +dnqhalfblock,43,7 +dhqhalfblock,43,7 +ddqhalfblock,43,7 +smoothstonedoubleslab,43,8 +smoothstonedoublestep,43,8 +smoothstonedoublehalfblock,43,8 +smoothstonedslab,43,8 +smoothstonedstep,43,8 +smoothstonedhalfblock,43,8 +doublesmoothstoneslab,43,8 +doublesmoothstonestep,43,8 +doublesmoothstonehalfblock,43,8 +dsmoothstoneslab,43,8 +dsmoothstonestep,43,8 +dsmoothstonehalfblock,43,8 +smoothsandstonedoubleslab,43,9 +ssandstonedoubleslab,43,9 +ssstonedoubleslab,43,9 +sssdoubleslab,43,9 +smoothsandstonedoublestep,43,9 +ssandstonedoublestep,43,9 +ssstonedoublestep,43,9 +sssdoublestep,43,9 +smoothsandstonedoublehalfblock,43,9 +ssandstonedoublehalfblock,43,9 +ssstonedoublehalfblock,43,9 +sssdoublehalfblock,43,9 +smoothsandstonedslab,43,9 +ssandstonedslab,43,9 +ssstonedslab,43,9 +sssdslab,43,9 +smoothsandstonedstep,43,9 +ssandstonedstep,43,9 +ssstonedstep,43,9 +sssdstep,43,9 +smoothsandstonedhalfblock,43,9 +ssandstonedhalfblock,43,9 +ssstonedhalfblock,43,9 +sssdhalfblock,43,9 +doublesmoothsandstoneslab,43,9 +doublessandstoneslab,43,9 +doublessstoneslab,43,9 +doublesssslab,43,9 +doublesmoothsandstonestep,43,9 +doublessandstonestep,43,9 +doublessstonestep,43,9 +doublesssstep,43,9 +doublesmoothsandstonehalfblock,43,9 +doublessandstonehalfblock,43,9 +doublessstonehalfblock,43,9 +doublessshalfblock,43,9 +dsmoothsandstoneslab,43,9 +dssandstoneslab,43,9 +dssstoneslab,43,9 +dsssslab,43,9 +dsmoothsandstonestep,43,9 +dssandstonestep,43,9 +dssstonestep,43,9 +dsssstep,43,9 +dsmoothsandstonehalfblock,43,9 +dssandstonehalfblock,43,9 +dssstonehalfblock,43,9 +dssshalfblock,43,9 +smoothstonestep,44,0 +stonestep,44,0 +sstep,44,0 +step,44,0 +smoothstoneslab,44,0 +stoneslab,44,0 +sslab,44,0 +slab,44,0 +smoothstonehalfblock,44,0 +stonehalfblock,44,0 +shalfblock,44,0 +halfblock,44,0 +sandstonestep,44,1 +sstonestep,44,1 +ssstep,44,1 +sandstoneslab,44,1 +sstoneslab,44,1 +ssslab,44,1 +sandstonehalfblock,44,1 +sstonehalfblock,44,1 +sshalfblock,44,1 +woodenstonestep,44,2 +woodstonestep,44,2 +wstonestep,44,2 +woodenstoneslab,44,2 +woodstoneslab,44,2 +wstoneslab,44,2 +woodenstonehalfblock,44,2 +woodstonehalfblock,44,2 +wstonehalfblock,44,2 +cobblestonestep,44,3 +cobblestep,44,3 +cstonestep,44,3 +csstep,44,3 +cobblestoneslab,44,3 +cobbleslab,44,3 +cstoneslab,44,3 +csslab,44,3 +cobblestonehalfblock,44,3 +cobblehalfblock,44,3 +cstonehalfblock,44,3 +cshalfblock,44,3 +brickstep,44,4 +bstep,44,4 +brickslab,44,4 +bslab,44,4 +brickhalfblock,44,4 +bhalfblock,44,4 +stonebrickstep,44,5 +stonebstep,44,5 +sbrickstep,44,5 +sbstep,44,5 +stonebrickslab,44,5 +stonebslab,44,5 +sbrickslab,44,5 +sbslab,44,5 +stonebrickhalfblock,44,5 +stonebhalfblock,44,5 +sbrickhalfblock,44,5 +sbhalfblock,44,5 +netherbrickslab,44,6 +hellbrickslab,44,6 +nbrickslab,44,6 +hbrickslab,44,6 +netherslab,44,6 +hellslab,44,6 +nbslab,44,6 +hbslab,44,6 +hslab,44,6 +nslab,44,6 +netherbrickstep,44,6 +hellbrickstep,44,6 +nbrickstep,44,6 +hbrickstep,44,6 +netherstep,44,6 +hellstep,44,6 +nbstep,44,6 +hbstep,44,6 +nstep,44,6 +hstep,44,6 +netherbrickhalfblock,44,6 +hellbrickhalfblock,44,6 +nbrickhalfblock,44,6 +hbrickhalfblock,44,6 +netherhalfblock,44,6 +hellhalfblock,44,6 +nbhalfblock,44,6 +hbhalfblock,44,6 +nhalfblock,44,6 +hhalfblock,44,6 +netherquartzstep,44,7 +hellquartzstep,44,7 +deathquartzstep,44,7 +nquartzstep,44,7 +hquartzstep,44,7 +dquartzstep,44,7 +quartzstep,44,7 +nqstep,44,7 +hqstep,44,7 +dqstep,44,7 +qstep,44,7 +netherquartzslab,44,7 +hellquartzslab,44,7 +deathquartzslab,44,7 +nquartzslab,44,7 +hquartzslab,44,7 +dquartzslab,44,7 +quartzslab,44,7 +nqslab,44,7 +hqslab,44,7 +dqslab,44,7 +qslab,44,7 +netherquartzhalfblock,44,7 +hellquartzhalfblock,44,7 +deathquartzhalfblock,44,7 +nquartzhalfblock,44,7 +hquartzhalfblock,44,7 +dquartzhalfblock,44,7 +quartzhalfblock,44,7 +nqhalfblock,44,7 +hqhalfblock,44,7 +dqhalfblock,44,7 +qhalfblock,44,7 +brickblock,45,0 +blockbrick,45,0 +bblock,45,0 +blockb,45,0 +tnt,46,0 +tntblock,46,0 +blocktnt,46,0 +bombblock,46,0 +blockbomb,46,0 +dynamiteblock,46,0 +blockdynamite,46,0 +bomb,46,0 +dynamite,46,0 +bookcase,47,0 +casebook,47,0 +bookshelf,47,0 +shelfbook,47,0 +bookblock,47,0 +blockbook,47,0 +mossycobblestone,48,0 +mosscobblestone,48,0 +mcobblestone,48,0 +mossycobble,48,0 +mosscobble,48,0 +mcobble,48,0 +mossstone,48,0 +mossystone,48,0 +mstone,48,0 +obsidian,49,0 +obsi,49,0 +obby,49,0 +torch,50,0 +burningstick,50,0 +burnstick,50,0 +fire,51,0 +flame,51,0 +flames,51,0 +mobspawner,52,0 +mobcage,52,0 +monsterspawner,52,0 +monstercage,52,0 +mspawner,52,0 +mcage,52,0 +spawner,52,0 +cage,52,0 +woodenstairs,53,0 +woodstairs,53,0 +wstairs,53,0 +woodenstair,53,0 +woodstair,53,0 +wstair,53,0 +chest,54,0 +container,54,0 +diamondore,56,0 +crystalore,56,0 +orediamond,56,0 +orecrystal,56,0 +dore,56,0 +ored,56,0 +diamondblock,57,0 +blockdiamond,57,0 +crystalblock,57,0 +blockcrystal,57,0 +dblock,57,0 +blockd,57,0 +workbench,58,0 +craftingbench,58,0 +crafterbench,58,0 +craftbench,58,0 +worktable,58,0 +craftingtable,58,0 +craftertable,58,0 +crafttable,58,0 +wbench,58,0 +cbench,58,0 +soil,60,0 +furnace,61,0 +litfurnace,62,0 +lfurnace,62,0 +burningfurnace,62,0 +burnfurnace,62,0 +bfurnace,62,0 +ladder,65,0 +minecarttrack,66,0 +minecartrails,66,0 +minecartrail,66,0 +mcarttrack,66,0 +mcartrails,66,0 +mcartrail,66,0 +mctrack,66,0 +mcrails,66,0 +mcrail,66,0 +track,66,0 +rails,66,0 +rail,66,0 +cobblestonestairs,67,0 +cstonestairs,67,0 +stonestairs,67,0 +cobblestairs,67,0 +csstairs,67,0 +sstairs,67,0 +cstairs,67,0 +cobblestonestair,67,0 +cstonestair,67,0 +stonestair,67,0 +cobblestair,67,0 +csstair,67,0 +sstair,67,0 +cstair,67,0 +lever,69,0 +stonepressureplate,70,0 +stonepressplate,70,0 +stonepplate,70,0 +stoneplate,70,0 +spressureplate,70,0 +spressplate,70,0 +spplate,70,0 +splate,70,0 +smoothstonepressureplate,70,0 +smoothstonepressplate,70,0 +smoothstonepplate,70,0 +smoothstoneplate,70,0 +sstonepressureplate,70,0 +sstonepressplate,70,0 +sstonepplate,70,0 +sstoneplate,70,0 +woodenpressureplate,72,0 +woodenpressplate,72,0 +woodenpplate,72,0 +woodenplate,72,0 +woodpressureplate,72,0 +woodpressplate,72,0 +woodpplate,72,0 +woodplate,72,0 +wpressureplate,72,0 +wpressplate,72,0 +wpplate,72,0 +wplate,72,0 +redstoneore,73,0 +redsore,73,0 +redore,73,0 +rstoneore,73,0 +rsore,73,0 +rore,73,0 +oreredstone,73,0 +orereds,73,0 +orered,73,0 +orerstone,73,0 +orers,73,0 +orer,73,0 +redstonetorch,76,0 +rstonetorch,76,0 +redstorch,76,0 +redtorch,76,0 +rstorch,76,0 +stonebutton,77,0 +smoothstonebutton,77,0 +sstonebutton,77,0 +sbutton,77,0 +button,77,0 +snowcover,78,0 +snowcovering,78,0 +scover,78,0 +ice,79,0 +frozenwater,79,0 +waterfrozen,79,0 +freezewater,79,0 +waterfreeze,79,0 +snowblock,80,0 +blocksnow,80,0 +sblock,80,0 +blocks,80,0 +cactus,81,0 +cactuses,81,0 +cacti,81,0 +clayblock,82,0 +blockclay,82,0 +cblock,82,0 +blockc,82,0 +jukebox,84,0 +jbox,84,0 +woodenfence,85,0 +fence,85,0 +woodfence,85,0 +wfence,85,0 +fencewooden,85,0 +fencewood,85,0 +fencew,85,0 +pumpkin,86,0 +netherrack,87,0 +netherrock,87,0 +netherstone,87,0 +hellrack,87,0 +hellrock,87,0 +hellstone,87,0 +deathrack,87,0 +deathrock,87,0 +deathstone,87,0 +nrack,87,0 +nrock,87,0 +nstone,87,0 +hrack,87,0 +hrock,87,0 +hstone,87,0 +drack,87,0 +drock,87,0 +dstone,87,0 +soulsand,88,0 +slowsand,88,0 +slowmud,88,0 +ssand,88,0 +smud,88,0 +mud,88,0 +glowstone,89,0 +glowingstoneblock,89,0 +lightstoneblock,89,0 +glowstoneblock,89,0 +blockglowingstone,89,0 +blocklightstone,89,0 +blockglowstone,89,0 +glowingstone,89,0 +lightstone,89,0 +glowingblock,89,0 +lightblock,89,0 +glowblock,89,0 +lstone,89,0 +gstone,89,0 +portal,90,0 +jackolantern,91,0 +pumpkinlantern,91,0 +glowingpumpkin,91,0 +lightpumpkin,91,0 +jpumpkin,91,0 +plantren,91,0 +glowpumpkin,91,0 +gpumpkin,91,0 +lpumpkin,91,0 +lockedchest,95,0 +lockchest,95,0 +jokechest,95,0 +whiteglass,95,0 +whitesglass,95,0 +whitestainedglass,95,0 +wglass,95,0 +wsglass,95,0 +wstainedglass,95,0 +sglass,95,0 +stainedglass,95,0 +orangeglass,95,1 +orangesglass,95,1 +orangestainedglass,95,1 +oglass,95,1 +osglass,95,1 +ostainedglass,95,1 +magentaglass,95,2 +magentasglass,95,2 +magentastainedglass,95,2 +mglass,95,2 +msglass,95,2 +mstainedglass,95,2 +lightblueglass,95,3 +lightbluesglass,95,3 +lightbluestainedglass,95,3 +lblueglass,95,3 +lbluesglass,95,3 +lbluestainedglass,95,3 +lightbluglass,95,3 +lightblusglass,95,3 +lightblustainedglass,95,3 +lbluglass,95,3 +lblusglass,95,3 +lblustainedglass,95,3 +lbglass,95,3 +lbsglass,95,3 +lbstainedglass,95,3 +yellowglass,95,4 +yellowsglass,95,4 +yellowstainedglass,95,4 +yglass,95,4 +ysglass,95,4 +ystainedglass,95,4 +lightgreenglass,95,5 +lightgreensglass,95,5 +lightgreenstainedglass,95,5 +lgreenglass,95,5 +lgreensglass,95,5 +lgreenstainedglass,95,5 +lightgreglass,95,5 +lightgresglass,95,5 +lightgrestainedglass,95,5 +lgreglass,95,5 +lgresglass,95,5 +lgrestainedglass,95,5 +limeglass,95,5 +limesglass,95,5 +limestainedglass,95,5 +lglass,95,5 +lsglass,95,5 +lstainedglass,95,5 +pinkglass,95,6 +pinksglass,95,6 +pinkstainedglass,95,6 +piglass,95,6 +pisglass,95,6 +pistainedglass,95,6 +darkgrayglass,95,7 +darkgraysglass,95,7 +darkgraystainedglass,95,7 +dgrayglass,95,7 +dgraysglass,95,7 +dgraystainedglass,95,7 +darkgreyglass,95,7 +darkgreysglass,95,7 +darkgreystainedglass,95,7 +dgreyglass,95,7 +dgreysglass,95,7 +dgreystainedglass,95,7 +darkgraglass,95,7 +darkgrasglass,95,7 +darkgrastainedglass,95,7 +dgraglass,95,7 +dgrasglass,95,7 +dgrastainedglass,95,7 +grayglass,95,7 +graysglass,95,7 +graystainedglass,95,7 +greyglass,95,7 +greysglass,95,7 +greystainedglass,95,7 +graglass,95,7 +grasglass,95,7 +grastainedglass,95,7 +lightgrayglass,95,8 +lightgraysglass,95,8 +lightgraystainedglass,95,8 +lgrayglass,95,8 +lgraysglass,95,8 +lgraystainedglass,95,8 +lightgreyglass,95,8 +lightgreysglass,95,8 +lightgreystainedglass,95,8 +lgreyglass,95,8 +lgreysglass,95,8 +lgreystainedglass,95,8 +lightgraglass,95,8 +lightgrasglass,95,8 +lightgrastainedglass,95,8 +lgraglass,95,8 +lgrasglass,95,8 +lgrastainedglass,95,8 +silverglass,95,8 +silversglass,95,8 +silverstainedglass,95,8 +siglass,95,8 +siasglass,95,8 +siastainedglass,95,8 +cyanglass,95,9 +cyansglass,95,9 +cyanstainedglass,95,9 +cglass,95,9 +csglass,95,9 +cstainedglass,95,9 +purpleglass,95,10 +purplesglass,95,10 +purplestainedglass,95,10 +puglass,95,10 +pusglass,95,10 +pustainedglass,95,10 +blueglass,95,11 +bluesglass,95,11 +bluestainedglass,95,11 +bluglass,95,11 +blusglass,95,11 +blustainedglass,95,11 +brownglass,95,12 +brownsglass,95,12 +brownstainedglass,95,12 +broglass,95,12 +brosglass,95,12 +brostainedglass,95,12 +darkgreenglass,95,13 +darkgreensglass,95,13 +darkgreenstainedglass,95,13 +dgreenglass,95,13 +dgreensglass,95,13 +dgreenstainedglass,95,13 +greenglass,95,13 +greensglass,95,13 +greenstainedglass,95,13 +darkgreglass,95,13 +darkgresglass,95,13 +darkgrestainedglass,95,13 +dgreglass,95,13 +dgresglass,95,13 +dgrestainedglass,95,13 +greglass,95,13 +gresglass,95,13 +grestainedglass,95,13 +redglass,95,14 +redsglass,95,14 +redstainedglass,95,14 +rglass,95,14 +rsglass,95,14 +rstainedglass,95,14 +blackglass,95,15 +blacksglass,95,15 +blackstainedglass,95,15 +blaglass,95,15 +blasglass,95,15 +blastainedglass,95,15 +trapdoor,96,0 +doortrap,96,0 +hatch,96,0 +tdoor,96,0 +doort,96,0 +trapd,96,0 +dtrap,96,0 +silverfish,97,0 +silverfishsmoothstone,97,0 +silverfishsstone,97,0 +sfishsmoothstone,97,0 +sfishsstone,97,0 +fishsmoothstone,97,0 +fishsstone,97,0 +sfsmoothstone,97,0 +sfsstone,97,0 +trapsmoothstone,97,0 +trapsstone,97,0 +monsteregg,97,0 +monstereggsmoothstone,97,0 +monstereggsstone,97,0 +meggsmoothstone,97,0 +meggsstone,97,0 +mesmoothstone,97,0 +messtone,97,0 +silverfishcobblestone,97,1 +silverfishcstone,97,1 +sfishcobblestone,97,1 +sfishcstone,97,1 +fishcobblestone,97,1 +fishcstone,97,1 +sfcobblestone,97,1 +sfcstone,97,1 +trapcobblestone,97,1 +trapcstone,97,1 +monstereggcobblestone,97,1 +monstereggcstone,97,1 +meggcobblestone,97,1 +meggcstone,97,1 +mecobblestone,97,1 +mecstone,97,1 +silverfishstonebrick,97,2 +silverfishsbrick,97,2 +sfishstonebrick,97,2 +sfishsbrick,97,2 +fishstonebrick,97,2 +fishsbrick,97,2 +sfstonebrick,97,2 +sfsbrick,97,2 +trapstonebrick,97,2 +trapsbrick,97,2 +monstereggstonebrick,97,2 +monstereggsbrick,97,2 +meggstonebrick,97,2 +meggsbrick,97,2 +mestonebrick,97,2 +mesbrick,97,2 +silverfishmossystonebrick,97,3 +silverfishmossstonebrick,97,3 +silverfishmstonebrick,97,3 +silverfishmsbrick,97,3 +sfishmossystonebrick,97,3 +sfishmossstonebrick,97,3 +sfishmstonebrick,97,3 +sfishmsbrick,97,3 +fishmossystonebrick,97,3 +fishmossstonebrick,97,3 +fishmstonebrick,97,3 +fishmsbrick,97,3 +sfmossystonebrick,97,3 +sfmossstonebrick,97,3 +sfmstonebrick,97,3 +sfmsbrick,97,3 +trapmossystonebrick,97,3 +trapmossstonebrick,97,3 +trapmstonebrick,97,3 +trapmsbrick,97,3 +monstereggmossystonebrick,97,3 +monstereggmossstonebrick,97,3 +monstereggmstonebrick,97,3 +monstereggmsbrick,97,3 +meggmossystonebrick,97,3 +meggmossstonebrick,97,3 +meggmstonebrick,97,3 +meggmsbrick,97,3 +memossystonebrick,97,3 +memossstonebrick,97,3 +memstonebrick,97,3 +memsbrick,97,3 +silverfishcrackedstonebrick,97,4 +silverfishcrackstonebrick,97,4 +silverfishcrstonebrick,97,4 +silverfishcrsbrick,97,4 +sfishcrackedstonebrick,97,4 +sfishcrackstonebrick,97,4 +sfishcrstonebrick,97,4 +sfishcrsbrick,97,4 +fishcrackedstonebrick,97,4 +fishcrackstonebrick,97,4 +fishcrstonebrick,97,4 +fishcrsbrick,97,4 +sfcrackedstonebrick,97,4 +sfcrackstonebrick,97,4 +sfcrstonebrick,97,4 +sfcrsbrick,97,4 +trapcrackedstonebrick,97,4 +trapcrackstonebrick,97,4 +trapcrstonebrick,97,4 +trapcrsbrick,97,4 +monstereggcrackedstonebrick,97,4 +monstereggcrackstonebrick,97,4 +monstereggcrstonebrick,97,4 +monstereggcrsbrick,97,4 +meggcrackedstonebrick,97,4 +meggcrackstonebrick,97,4 +meggcrstonebrick,97,4 +meggcrsbrick,97,4 +mecrackedstonebrick,97,4 +mecrackstonebrick,97,4 +mecrstonebrick,97,4 +mecrsbrick,97,4 +silverfishcirclestonebrick,97,5 +silverfishcistonebrick,97,5 +silverfishcisbrick,97,5 +sfishcirclestonebrick,97,5 +sfishcistonebrick,97,5 +sfishcisbrick,97,5 +fishcirclestonebrick,97,5 +fishcistonebrick,97,5 +fishcisbrick,97,5 +sfcirclestonebrick,97,5 +sfcistonebrick,97,5 +sfcisbrick,97,5 +trapcirclestonebrick,97,5 +trapcistonebrick,97,5 +trapcisbrick,97,5 +monstereggcirclestonebrick,97,5 +monstereggcistonebrick,97,5 +monstereggcisbrick,97,5 +meggcirclestonebrick,97,5 +meggcistonebrick,97,5 +meggcisbrick,97,5 +mecirclestonebrick,97,5 +mecistonebrick,97,5 +mecisbrick,97,5 +stonebrick,98,0 +stonebricks,98,0 +stonebrickblock,98,0 +stonebb,98,0 +sbrick,98,0 +mossystonebrick,98,1 +mossystonebricks,98,1 +mossystonebrickblock,98,1 +mossystonebb,98,1 +mossstonebrick,98,1 +mossstonebricks,98,1 +mossstonebrickblock,98,1 +mossstonebb,98,1 +mstonebrick,98,1 +mstonebricks,98,1 +mstonebrickblock,98,1 +mstonebb,98,1 +mosssbrick,98,1 +mosssbricks,98,1 +mosssbrickblock,98,1 +mosssbb,98,1 +msbrick,98,1 +msbricks,98,1 +msbrickblock,98,1 +crackedstone,98,2 +crackedstonebrick,98,2 +crackedstonebricks,98,2 +crackedstonebrickblock,98,2 +crackedstonebb,98,2 +crackstonebrick,98,2 +crackstonebricks,98,2 +crackstonebrickblock,98,2 +crackstonebb,98,2 +crstonebrick,98,2 +crstonebricks,98,2 +crstonebrickblock,98,2 +crstonebb,98,2 +cracksbrick,98,2 +cracksbricks,98,2 +cracksbrickblock,98,2 +cracksbb,98,2 +crsbrick,98,2 +crsbricks,98,2 +crsbrickblock,98,2 +circlestone,98,3 +circlestonebrick,98,3 +circlestonebricks,98,3 +circlestonebrickblock,98,3 +circlestonebb,98,3 +cistonebrick,98,3 +cistonebricks,98,3 +cistonebrickblock,98,3 +cistonebb,98,3 +circlesbrick,98,3 +circlesbricks,98,3 +circlesbrickblock,98,3 +circlesbb,98,3 +cisbrick,98,3 +cisbricks,98,3 +cisbrickblock,98,3 +giantredmushroom,99,0 +hugeredmushroom,99,0 +bigredmushroom,99,0 +gredmushroom,99,0 +hredmushroom,99,0 +bredmushroom,99,0 +giantrmushroom,99,0 +hugermushroom,99,0 +bigrmushroom,99,0 +grmushroom,99,0 +hrmushroom,99,0 +brmushroom,99,0 +giantredmush,99,0 +hugeredmush,99,0 +bigredmush,99,0 +gredmush,99,0 +hredmush,99,0 +bredmush,99,0 +giantrmush,99,0 +hugermush,99,0 +bigrmush,99,0 +grmush,99,0 +hrmush,99,0 +brmush,99,0 +giantbrownmushroom,100,0 +hugebrownmushroom,100,0 +bigbrownmushroom,100,0 +gbrownmushroom,100,0 +hbrownmushroom,100,0 +bbrownmushroom,100,0 +giantbmushroom,100,0 +hugebmushroom,100,0 +bigbmushroom,100,0 +gbmushroom,100,0 +hbmushroom,100,0 +bbmushroom,100,0 +giantbrownmush,100,0 +hugebrownmush,100,0 +bigbrownmush,100,0 +gbrownmush,100,0 +hbrownmush,100,0 +bbrownmush,100,0 +giantbmush,100,0 +hugebmush,100,0 +bigbmush,100,0 +gbmush,100,0 +hbmush,100,0 +bbmush,100,0 +ironbars,101,0 +ironbarsb,101,0 +ironbarsblock,101,0 +ironfence,101,0 +metalbars,101,0 +metalbarsb,101,0 +metalbarsblock,101,0 +metalfence,101,0 +jailbars,101,0 +jailbarsb,101,0 +jailbarsblock,101,0 +jailfence,101,0 +mbars,101,0 +mbarsb,101,0 +mbarsblock,101,0 +mfence,101,0 +jbars,101,0 +jbarsb,101,0 +jbarsblock,101,0 +jfence,101,0 +ibars,101,0 +ibarsb,101,0 +ibarsblock,101,0 +ifence,101,0 +glasspane,102,0 +glassp,102,0 +paneglass,102,0 +pglass,102,0 +flatglass,102,0 +fglass,102,0 +skinnyglass,102,0 +glassflat,102,0 +glassf,102,0 +glassskinny,102,0 +glasss,102,0 +melon,103,0 +watermelon,103,0 +greenmelon,103,0 +melongreen,103,0 +melonblock,103,0 +watermelonblock,103,0 +greenmelonblock,103,0 +vines,106,0 +vine,106,0 +greenvines,106,0 +greenvine,106,0 +gardenvines,106,0 +gardenvine,106,0 +vinesgreen,106,0 +vinegreen,106,0 +vinesgarden,106,0 +vinegarden,106,0 +vinesg,106,0 +vineg,106,0 +gvines,106,0 +gvine,106,0 +woodgate,107,0 +woodenfencegate,107,0 +wfencegate,107,0 +woodfencegate,107,0 +woodengate,107,0 +wgate,107,0 +gate,107,0 +gardengate,107,0 +ggate,107,0 +fencegate,107,0 +fgate,107,0 +brickstairs,108,0 +redbrickstairs,108,0 +redbstairs,108,0 +rbrickstairs,108,0 +bstairs,108,0 +redstairs,108,0 +brickstair,108,0 +redbrickstair,108,0 +redbstair,108,0 +rbrickstair,108,0 +bstair,108,0 +redstair,108,0 +stonebrickstairs,109,0 +stonebstairs,109,0 +sbstairs,109,0 +cementbrickstairs,109,0 +cementstairs,109,0 +cementbstairs,109,0 +cbstairs,109,0 +greybrickstairs,109,0 +greybstairs,109,0 +greystairs,109,0 +mycelium,110,0 +purplegrass,110,0 +pinkgrass,110,0 +mycel,110,0 +swampgrass,110,0 +sgrass,110,0 +mushroomgrass,110,0 +mushgrass,110,0 +lilypad,111,0 +waterlily,111,0 +lily,111,0 +swamppad,111,0 +lpad,111,0 +wlily,111,0 +netherbrickblock,112,0 +hellbrickblock,112,0 +deathbrickblock,112,0 +nbrickblock,112,0 +hbrickblock,112,0 +dbrickblock,112,0 +netherbblock,112,0 +hellbblock,112,0 +deathbblock,112,0 +nbblock,112,0 +hbblock,112,0 +dbblock,112,0 +netherbrickfence,113,0 +hellbrickfence,113,0 +nbrickfence,113,0 +hbrickfence,113,0 +netherbfence,113,0 +hellbfence,113,0 +netherfence,113,0 +hellfence,113,0 +nbfence,113,0 +hbfence,113,0 +nfence,113,0 +hfence,113,0 +netherbrickstairs,114,0 +hellbrickstairs,114,0 +nbrickstairs,114,0 +hbrickstairs,114,0 +netherbstairs,114,0 +hellbstairs,114,0 +netherstairs,114,0 +hellstairs,114,0 +nbstairs,114,0 +hbstairs,114,0 +nstairs,114,0 +hstairs,114,0 +netherbrickstair,114,0 +hellbrickstair,114,0 +nbrickstair,114,0 +hbrickstair,114,0 +netherbstair,114,0 +hellbstair,114,0 +netherstair,114,0 +hellstair,114,0 +nbstair,114,0 +hbstair,114,0 +nstair,114,0 +hstair,114,0 +enchantmenttable,116,0 +enchantingtable,116,0 +enchanttable,116,0 +etable,116,0 +magicaltable,116,0 +magictable,116,0 +mtable,116,0 +enchantmentdesk,116,0 +enchantingdesk,116,0 +enchantdesk,116,0 +edesk,116,0 +magicaldesk,116,0 +magicdesk,116,0 +mdesk,116,0 +booktable,116,0 +bookdesk,116,0 +btable,116,0 +bdesk,116,0 +enderportal,119,0 +endergoo,119,0 +endgoo,119,0 +endportal,119,0 +egoo,119,0 +eportal,119,0 +enderportalframe,120,0 +endportalframe,120,0 +endgooframe,120,0 +endergooframe,120,0 +egooframe,120,0 +eportalframe,120,0 +enderframe,120,0 +endframe,120,0 +enderstone,121,0 +endstone,121,0 +endrock,121,0 +enderrock,121,0 +erock,121,0 +estone,121,0 +enderdragonegg,122,0 +endegg,122,0 +dragonegg,122,0 +degg,122,0 +bossegg,122,0 +begg,122,0 +redstonelamp,123,0 +redlamp,123,0 +rslamp,123,0 +woodendoublestep,125,0 +woodendstep,125,0 +wooddoublestep,125,0 +wooddstep,125,0 +wdoublestep,125,0 +wdstep,125,0 +doublewoodenstep,125,0 +dwoodenstep,125,0 +doublewoodstep,125,0 +dwoodstep,125,0 +doublewstep,125,0 +dwstep,125,0 +woodendoubleslab,125,0 +woodendslab,125,0 +wooddoubleslab,125,0 +wooddslab,125,0 +wdoubleslab,125,0 +wdslab,125,0 +doublewoodenslab,125,0 +dwoodenslab,125,0 +doublewoodslab,125,0 +dwoodslab,125,0 +doublewslab,125,0 +dwslab,125,0 +woodendoublehalfblock,125,0 +woodendhalfblock,125,0 +wooddoublehalfblock,125,0 +wooddhalfblock,125,0 +wdoublehalfblock,125,0 +wdhalfblock,125,0 +doublewoodenhalfblock,125,0 +dwoodenhalfblock,125,0 +doublewoodhalfblock,125,0 +dwoodhalfblock,125,0 +doublewhalfblock,125,0 +dwhalfblock,125,0 +oakwoodendoublehalfblock,125,0 +oakwoodendhalfblock,125,0 +oakwooddoublehalfblock,125,0 +oakwooddhalfblock,125,0 +oakwdoublehalfblock,125,0 +oakwdhalfblock,125,0 +oakdoublewoodenhalfblock,125,0 +oakdwoodenhalfblock,125,0 +oakdoublewoodhalfblock,125,0 +oakdwoodhalfblock,125,0 +oakdoublewhalfblock,125,0 +oakdwhalfblock,125,0 +oakdoublehalfblock,125,0 +oakdhalfblock,125,0 +odhalfblock,125,0 +oakwoodendoublestep,125,0 +oakwoodendstep,125,0 +oakwooddoublestep,125,0 +oakwooddstep,125,0 +oakwdoublestep,125,0 +oakwdstep,125,0 +oakdoublewoodenstep,125,0 +oakdwoodenstep,125,0 +oakdoublewoodstep,125,0 +oakdwoodstep,125,0 +oakdoublewstep,125,0 +oakdwstep,125,0 +oakdoublestep,125,0 +oakdstep,125,0 +odstep,125,0 +oakwoodendoubleslab,125,0 +oakwoodendslab,125,0 +oakwooddoubleslab,125,0 +oakwooddslab,125,0 +oakwdoubleslab,125,0 +oakwdslab,125,0 +oakdoublewoodenslab,125,0 +oakdwoodenslab,125,0 +oakdoublewoodslab,125,0 +oakdwoodslab,125,0 +oakdoublewslab,125,0 +oakdwslab,125,0 +oakdoubleslab,125,0 +oakdslab,125,0 +odslab,125,0 +sprucewoodendoublestep,125,1 +sprucewoodendstep,125,1 +sprucewooddoublestep,125,1 +sprucewooddstep,125,1 +sprucewdoublestep,125,1 +sprucewdstep,125,1 +sprucedoublewoodenstep,125,1 +sprucedwoodenstep,125,1 +sprucedoublewoodstep,125,1 +sprucedwoodstep,125,1 +sprucedoublewstep,125,1 +sprucedwstep,125,1 +sprucedoublestep,125,1 +sprucedstep,125,1 +sprucewoodendoubleslab,125,1 +sprucewoodendslab,125,1 +sprucewooddoubleslab,125,1 +sprucewooddslab,125,1 +sprucewdoubleslab,125,1 +sprucewdslab,125,1 +sprucedoublewoodenslab,125,1 +sprucedwoodenslab,125,1 +sprucedoublewoodslab,125,1 +sprucedwoodslab,125,1 +sprucedoublewslab,125,1 +sprucedwslab,125,1 +sprucedoubleslab,125,1 +sprucedslab,125,1 +sprucewoodendoublehalfblock,125,1 +sprucewoodendhalfblock,125,1 +sprucewooddoublehalfblock,125,1 +sprucewooddhalfblock,125,1 +sprucewdoublehalfblock,125,1 +sprucewdhalfblock,125,1 +sprucedoublewoodenhalfblock,125,1 +sprucedwoodenhalfblock,125,1 +sprucedoublewoodhalfblock,125,1 +sprucedwoodhalfblock,125,1 +sprucedoublewhalfblock,125,1 +sprucedwhalfblock,125,1 +sprucedoublehalfblock,125,1 +sprucedhalfblock,125,1 +darkwoodendoublestep,125,1 +darkwoodendstep,125,1 +darkwooddoublestep,125,1 +darkwooddstep,125,1 +darkwdoublestep,125,1 +darkwdstep,125,1 +darkdoublewoodenstep,125,1 +darkdwoodenstep,125,1 +darkdoublewoodstep,125,1 +darkdwoodstep,125,1 +darkdoublewstep,125,1 +darkdwstep,125,1 +darkdoublestep,125,1 +darkdstep,125,1 +ddstep,125,1 +darkwoodendoubleslab,125,1 +darkwoodendslab,125,1 +darkwooddoubleslab,125,1 +darkwooddslab,125,1 +darkwdoubleslab,125,1 +darkwdslab,125,1 +darkdoublewoodenslab,125,1 +darkdwoodenslab,125,1 +darkdoublewoodslab,125,1 +darkdwoodslab,125,1 +darkdoublewslab,125,1 +darkdwslab,125,1 +darkdoubleslab,125,1 +darkdslab,125,1 +ddslab,125,1 +darkwoodendoublehalfblock,125,1 +darkwoodendhalfblock,125,1 +darkwooddoublehalfblock,125,1 +darkwooddhalfblock,125,1 +darkwdoublehalfblock,125,1 +darkwdhalfblock,125,1 +darkdoublewoodenhalfblock,125,1 +darkdwoodenhalfblock,125,1 +darkdoublewoodhalfblock,125,1 +darkdwoodhalfblock,125,1 +darkdoublewhalfblock,125,1 +darkdwhalfblock,125,1 +darkdoublehalfblock,125,1 +darkdhalfblock,125,1 +ddhalfblock,125,1 +birchwoodendoublestep,125,2 +birchwoodendstep,125,2 +birchwooddoublestep,125,2 +birchwooddstep,125,2 +birchwdoublestep,125,2 +birchwdstep,125,2 +birchdoublewoodenstep,125,2 +birchdwoodenstep,125,2 +birchdoublewoodstep,125,2 +birchdwoodstep,125,2 +birchdoublewstep,125,2 +birchdwstep,125,2 +birchdoublestep,125,2 +birchdstep,125,2 +birchwoodendoubleslab,125,2 +birchwoodendslab,125,2 +birchwooddoubleslab,125,2 +birchwooddslab,125,2 +birchwdoubleslab,125,2 +birchwdslab,125,2 +birchdoublewoodenslab,125,2 +birchdwoodenslab,125,2 +birchdoublewoodslab,125,2 +birchdwoodslab,125,2 +birchdoublewslab,125,2 +birchdwslab,125,2 +birchdoubleslab,125,2 +birchdslab,125,2 +birchwoodendoublehalfblock,125,2 +birchwoodendhalfblock,125,2 +birchwooddoublehalfblock,125,2 +birchwooddhalfblock,125,2 +birchwdoublehalfblock,125,2 +birchwdhalfblock,125,2 +birchdoublewoodenhalfblock,125,2 +birchdwoodenhalfblock,125,2 +birchdoublewoodhalfblock,125,2 +birchdwoodhalfblock,125,2 +birchdoublewhalfblock,125,2 +birchdwhalfblock,125,2 +birchdoublehalfblock,125,2 +birchdhalfblock,125,2 +lightwoodendoublehalfblock,125,2 +lightwoodendhalfblock,125,2 +lightwooddoublehalfblock,125,2 +lightwooddhalfblock,125,2 +lightwdoublehalfblock,125,2 +lightwdhalfblock,125,2 +lightdoublewoodenhalfblock,125,2 +lightdwoodenhalfblock,125,2 +lightdoublewoodhalfblock,125,2 +lightdwoodhalfblock,125,2 +lightdoublewhalfblock,125,2 +lightdwhalfblock,125,2 +lightdoublehalfblock,125,2 +lightdhalfblock,125,2 +ldhalfblock,125,2 +lightwoodendoublestep,125,2 +lightwoodendstep,125,2 +lightwooddoublestep,125,2 +lightwooddstep,125,2 +lightwdoublestep,125,2 +lightwdstep,125,2 +lightdoublewoodenstep,125,2 +lightdwoodenstep,125,2 +lightdoublewoodstep,125,2 +lightdwoodstep,125,2 +lightdoublewstep,125,2 +lightdwstep,125,2 +lightdoublestep,125,2 +lightdstep,125,2 +ldstep,125,2 +lightwoodendoubleslab,125,2 +lightwoodendslab,125,2 +lightwooddoubleslab,125,2 +lightwooddslab,125,2 +lightwdoubleslab,125,2 +lightwdslab,125,2 +lightdoublewoodenslab,125,2 +lightdwoodenslab,125,2 +lightdoublewoodslab,125,2 +lightdwoodslab,125,2 +lightdoublewslab,125,2 +lightdwslab,125,2 +lightdoubleslab,125,2 +lightdslab,125,2 +ldslab,125,2 +junglewoodendoublestep,125,3 +junglewoodendstep,125,3 +junglewooddoublestep,125,3 +junglewooddstep,125,3 +junglewdoublestep,125,3 +junglewdstep,125,3 +jungledoublewoodenstep,125,3 +jungledwoodenstep,125,3 +jungledoublewoodstep,125,3 +jungledwoodstep,125,3 +jungledoublewstep,125,3 +jungledwstep,125,3 +jungledoublestep,125,3 +jungledstep,125,3 +jdstep,125,3 +junglewoodendoubleslab,125,3 +junglewoodendslab,125,3 +junglewooddoubleslab,125,3 +junglewooddslab,125,3 +junglewdoubleslab,125,3 +junglewdslab,125,3 +jungledoublewoodenslab,125,3 +jungledwoodenslab,125,3 +jungledoublewoodslab,125,3 +jungledwoodslab,125,3 +jungledoublewslab,125,3 +jungledwslab,125,3 +jungledoubleslab,125,3 +jungledslab,125,3 +jdslab,125,3 +junglewoodendoublehalfblock,125,3 +junglewoodendhalfblock,125,3 +junglewooddoublehalfblock,125,3 +junglewooddhalfblock,125,3 +junglewdoublehalfblock,125,3 +junglewdhalfblock,125,3 +jungledoublewoodenhalfblock,125,3 +jungledwoodenhalfblock,125,3 +jungledoublewoodhalfblock,125,3 +jungledwoodhalfblock,125,3 +jungledoublewhalfblock,125,3 +jungledwhalfblock,125,3 +jungledoublehalfblock,125,3 +jungledhalfblock,125,3 +jdhalfblock,125,3 +forestwoodendoublehalfblock,125,3 +forestwoodendhalfblock,125,3 +forestwooddoublehalfblock,125,3 +forestwooddhalfblock,125,3 +forestwdoublehalfblock,125,3 +forestwdhalfblock,125,3 +forestdoublewoodenhalfblock,125,3 +forestdwoodenhalfblock,125,3 +forestdoublewoodhalfblock,125,3 +forestdwoodhalfblock,125,3 +forestdoublewhalfblock,125,3 +forestdwhalfblock,125,3 +forestdoublehalfblock,125,3 +forestdhalfblock,125,3 +fdhalfblock,125,3 +forestwoodendoublestep,125,3 +forestwoodendstep,125,3 +forestwooddoublestep,125,3 +forestwooddstep,125,3 +forestwdoublestep,125,3 +forestwdstep,125,3 +forestdoublewoodenstep,125,3 +forestdwoodenstep,125,3 +forestdoublewoodstep,125,3 +forestdwoodstep,125,3 +forestdoublewstep,125,3 +forestdwstep,125,3 +forestdoublestep,125,3 +forestdstep,125,3 +fdstep,125,3 +forestwoodendoubleslab,125,3 +forestwoodendslab,125,3 +forestwooddoubleslab,125,3 +forestwooddslab,125,3 +forestwdoubleslab,125,3 +forestwdslab,125,3 +forestdoublewoodenslab,125,3 +forestdwoodenslab,125,3 +forestdoublewoodslab,125,3 +forestdwoodslab,125,3 +forestdoublewslab,125,3 +forestdwslab,125,3 +forestdoubleslab,125,3 +forestdslab,125,3 +fdslab,125,3 +acaciawoodendoublestep,125,4 +acaciawoodendstep,125,4 +acaciawooddoublestep,125,4 +acaciawooddstep,125,4 +acaciawdoublestep,125,4 +acaciawdstep,125,4 +acaciadoublewoodenstep,125,4 +acaciadwoodenstep,125,4 +acaciadoublewoodstep,125,4 +acaciadwoodstep,125,4 +acaciadoublewstep,125,4 +acaciadwstep,125,4 +acaciadoublestep,125,4 +acaciadstep,125,4 +adstep,125,4 +acaciawoodendoubleslab,125,4 +acaciawoodendslab,125,4 +acaciawooddoubleslab,125,4 +acaciawooddslab,125,4 +acaciawdoubleslab,125,4 +acaciawdslab,125,4 +acaciadoublewoodenslab,125,4 +acaciadwoodenslab,125,4 +acaciadoublewoodslab,125,4 +acaciadwoodslab,125,4 +acaciadoublewslab,125,4 +acaciadwslab,125,4 +acaciadoubleslab,125,4 +acaciadslab,125,4 +adslab,125,4 +acaciawoodendoublehalfblock,125,4 +acaciawoodendhalfblock,125,4 +acaciawooddoublehalfblock,125,4 +acaciawooddhalfblock,125,4 +acaciawdoublehalfblock,125,4 +acaciawdhalfblock,125,4 +acaciadoublewoodenhalfblock,125,4 +acaciadwoodenhalfblock,125,4 +acaciadoublewoodhalfblock,125,4 +acaciadwoodhalfblock,125,4 +acaciadoublewhalfblock,125,4 +acaciadwhalfblock,125,4 +acaciadoublehalfblock,125,4 +acaciadhalfblock,125,4 +adhalfblock,125,4 +darkoakwoodendoublehalfblock,125,5 +darkoakwoodendhalfblock,125,5 +darkoakwooddoublehalfblock,125,5 +darkoakwooddhalfblock,125,5 +darkoakwdoublehalfblock,125,5 +darkoakwdhalfblock,125,5 +darkoakdoublewoodenhalfblock,125,5 +darkoakdwoodenhalfblock,125,5 +darkoakdoublewoodhalfblock,125,5 +darkoakdwoodhalfblock,125,5 +darkoakdoublewhalfblock,125,5 +darkoakdwhalfblock,125,5 +darkoakdoublehalfblock,125,5 +darkoakdhalfblock,125,5 +dodhalfblock,125,5 +darkoakwoodendoublestep,125,5 +darkoakwoodendstep,125,5 +darkoakwooddoublestep,125,5 +darkoakwooddstep,125,5 +darkoakwdoublestep,125,5 +darkoakwdstep,125,5 +darkoakdoublewoodenstep,125,5 +darkoakdwoodenstep,125,5 +darkoakdoublewoodstep,125,5 +darkoakdwoodstep,125,5 +darkoakdoublewstep,125,5 +darkoakdwstep,125,5 +darkoakdoublestep,125,5 +darkoakdstep,125,5 +dodstep,125,5 +darkoakwoodendoubleslab,125,5 +darkoakwoodendslab,125,5 +darkoakwooddoubleslab,125,5 +darkoakwooddslab,125,5 +darkoakwdoubleslab,125,5 +darkoakwdslab,125,5 +darkoakdoublewoodenslab,125,5 +darkoakdwoodenslab,125,5 +darkoakdoublewoodslab,125,5 +darkoakdwoodslab,125,5 +darkoakdoublewslab,125,5 +darkoakdwslab,125,5 +darkoakdoubleslab,125,5 +darkoakdslab,125,5 +dodslab,125,5 +woodenstep,126,0 +woodstep,126,0 +wstep,126,0 +woodenslab,126,0 +woodslab,126,0 +wslab,126,0 +woodenhalfblock,126,0 +woodhalfblock,126,0 +whalfblock,126,0 +oakwoodenstep,126,0 +oakwoodstep,126,0 +oakwstep,126,0 +oakstep,126,0 +ostep,126,0 +oakwoodenslab,126,0 +oakwoodslab,126,0 +oakwslab,126,0 +oakslab,126,0 +oslab,126,0 +oakwoodenhalfblock,126,0 +oakwoodhalfblock,126,0 +oakwhalfblock,126,0 +oakhalfblock,126,0 +ohalfblock,126,0 +sprucewoodenstep,126,1 +sprucewoodstep,126,1 +sprucewstep,126,1 +sprucestep,126,1 +sprucewoodenslab,126,1 +sprucewoodslab,126,1 +sprucewslab,126,1 +spruceslab,126,1 +sprucewoodenhalfblock,126,1 +sprucewoodhalfblock,126,1 +sprucewhalfblock,126,1 +sprucehalfblock,126,1 +darkwoodenstep,126,1 +darkwoodstep,126,1 +darkwstep,126,1 +darkstep,126,1 +darkwoodenslab,126,1 +darkwoodslab,126,1 +darkwslab,126,1 +darkslab,126,1 +darkwoodenhalfblock,126,1 +darkwoodhalfblock,126,1 +darkwhalfblock,126,1 +darkhalfblock,126,1 +birchwoodenstep,126,2 +birchwoodstep,126,2 +birchwstep,126,2 +birchstep,126,2 +birchwoodenslab,126,2 +birchwoodslab,126,2 +birchwslab,126,2 +birchslab,126,2 +birchwoodenhalfblock,126,2 +birchwoodhalfblock,126,2 +birchwhalfblock,126,2 +birchhalfblock,126,2 +lightwoodenstep,126,2 +lightwoodstep,126,2 +lightwstep,126,2 +lightstep,126,2 +lstep,126,2 +lightwoodenslab,126,2 +lightwoodslab,126,2 +lightwslab,126,2 +lightslab,126,2 +lslab,126,2 +lightwoodenhalfblock,126,2 +lightwoodhalfblock,126,2 +lightwhalfblock,126,2 +lighthalfblock,126,2 +lhalfblock,126,2 +junglewoodenstep,126,3 +junglewoodstep,126,3 +junglewstep,126,3 +junglestep,126,3 +jstep,126,3 +junglewoodenslab,126,3 +junglewoodslab,126,3 +junglewslab,126,3 +jungleslab,126,3 +jslab,126,3 +junglewoodenhalfblock,126,3 +junglewoodhalfblock,126,3 +junglewhalfblock,126,3 +junglehalfblock,126,3 +jhalfblock,126,3 +forestwoodenstep,126,3 +forestwoodstep,126,3 +forestwstep,126,3 +foreststep,126,3 +fstep,126,3 +forestwoodenslab,126,3 +forestwoodslab,126,3 +forestwslab,126,3 +forestslab,126,3 +fslab,126,3 +forestwoodenhalfblock,126,3 +forestwoodhalfblock,126,3 +forestwhalfblock,126,3 +foresthalfblock,126,3 +fhalfblock,126,3 +acaciawoodenstep,126,4 +acaciawoodstep,126,4 +acaciawstep,126,4 +acaciastep,126,4 +astep,126,4 +acaciawoodenslab,126,4 +acaciawoodslab,126,4 +acaciawslab,126,4 +acaciaslab,126,4 +aslab,126,4 +acaciawoodenhalfblock,126,4 +acaciawoodhalfblock,126,4 +acaciawhalfblock,126,4 +acaciahalfblock,126,4 +ahalfblock,126,4 +darkoakwoodenstep,126,5 +darkoakwoodstep,126,5 +darkoakwstep,126,5 +darkoakstep,126,5 +dostep,126,5 +darkoakwoodenslab,126,5 +darkoakwoodslab,126,5 +darkoakwslab,126,5 +darkoakslab,126,5 +doslab,126,5 +darkoakwoodenhalfblock,126,5 +darkoakwoodhalfblock,126,5 +darkoakwhalfblock,126,5 +darkoakhalfblock,126,5 +dohalfblock,126,5 +cocoaplant,127,0 +cocoplant,127,0 +cplant,127,0 +cocoafruit,127,0 +cocofruit,127,0 +cfruit,127,0 +cocoapod,127,0 +cocopod,127,0 +cpod,127,0 +sandstonestairs,128,0 +sandstairs,128,0 +sandsstairs,128,0 +sstonestairs,128,0 +ssstairs,128,0 +sandstair,128,0 +sandstonestair,128,0 +sandsstair,128,0 +sstonestair,128,0 +ssstair,128,0 +emeraldore,129,0 +eore,129,0 +oreemerald,129,0 +oree,129,0 +enderchest,130,0 +endchest,130,0 +echest,130,0 +chestender,130,0 +chestend,130,0 +cheste,130,0 +endercontainer,130,0 +endcontainer,130,0 +econtainer,130,0 +tripwirehook,131,0 +tripwire,131,0 +trip,131,0 +tripwirelever,131,0 +triphook,131,0 +emeraldblock,133,0 +blockemerald,133,0 +eblock,133,0 +blocke,133,0 +sprucewoodenstairs,134,0 +sprucewoodstairs,134,0 +sprucewstairs,134,0 +sprucestairs,134,0 +darkwoodenstairs,134,0 +darkwoodstairs,134,0 +darkwstairs,134,0 +darkstairs,134,0 +dstairs,134,0 +sprucewoodenstair,134,0 +sprucewoodstair,134,0 +sprucewstair,134,0 +sprucestair,134,0 +darkwoodenstair,134,0 +darkwoodstair,134,0 +darkwstair,134,0 +darkstair,134,0 +dstair,134,0 +birchwoodenstairs,135,0 +birchwoodstairs,135,0 +birchwstairs,135,0 +birchstairs,135,0 +lightwoodenstairs,135,0 +lightwoodstairs,135,0 +lightwstairs,135,0 +lightstairs,135,0 +lstairs,135,0 +birchwoodenstair,135,0 +birchwoodstair,135,0 +birchwstair,135,0 +birchstair,135,0 +lightwoodenstair,135,0 +lightwoodstair,135,0 +lightwstair,135,0 +lightstair,135,0 +lstair,135,0 +junglewoodenstairs,136,0 +junglewoodstairs,136,0 +junglewstairs,136,0 +junglestairs,136,0 +jstairs,136,0 +forestwoodenstairs,136,0 +forestwoodstairs,136,0 +forestwstairs,136,0 +foreststairs,136,0 +fstairs,136,0 +junglewoodenstair,136,0 +junglewoodstair,136,0 +junglewstair,136,0 +junglestair,136,0 +jstair,136,0 +forestwoodenstair,136,0 +forestwoodstair,136,0 +forestwstair,136,0 +foreststair,136,0 +fstair,136,0 +commandblock,137,0 +blockcommand,137,0 +cmdblock,137,0 +blockcmd,137,0 +macroblock,137,0 +blockmacro,137,0 +beacon,138,0 +beaconblock,138,0 +cobblestonewall,139,0 +cstonewall,139,0 +cobblewall,139,0 +cobblestonefence,139,0 +cstonefence,139,0 +cobblefence,139,0 +cswall,139,0 +csfence,139,0 +cwall,139,0 +cfence,139,0 +mosscobblestonewall,139,1 +mosscstonewall,139,1 +mosscobblewall,139,1 +mcobblestonewall,139,1 +mcstonewall,139,1 +mcobblewall,139,1 +mosscobblestonefence,139,1 +mosscstonefence,139,1 +mosscobblefence,139,1 +mcobblestonefence,139,1 +mcstonefence,139,1 +mcobblefence,139,1 +mcswall,139,0 +mcsfence,139,0 +mcwall,139,0 +mcfence,139,0 +plantedcarrot,141,0 +plantcarrot,141,0 +carrots,141,0 +growingcarrot,141,0 +potatoplant,142,0 +potatoes,142,0 +plantedpotato,142,0 +plantpotato,142,0 +growingpotato,142,0 +woodenbutton,143,0 +woodenplankbutton,143,0 +woodplankbutton,143,0 +wplankbutton,143,0 +plankbutton,143,0 +woodbutton,143,0 +wbutton,143,0 +anvil,145,0 +slightlydamagedanvil,145,1 +slightdamageanvil,145,1 +damagedanvil,145,1 +verydamagedanvil,145,2 +trapchest,146,0 +trappedchest,146,0 +chesttrapped,146,0 +chesttrap,146,0 +goldpressureplate,147,0 +weightedgoldpressureplate,147,0 +weightgoldpressureplate,147,0 +wgoldpressureplate,147,0 +weightedgoldpressplate,147,0 +weightgoldpressplate,147,0 +wgoldpressplate,147,0 +goldpressplate,147,0 +weightedgoldpplate,147,0 +weightgoldpplate,147,0 +wgoldpplate,147,0 +goldpplate,147,0 +weightedgoldplate,147,0 +weightgoldplate,147,0 +wgoldplate,147,0 +goldplate,147,0 +weightedgpressureplate,147,0 +weightgpressureplate,147,0 +wgpressureplate,147,0 +gpressureplate,147,0 +weightedgpressplate,147,0 +weightgpressplate,147,0 +wgpressplate,147,0 +gpressplate,147,0 +weightedgpplate,147,0 +weightgpplate,147,0 +wgpplate,147,0 +gpplate,147,0 +weightedgplate,147,0 +weightgplate,147,0 +wgplate,147,0 +gplate,147,0 +ironpressureplate,148,0 +weightedironpressureplate,148,0 +weightironpressureplate,148,0 +wironpressureplate,148,0 +weightedironpressplate,148,0 +weightironpressplate,148,0 +wironpressplate,148,0 +ironpressplate,148,0 +weightedironpplate,148,0 +weightironpplate,148,0 +wironpplate,148,0 +ironpplate,148,0 +weightedironplate,148,0 +weightironplate,148,0 +wironplate,148,0 +ironplate,148,0 +weightedipressureplate,148,0 +weightipressureplate,148,0 +wipressureplate,148,0 +ipressureplate,148,0 +weightedipressplate,148,0 +weightipressplate,148,0 +wipressplate,148,0 +ipressplate,148,0 +weightedipplate,148,0 +weightipplate,148,0 +wipplate,148,0 +ipplate,148,0 +weightediplate,148,0 +weightiplate,148,0 +wiplate,148,0 +iplate,148,0 +daylightsensor,151,0 +daylightsense,151,0 +lightsensor,151,0 +lightsense,151,0 +daysensor,151,0 +daysense,151,0 +timesensor,151,0 +timesense,151,0 +redstoneblock,152,0 +rstoneblock,152,0 +redsblock,152,0 +rsblock,152,0 +blockredstone,152,0 +blockrstone,152,0 +blockreds,152,0 +blockrs,152,0 +netherquartzore,153,0 +hellquartzore,153,0 +deathquartzore,153,0 +nquartzore,153,0 +hquartzore,153,0 +dquartzore,153,0 +quartzore,153,0 +netherqore,153,0 +hellqore,153,0 +deathqore,153,0 +nqore,153,0 +hqore,153,0 +dqore,153,0 +qore,153,0 +hopper,154,0 +chestpuller,154,0 +chestpull,154,0 +cheststorer,154,0 +cheststore,154,0 +itempuller,154,0 +itempull,154,0 +itemstorer,154,0 +itemstore,154,0 +quartzblock,155,0 +netherquartzblock,155,0 +nqblock,155,0 +qblock,155,0 +chiseledquartzblock,155,1 +chiselquartzblock,155,1 +cquartzblock,155,1 +cqblock,155,1 +pillarquartzblock,155,2 +pquartzblock,155,2 +pqblock,155,2 +quartzstairs,156,0 +qstairs,156,0 +quartzstair,156,0 +qstair,156,0 +activatorrails,157,0 +activaterails,157,0 +triggerrails,157,0 +arails,157,0 +trails,157,0 +activatorrail,157,0 +activaterail,157,0 +triggerrail,157,0 +arail,157,0 +trail,157,0 +activatortrack,157,0 +activatetrack,157,0 +triggertrack,157,0 +atrack,157,0 +ttrack,157,0 +dropper,158,0 +drop,158,0 +chestdispenser,158,0 +chestdispense,158,0 +chestdropper,158,0 +chestdrop,158,0 +whiteclay,159,0 +whitesclay,159,0 +whitestainedclay,159,0 +wclay,159,0 +wsclay,159,0 +wstainedclay,159,0 +sclay,159,0 +stainedclay,159,0 +orangeclay,159,1 +orangesclay,159,1 +orangestainedclay,159,1 +oclay,159,1 +osclay,159,1 +ostainedclay,159,1 +magentaclay,159,2 +magentasclay,159,2 +magentastainedclay,159,2 +mclay,159,2 +msclay,159,2 +mstainedclay,159,2 +lightblueclay,159,3 +lightbluesclay,159,3 +lightbluestainedclay,159,3 +lblueclay,159,3 +lbluesclay,159,3 +lbluestainedclay,159,3 +lightbluclay,159,3 +lightblusclay,159,3 +lightblustainedclay,159,3 +lbluclay,159,3 +lblusclay,159,3 +lblustainedclay,159,3 +lbclay,159,3 +lbsclay,159,3 +lbstainedclay,159,3 +yellowclay,159,4 +yellowsclay,159,4 +yellowstainedclay,159,4 +yclay,159,4 +ysclay,159,4 +ystainedclay,159,4 +lightgreenclay,159,5 +lightgreensclay,159,5 +lightgreenstainedclay,159,5 +lgreenclay,159,5 +lgreensclay,159,5 +lgreenstainedclay,159,5 +lightgreclay,159,5 +lightgresclay,159,5 +lightgrestainedclay,159,5 +lgreclay,159,5 +lgresclay,159,5 +lgrestainedclay,159,5 +limeclay,159,5 +limesclay,159,5 +limestainedclay,159,5 +lclay,159,5 +lsclay,159,5 +lstainedclay,159,5 +pinkclay,159,6 +pinksclay,159,6 +pinkstainedclay,159,6 +piclay,159,6 +pisclay,159,6 +pistainedclay,159,6 +darkgrayclay,159,7 +darkgraysclay,159,7 +darkgraystainedclay,159,7 +dgrayclay,159,7 +dgraysclay,159,7 +dgraystainedclay,159,7 +darkgreyclay,159,7 +darkgreeysclay,159,7 +darkgreystainedclay,159,7 +dgreyclay,159,7 +dgreysclay,159,7 +dgreystainedclay,159,7 +darkgraclay,159,7 +darkgrasclay,159,7 +darkgrastainedclay,159,7 +dgraclay,159,7 +dgrasclay,159,7 +dgrastainedclay,159,7 +grayclay,159,7 +graysclay,159,7 +graystainedclay,159,7 +greyclay,159,7 +greysclay,159,7 +greystainedclay,159,7 +graclay,159,7 +grasclay,159,7 +grastainedclay,159,7 +lightgrayclay,159,8 +lightgraysclay,159,8 +lightgraystainedclay,159,8 +lgrayclay,159,8 +lgraysclay,159,8 +lgraystainedclay,159,8 +lightgreyclay,159,8 +lightgreysclay,159,8 +lightgreystainedclay,159,8 +lgreyclay,159,8 +lgreysclay,159,8 +lgreystainedclay,159,8 +lightgraclay,159,8 +lightgrasclay,159,8 +lightgrastainedclay,159,8 +lgraclay,159,8 +lgrasclay,159,8 +lgrastainedclay,159,8 +silverclay,159,8 +silversclay,159,8 +silverstainedclay,159,8 +siclay,159,8 +siasclay,159,8 +siastainedclay,159,8 +cyanclay,159,9 +cyansclay,159,9 +cyanstainedclay,159,9 +cclay,159,9 +csclay,159,9 +cstainedclay,159,9 +purpleclay,159,10 +purplesclay,159,10 +purplestainedclay,159,10 +puclay,159,10 +pusclay,159,10 +pustainedclay,159,10 +blueclay,159,11 +bluesclay,159,11 +bluestainedclay,159,11 +bluclay,159,11 +blusclay,159,11 +blustainedclay,159,11 +brownclay,159,12 +brownsclay,159,12 +brownstainedclay,159,12 +broclay,159,12 +brosclay,159,12 +brostainedclay,159,12 +darkgreenclay,159,13 +darkgreensclay,159,13 +darkgreenstainedclay,159,13 +dgreenclay,159,13 +dgreensclay,159,13 +dgreenstainedclay,159,13 +greenclay,159,13 +greensclay,159,13 +greenstainedclay,159,13 +darkgreclay,159,13 +darkgresclay,159,13 +darkgrestainedclay,159,13 +dgreclay,159,13 +dgresclay,159,13 +dgrestainedclay,159,13 +greclay,159,13 +gresclay,159,13 +grestainedclay,159,13 +redclay,159,14 +redsclay,159,14 +redstainedclay,159,14 +rclay,159,14 +rsclay,159,14 +rstainedclay,159,14 +blackclay,159,15 +blacksclay,159,15 +blackstainedclay,159,15 +blaclay,159,15 +blasclay,159,15 +blastainedclay,159,15 +whiteglasspane,160,0 +whitesglasspane,160,0 +whitestainedglasspane,160,0 +wglasspane,160,0 +wsglasspane,160,0 +wstainedglasspane,160,0 +sglasspane,160,0 +stainedglasspane,160,0 +orangeglasspane,160,1 +orangesglasspane,160,1 +orangestainedglasspane,160,1 +oglasspane,160,1 +osglasspane,160,1 +ostainedglasspane,160,1 +magentaglasspane,160,2 +magentasglasspane,160,2 +magentastainedglasspane,160,2 +mglasspane,160,2 +msglasspane,160,2 +mstainedglasspane,160,2 +lightblueglasspane,160,3 +lightbluesglasspane,160,3 +lightbluestainedglasspane,160,3 +lblueglasspane,160,3 +lbluesglasspane,160,3 +lbluestainedglasspane,160,3 +lightbluglasspane,160,3 +lightblusglasspane,160,3 +lightblustainedglasspane,160,3 +lbluglasspane,160,3 +lblusglasspane,160,3 +lblustainedglasspane,160,3 +lbglasspane,160,3 +lbsglasspane,160,3 +lbstainedglasspane,160,3 +yellowglasspane,160,4 +yellowsglasspane,160,4 +yellowstainedglasspane,160,4 +yglasspane,160,4 +ysglasspane,160,4 +ystainedglasspane,160,4 +lightgreenglasspane,160,5 +lightgreensglasspane,160,5 +lightgreenstainedglasspane,160,5 +lgreenglasspane,160,5 +lgreensglasspane,160,5 +lgreenstainedglasspane,160,5 +lightgreglasspane,160,5 +lightgresglasspane,160,5 +lightgrestainedglasspane,160,5 +lgreglasspane,160,5 +lgresglasspane,160,5 +lgrestainedglasspane,160,5 +limeglasspane,160,5 +limesglasspane,160,5 +limestainedglasspane,160,5 +lglasspane,160,5 +lsglasspane,160,5 +lstainedglasspane,160,5 +pinkglasspane,160,6 +pinksglasspane,160,6 +pinkstainedglasspane,160,6 +piglasspane,160,6 +pisglasspane,160,6 +pistainedglasspane,160,6 +darkgrayglasspane,160,7 +darkgraysglasspane,160,7 +darkgraystainedglasspane,160,7 +dgrayglasspane,160,7 +dgraysglasspane,160,7 +dgraystainedglasspane,160,7 +darkgreyglasspane,160,7 +darkgreysglasspane,160,7 +darkgreystainedglasspane,160,7 +dgreyglasspane,160,7 +dgreysglasspane,160,7 +dgreystainedglasspane,160,7 +darkgraglasspane,160,7 +darkgrasglasspane,160,7 +darkgrastainedglasspane,160,7 +dgraglasspane,160,7 +dgrasglasspane,160,7 +dgrastainedglasspane,160,7 +grayglasspane,160,7 +graysglasspane,160,7 +graystainedglasspane,160,7 +greyglasspane,160,7 +greysglasspane,160,7 +greystainedglasspane,160,7 +graglasspane,160,7 +grasglasspane,160,7 +grastainedglasspane,160,7 +lightgrayglasspane,160,8 +lightgraysglasspane,160,8 +lightgraystainedglasspane,160,8 +lgrayglasspane,160,8 +lgraysglasspane,160,8 +lgraystainedglasspane,160,8 +lightgreyglasspane,160,8 +lightgreysglasspane,160,8 +lightgreystainedglasspane,160,8 +lgreyglasspane,160,8 +lgreysglasspane,160,8 +lgreystainedglasspane,160,8 +lightgraglasspane,160,8 +lightgrasglasspane,160,8 +lightgrastainedglasspane,160,8 +lgraglasspane,160,8 +lgrasglasspane,160,8 +lgrastainedglasspane,160,8 +silverglasspane,160,8 +silversglasspane,160,8 +silverstainedglasspane,160,8 +siglasspane,160,8 +siasglasspane,160,8 +siastainedglasspane,160,8 +cyanglasspane,160,9 +cyansglasspane,160,9 +cyanstainedglasspane,160,9 +cglasspane,160,9 +csglasspane,160,9 +cstainedglasspane,160,9 +purpleglasspane,160,10 +purplesglasspane,160,10 +purplestainedglasspane,160,10 +puglasspane,160,10 +pusglasspane,160,10 +pustainedglasspane,160,10 +blueglasspane,160,11 +bluesglasspane,160,11 +bluestainedglasspane,160,11 +bluglasspane,160,11 +blusglasspane,160,11 +blustainedglasspane,160,11 +brownglasspane,160,12 +brownsglasspane,160,12 +brownstainedglasspane,160,12 +broglasspane,160,12 +brosglasspane,160,12 +brostainedglasspane,160,12 +darkgreenglasspane,160,13 +darkgreensglasspane,160,13 +darkgreenstainedglasspane,160,13 +dgreenglasspane,160,13 +dgreensglasspane,160,13 +dgreenstainedglasspane,160,13 +greenglasspane,160,13 +greensglasspane,160,13 +greenstainedglasspane,160,13 +darkgreglasspane,160,13 +darkgresglasspane,160,13 +darkgrestainedglasspane,160,13 +dgreglasspane,160,13 +dgresglasspane,160,13 +dgrestainedglasspane,160,13 +greglasspane,160,13 +gresglasspane,160,13 +grestainedglasspane,160,13 +redglasspane,160,14 +redsglasspane,160,14 +redstainedglasspane,160,14 +rglasspane,160,14 +rsglasspane,160,14 +rstainedglasspane,160,14 +blackglasspane,160,15 +blacksglasspane,160,15 +blackstainedglasspane,160,15 +blaglasspane,160,15 +blasglasspane,160,15 +blastainedglasspane,160,15 +acacialeaves,161,0 +acaciatreeleaves,161,0 +acacialogleaves,161,0 +acaciatrunkleaves,161,0 +acaciawoodleaves,161,0 +aleaves,161,0 +atreeleaves,161,0 +alogleaves,161,0 +atrunkleaves,161,0 +awoodleaves,161,0 +acacialeave,161,0 +acaciatreeleave,161,0 +acacialogleave,161,0 +acaciatrunkleave,161,0 +acaciawoodleave,161,0 +aleave,161,0 +atreeleave,161,0 +alogleave,161,0 +atrunkleave,161,0 +awoodleave,161,0 +acaciatreeleaf,161,0 +acacialogleaf,161,0 +acaciatrunkleaf,161,0 +acaciawoodleaf,161,0 +aleaf,161,0 +atreeleaf,161,0 +alogleaf,161,0 +atrunkleaf,161,0 +awoodleaf,161,0 +darkoakleaves,161,1 +darkoaktreeleaves,161,1 +darkoaklogleaves,161,1 +darkoaktrunkleaves,161,1 +darkoakwoodleaves,161,1 +doakleaves,161,1 +doaktreeleaves,161,1 +doaklogleaves,161,1 +doaktrunkleaves,161,1 +doakwoodleaves,161,1 +doleaves,161,1 +dotreeleaves,161,1 +dologleaves,161,1 +dotrunkleaves,161,1 +dowoodleaves,161,1 +darkoakleave,161,1 +darkoaktreeleave,161,1 +darkoaklogleave,161,1 +darkoaktrunkleave,161,1 +darkoakwoodleave,161,1 +doakleave,161,1 +doaktreeleave,161,1 +doaklogleave,161,1 +doaktrunkleave,161,1 +doakwoodleave,161,1 +doleave,161,1 +dotreeleave,161,1 +dologleave,161,1 +dotrunkleave,161,1 +dowoodleave,161,1 +darkoaktreeleaf,161,1 +darkoaklogleaf,161,1 +darkoaktrunkleaf,161,1 +darkoakwoodleaf,161,1 +doakleaf,161,1 +doaktreeleaf,161,1 +doaklogleaf,161,1 +doaktrunkleaf,161,1 +doakwoodleaf,161,1 +doleaf,161,1 +dotreeleaf,161,1 +dologleaf,161,1 +dotrunkleaf,161,1 +dowoodleaf,161,1 +acacia,162,0 +acaciatree,162,0 +acacialog,162,0 +acaciatrunk,162,0 +acaciawood,162,0 +atree,162,0 +alog,162,0 +atrunk,162,0 +awood,162,0 +darkoak,162,1 +darkoaktree,162,1 +darkoaklog,162,1 +darkoaktrunk,162,1 +darkoakwood,162,1 +doak,162,1 +doaktree,162,1 +doaklog,162,1 +doaktrunk,162,1 +doakwood,162,1 +dotree,162,1 +dolog,162,1 +dotrunk,162,1 +dowood,162,1 +acaciawoodenstairs,163,0 +acaciawoodstairs,163,0 +acaciawstairs,163,0 +acaciastairs,163,0 +awoodenstairs,163,0 +awoodstairs,163,0 +awstairs,163,0 +astairs,163,0 +acaciawoodenstair,163,0 +acaciawoodstair,163,0 +acaciawstair,163,0 +acaciastair,163,0 +awoodenstair,163,0 +awoodstair,163,0 +awstair,163,0 +astair,163,0 +darkoakwoodenstairs,164,0 +darkoakwoodstairs,164,0 +darkoakwstairs,164,0 +darkoakstairs,164,0 +doakwoodenstairs,164,0 +doakwoodstairs,164,0 +doakwstairs,164,0 +doakstairs,164,0 +dowoodenstairs,164,0 +dowoodstairs,164,0 +dowstairs,164,0 +dostairs,164,0 +darkoakwoodenstair,164,0 +darkoakwoodstair,164,0 +darkoakwstair,164,0 +darkoakstair,164,0 +doakwoodenstair,164,0 +doakwoodstair,164,0 +doakwstair,164,0 +doakstair,164,0 +dowoodenstair,164,0 +dowoodstair,164,0 +dowstair,164,0 +dostair,164,0 +hay,170,0 +hayblock,170,0 +haybale,170,0 +baleofhay,170,0 +hayofbale,170,0 +whitecarpet,171,0 +whitefloor,171,0 +wcarpet,171,0 +wfloor,171,0 +carpet,171,0 +floor,171,0 +orangecarpet,171,1 +orangefloor,171,1 +ocarpet,171,1 +ofloor,171,1 +magentacarpet,171,2 +magentafloor,171,2 +mcarpet,171,2 +mfloor,171,2 +lightbluecarpet,171,3 +lightbluefloor,171,3 +lbluecarpet,171,3 +lbluefloor,171,3 +lbcarpet,171,3 +lbfloor,171,3 +lightblucarpet,171,3 +lightblufloor,171,3 +lblucarpet,171,3 +lblufloor,171,3 +yellowcarpet,171,4 +yellowfloor,171,4 +ycarpet,171,4 +yfloor,171,4 +lightgreencarpet,171,5 +lightgreenfloor,171,5 +lgreencarpet,171,5 +lgreenfloor,171,5 +lightgrecarpet,171,5 +lightgrefloor,171,5 +lgrecarpet,171,5 +lgrefloor,171,5 +limecarpet,171,5 +limefloor,171,5 +lcarpet,171,5 +lfloor,171,5 +pinkcarpet,171,6 +pinkfloor,171,6 +picarpet,171,6 +pifloor,171,6 +darkgraycarpet,171,7 +darkgrayfloor,171,7 +dgraycarpet,171,7 +dgrayfloor,171,7 +darkgreycarpet,171,7 +darkgreyfloor,171,7 +dgreycarpet,171,7 +dgreyfloor,171,7 +darkgracarpet,171,7 +darkgrafloor,171,7 +dgracarpet,171,7 +dgrafloor,171,7 +graycarpet,171,7 +grayfloor,171,7 +greycarpet,171,7 +greyfloor,171,7 +gracarpet,171,7 +grafloor,171,7 +lightgraycarpet,171,8 +lightgrayfloor,171,8 +lgraycarpet,171,8 +lgrayfloor,171,8 +lightgreycarpet,171,8 +lightgreyfloor,171,8 +lgreycarpet,171,8 +lgreyfloor,171,8 +lightgracarpet,171,8 +lightgrafloor,171,8 +lgracarpet,171,8 +lgrafloor,171,8 +silvercarpet,171,8 +silverfloor,171,8 +sicarpet,171,8 +siafloor,171,8 +cyancarpet,171,9 +cyanfloor,171,9 +ccarpet,171,9 +cfloor,171,9 +purplecarpet,171,10 +purplefloor,171,10 +pucarpet,171,10 +pufloor,171,10 +bluecarpet,171,11 +bluefloor,171,11 +blucarpet,171,11 +blufloor,171,11 +browncarpet,171,12 +brownfloor,171,12 +brocarpet,171,12 +brofloor,171,12 +darkgreencarpet,171,13 +darkgreenfloor,171,13 +dgreencarpet,171,13 +dgreenfloor,171,13 +greencarpet,171,13 +greenfloor,171,13 +darkgrecarpet,171,13 +darkgrefloor,171,13 +dgrecarpet,171,13 +dgrefloor,171,13 +grecarpet,171,13 +grefloor,171,13 +redcarpet,171,14 +redfloor,171,14 +rcarpet,171,14 +rfloor,171,14 +blackcarpet,171,15 +blackfloor,171,15 +blacarpet,171,15 +blafloor,171,15 +hardenedclay,172,0 +hardclay,172,0 +hclay,172,0 +coalblock,173,0 +blockcoal,173,0 +coblock,173,0 +blockco,173,0 +coalb,173,0 +bcoal,173,0 +packedice,174,0 +packice,174,0 +solidice,174,0 +sunflower,175,0 +yellowsunflower,175,0 +lilac,175,1 +magentalilac,175,1 +syringa,175,1 +longtallgrass,175,2 +extratallgrass,175,2 +doubletallgrass,175,2 +largetallgrass,175,2 +longtgrass,175,2 +extratgrass,175,2 +doubletgrass,175,2 +largetgrass,175,2 +ltgrass,175,2 +etgrass,175,2 +dtgrass,175,2 +bigfern,175,3 +largefern,175,3 +doublefern,175,3 +bfern,175,3 +lfern,175,3 +dfern,175,3 +rosebush,175,4 +redrosebush,175,4 +peony,175,5 +pinkpeony,175,5 +paeonia,175,5 +ironshovel,256,0 +ironspade,256,0 +ishovel,256,0 +ispade,256,0 +steelshovel,256,0 +steelspade,256,0 +ironpickaxe,257,0 +ironpick,257,0 +steelpickaxe,257,0 +steelpick,257,0 +ipickaxe,257,0 +ipick,257,0 +ironaxe,258,0 +iaxe,258,0 +steelaxe,258,0 +flintandsteel,259,0 +flintandiron,259,0 +flintandtinder,259,0 +flintnsteel,259,0 +flintniron,259,0 +flintntinder,259,0 +flintsteel,259,0 +flintiron,259,0 +flinttinder,259,0 +lighter,259,0 +apple,260,0 +normalapple,260,0 +redapple,260,0 +bow,261,0 +arrow,262,0 +coal,263,0 +charcoal,263,1 +ccoal,263,1 +diamond,264,0 +crystal,264,0 +ironingot,265,0 +ironbar,265,0 +ironi,265,0 +steelingot,265,0 +steelbar,265,0 +steeli,265,0 +iingot,265,0 +ibar,265,0 +ingotiron,265,0 +bariron,265,0 +iiron,265,0 +ingotsteel,265,0 +barsteel,265,0 +isteel,265,0 +ingoti,265,0 +bari,265,0 +goldingot,266,0 +goldbar,266,0 +goldi,266,0 +gingot,266,0 +gbar,266,0 +ingotgold,266,0 +bargold,266,0 +igold,266,0 +ingotg,266,0 +barg,266,0 +ironsword,267,0 +steelsword,267,0 +isword,267,0 +woodensword,268,0 +woodsword,268,0 +wsword,268,0 +woodenshovel,269,0 +woodenspade,269,0 +woodshovel,269,0 +woodspade,269,0 +wshovel,269,0 +wspade,269,0 +woodenpickaxe,270,0 +woodenpick,270,0 +woodpickaxe,270,0 +woodpick,270,0 +wpickaxe,270,0 +wpick,270,0 +woodenaxe,271,0 +woodaxe,271,0 +waxe,271,0 +stonesword,272,0 +cobblestonesword,272,0 +cstonesword,272,0 +cssword,272,0 +ssword,272,0 +stoneshovel,273,0 +cobblestoneshovel,273,0 +cobblestonespade,273,0 +cstoneshovel,273,0 +cstonespade,273,0 +stonespade,273,0 +csshovel,273,0 +csspade,273,0 +sshovel,273,0 +sspade,273,0 +stonepickaxe,274,0 +cobblestonepickaxe,274,0 +cobblestonepick,274,0 +cstonepickaxe,274,0 +cstonepick,274,0 +stonepick,274,0 +cspickaxe,274,0 +cspick,274,0 +spickaxe,274,0 +spick,274,0 +stoneaxe,275,0 +cobblestoneaxe,275,0 +cstoneaxe,275,0 +csaxe,275,0 +saxe,275,0 +diamondsword,276,0 +crystalsword,276,0 +dsword,276,0 +diamondshovel,277,0 +diamondspade,277,0 +crystalshovel,277,0 +crystalspade,277,0 +dshovel,277,0 +dspade,277,0 +diamondpickaxe,278,0 +diamondpick,278,0 +crystalpickaxe,278,0 +crystalpick,278,0 +dpickaxe,278,0 +dpick,278,0 +diamondaxe,279,0 +crystalaxe,279,0 +daxe,279,0 +stick,280,0 +twig,280,0 +branch,280,0 +bowl,281,0 +woodenbowl,281,0 +woodbowl,281,0 +mushroomsoup,282,0 +mrsoup,282,0 +soup,282,0 +goldsword,283,0 +gsword,283,0 +goldshovel,284,0 +goldspade,284,0 +gshovel,284,0 +gspade,284,0 +goldpickaxe,285,0 +goldpick,285,0 +gpickaxe,285,0 +gpick,285,0 +goldaxe,286,0 +gaxe,286,0 +string,287,0 +thread,287,0 +feather,288,0 +gunpowder,289,0 +sulfur,289,0 +woodenhoe,290,0 +woodhoe,290,0 +whoe,290,0 +stonehoe,291,0 +cobblestonehoe,291,0 +cstonehoe,291,0 +cshoe,291,0 +shoe,291,0 +ironhoe,292,0 +steelhoe,292,0 +ihoe,292,0 +diamondhoe,293,0 +crystalhoe,293,0 +dhoe,293,0 +goldhoe,294,0 +ghoe,294,0 +seeds,295,0 +seed,295,0 +wheat,296,0 +crops,296,0 +crop,296,0 +bread,297,0 +leatherhelmet,298,0 +leatherhelm,298,0 +leatherhat,298,0 +leathercoif,298,0 +lhelmet,298,0 +lhelm,298,0 +lhat,298,0 +lcoif,298,0 +leatherchestplate,299,0 +leatherplatebody,299,0 +leatherplate,299,0 +leathershirt,299,0 +leathertunic,299,0 +lchestplate,299,0 +lplatebody,299,0 +lplate,299,0 +lshirt,299,0 +ltunic,299,0 +leatherleggings,300,0 +leatherlegs,300,0 +leatherpants,300,0 +lleggings,300,0 +llegs,300,0 +lpants,300,0 +leatherboots,301,0 +leathershoes,301,0 +lboots,301,0 +lshoes,301,0 +chainmailhelmet,302,0 +chainmailhelm,302,0 +chainmailhat,302,0 +chainmailcoif,302,0 +chainmhelmet,302,0 +chainmhelm,302,0 +chainmhat,302,0 +chainmcoif,302,0 +cmailhelmet,302,0 +cmailhelm,302,0 +cmailhat,302,0 +cmailcoif,302,0 +chainhelmet,302,0 +chainhelm,302,0 +chainhat,302,0 +chaincoif,302,0 +cmhelmet,302,0 +cmhelm,302,0 +cmhat,302,0 +cmcoif,302,0 +chainmailchestplate,303,0 +chainmailplatebody,303,0 +chainmailplate,303,0 +chainmailshirt,303,0 +chainmailtunic,303,0 +chainmchestplate,303,0 +chainmplatebody,303,0 +chainmplate,303,0 +chainmshirt,303,0 +chainmtunic,303,0 +cmailchestplate,303,0 +cmailplatebody,303,0 +cmailplate,303,0 +cmailshirt,303,0 +cmailtunic,303,0 +chainchestplate,303,0 +chainplatebody,303,0 +chainplate,303,0 +chainshirt,303,0 +chaintunic,303,0 +cmchestplate,303,0 +cmplatebody,303,0 +cmplate,303,0 +cmshirt,303,0 +cmtunic,303,0 +chainmailleggings,304,0 +chainmaillegs,304,0 +chainmailpants,304,0 +chainmleggings,304,0 +chainmlegs,304,0 +chainmpants,304,0 +cmailleggings,304,0 +cmaillegs,304,0 +cmailpants,304,0 +chainleggings,304,0 +chainlegs,304,0 +chainpants,304,0 +cmleggings,304,0 +cmlegs,304,0 +cmpants,304,0 +chainmailboots,305,0 +chainmailshoes,305,0 +chainmboots,305,0 +chainmshoes,305,0 +cmailboots,305,0 +cmailshoes,305,0 +chainboots,305,0 +chainshoes,305,0 +cmboots,305,0 +cmshoes,305,0 +ironhelmet,306,0 +ironhelm,306,0 +ironhat,306,0 +ironcoif,306,0 +ihelmet,306,0 +ihelm,306,0 +ihat,306,0 +icoif,306,0 +steelhelmet,306,0 +steelhelm,306,0 +steelhat,306,0 +steelcoif,306,0 +shelmet,306,0 +shelm,306,0 +shat,306,0 +scoif,306,0 +ironchestplate,307,0 +ironplatebody,307,0 +ironshirt,307,0 +irontunic,307,0 +ichestplate,307,0 +iplatebody,307,0 +ishirt,307,0 +itunic,307,0 +steelchestplate,307,0 +steelplatebody,307,0 +steelplate,307,0 +steelshirt,307,0 +steeltunic,307,0 +schestplate,307,0 +splatebody,307,0 +sshirt,307,0 +stunic,307,0 +ironleggings,308,0 +ironlegs,308,0 +ironpants,308,0 +ileggings,308,0 +ilegs,308,0 +ipants,308,0 +steelleggings,308,0 +steellegs,308,0 +steelpants,308,0 +sleggings,308,0 +slegs,308,0 +spants,308,0 +ironboots,309,0 +ironshoes,309,0 +iboots,309,0 +ishoes,309,0 +steelboots,309,0 +steelshoes,309,0 +sboots,309,0 +sshoes,309,0 +diamondhelmet,310,0 +diamondhelm,310,0 +diamondhat,310,0 +diamondcoif,310,0 +dhelmet,310,0 +dhelm,310,0 +dhat,310,0 +dcoif,310,0 +crystalhelmet,310,0 +crystalhelm,310,0 +crystalhat,310,0 +crystalcoif,310,0 +chelmet,310,0 +chelm,310,0 +chat,310,0 +ccoif,310,0 +diamondchestplate,311,0 +diamondplatebody,311,0 +diamondplate,311,0 +diamondshirt,311,0 +diamondtunic,311,0 +dchestplate,311,0 +dplatebody,311,0 +dplate,311,0 +dshirt,311,0 +dtunic,311,0 +crystalchestplate,311,0 +crystalplatebody,311,0 +crystalplate,311,0 +crystalshirt,311,0 +crystaltunic,311,0 +cchestplate,311,0 +cplatebody,311,0 +cplate,311,0 +cshirt,311,0 +ctunic,311,0 +diamondleggings,312,0 +diamondlegs,312,0 +diamondpants,312,0 +dleggings,312,0 +dlegs,312,0 +dpants,312,0 +crystalleggings,312,0 +crystallegs,312,0 +crystalpants,312,0 +cleggings,312,0 +clegs,312,0 +cpants,312,0 +diamondboots,313,0 +diamondshoes,313,0 +dboots,313,0 +dshoes,313,0 +crystalboots,313,0 +crystalshoes,313,0 +cboots,313,0 +cshoes,313,0 +goldhelmet,314,0 +goldhelm,314,0 +goldhat,314,0 +goldcoif,314,0 +ghelmet,314,0 +ghelm,314,0 +ghat,314,0 +gcoif,314,0 +goldchestplate,315,0 +goldplatebody,315,0 +goldshirt,315,0 +goldtunic,315,0 +gchestplate,315,0 +gplatebody,315,0 +gplateplate,315,0 +gshirt,315,0 +gtunic,315,0 +goldleggings,316,0 +goldlegs,316,0 +goldpants,316,0 +gleggings,316,0 +glegs,316,0 +gpants,316,0 +goldboots,317,0 +goldshoes,317,0 +gboots,317,0 +gshoes,317,0 +flint,318,0 +pork,319,0 +porkchop,319,0 +rawpork,319,0 +rpork,319,0 +rawporkchop,319,0 +rporkchop,319,0 +cookedpork,320,0 +grilledpork,320,0 +grillpork,320,0 +gpork,320,0 +cookpork,320,0 +cpork,320,0 +grilledporkchop,320,0 +grillporkchop,320,0 +gporkchop,320,0 +cookedporkchop,320,0 +cookporkchop,320,0 +cporkchop,320,0 +bacon,320,0 +painting,321,0 +picture,321,0 +goldenapple,322,0 +goldapple,322,0 +gapple,322,0 +enchantedgoldenapple,322,1 +enchantedgoldapple,322,1 +enchantedgapple,322,1 +supergoldenapple,322,1 +supergoldapple,322,1 +supergapple,322,1 +magicalgoldenapple,322,1 +magicalgoldapple,322,1 +magicalgapple,322,1 +magicgoldenapple,322,1 +magicgoldapple,322,1 +magicgapple,322,1 +egoldenapple,322,1 +egoldapple,322,1 +egapple,322,1 +sgoldenapple,322,1 +sgoldapple,322,1 +sgapple,322,1 +mgoldenapple,322,1 +mgoldapple,322,1 +mgapple,322,1 +sign,323,0 +woodendoor,324,0 +wooddoor,324,0 +wdoor,324,0 +door,324,0 +bucket,325,0 +bukkit,325,0 +waterbucket,326,0 +waterbukkit,326,0 +wbucket,326,0 +wbukkit,326,0 +magmabucket,327,0 +magmabukkit,327,0 +lavabucket,327,0 +lavabukkit,327,0 +lbucket,327,0 +lbukkit,327,0 +minecart,328,0 +mcart,328,0 +cart,328,0 +saddle,329,0 +irondoor,330,0 +idoor,330,0 +steeldoor,330,0 +sdoor,330,0 +dooriron,330,0 +doori,330,0 +doorsteel,330,0 +doors,330,0 +redstonedust,331,0 +redstone,331,0 +rstonedust,331,0 +rstone,331,0 +redsdust,331,0 +reddust,331,0 +rsdust,331,0 +rdust,331,0 +snow,332,0 +snowball,332,0 +snball,332,0 +sball,332,0 +boat,333,0 +leather,334,0 +cowhide,334,0 +hide,334,0 +milkbucket,335,0 +milkbukkit,335,0 +mbucket,335,0 +mbukkit,335,0 +claybrick,336,0 +brick,336,0 +redbrick,336,0 +rbrick,336,0 +clayball,337,0 +cball,337,0 +clay,337,0 +reeds,338,0 +reed,338,0 +sugarcane,338,0 +scane,338,0 +bamboo,338,0 +paper,339,0 +papyrus,339,0 +book,340,0 +slimeball,341,0 +slball,341,0 +chestminecart,342,0 +storageminecart,342,0 +storagemcart,342,0 +chestmcart,342,0 +storagecart,342,0 +chestcart,342,0 +sminecart,342,0 +cminecart,342,0 +smcart,342,0 +cmcart,342,0 +scart,342,0 +ccart,342,0 +furnaceminecart,343,0 +engineminecart,343,0 +poweredminecart,343,0 +powerminecart,343,0 +enginemcart,343,0 +poweredmcart,343,0 +powermcart,343,0 +furnacemcart,343,0 +enginecart,343,0 +poweredcart,343,0 +powercart,343,0 +furnacecart,343,0 +eminecart,343,0 +pminecart,343,0 +fminecart,343,0 +emcart,343,0 +pmcart,343,0 +fmcart,343,0 +ecart,343,0 +pcart,343,0 +fcart,343,0 +egg,344,0 +compass,345,0 +fishingrod,346,0 +fishrod,346,0 +frod,346,0 +rod,346,0 +watch,347,0 +goldwatch,347,0 +goldclock,347,0 +gwatch,347,0 +gclock,347,0 +clock,347,0 +glowstonedust,348,0 +glowingstonedust,348,0 +lightstonedust,348,0 +lbdust,348,0 +gbdust,348,0 +lsdust,348,0 +gsdust,348,0 +rawfish,349,0 +rafish,349,0 +fish,349,0 +rawsalmonfish,349,1 +rasalmonfish,349,1 +salmonfish,349,1 +rawsalmon,349,1 +rasalmon,349,1 +salmon,349,1 +sfish,349,1 +fishs,349,1 +rawclownfish,349,2 +raclownfish,349,2 +clownfish,349,2 +rawnemo,349,2 +ranemo,349,2 +nemo,349,2 +nemofish,349,2 +fishnemo,349,2 +clfish,349,2 +fishcl,349,2 +nfish,349,2 +fishn,349,2 +rawpufferfish,349,3 +rapufferfish,349,3 +pufferfish,349,3 +pufffish,349,3 +fishpuff,349,3 +pfish,349,3 +fishp,349,3 +cookedfish,350,0 +cookfish,350,0 +cfish,350,0 +grilledfish,350,0 +grillfish,350,0 +gfish,350,0 +roastedfish,350,0 +roastfish,350,0 +rofish,350,0 +cookedsalmonfish,350,1 +cooksalmonfish,350,1 +csalmonfish,350,1 +grilledsalmonfish,350,1 +grillsalmonfish,350,1 +gsalmonfish,350,1 +roastedsalmonfish,350,1 +roastsalmonfish,350,1 +rosalmonfish,350,1 +cookedsalmon,350,1 +cooksalmon,350,1 +csalmon,350,1 +grilledsalmon,350,1 +grillsalmon,350,1 +gsalmon,350,1 +roastedsalmon,350,1 +roastsalmon,350,1 +rosalmon,350,1 +dye,351,0 +inksack,351,0 +inksac,351,0 +isack,351,0 +isac,351,0 +sack,351,0 +sac,351,0 +blackinksack,351,0 +blackinksac,351,0 +blackisack,351,0 +blackisac,351,0 +blacksack,351,0 +blacksac,351,0 +inksackblack,351,0 +inksacblack,351,0 +isackblack,351,0 +isacblack,351,0 +sackblack,351,0 +sacblack,351,0 +blackinksackcolour,351,0 +blackinksaccolour,351,0 +blackisackcolour,351,0 +blackisaccolour,351,0 +blacksackcolour,351,0 +blacksaccolour,351,0 +inksackblackcolour,351,0 +inksacblackcolour,351,0 +isackblackcolour,351,0 +isacclackcolour,351,0 +sackblackcolour,351,0 +sacblackcolour,351,0 +blackinksackcolor,351,0 +blackinksaccolor,351,0 +blackisackcolor,351,0 +blackisaccolor,351,0 +blacksackcolor,351,0 +blacksaccolor,351,0 +inksackblackcolor,351,0 +inksacblackcolor,351,0 +isackblackcolor,351,0 +isacblackcolor,351,0 +sackblackcolor,351,0 +sacblackcolor,351,0 +blackinksackdye,351,0 +blackinksacdye,351,0 +blackisackdye,351,0 +blackisacdye,351,0 +blacksackdye,351,0 +blacksacdye,351,0 +inksackblackdye,351,0 +inksacblackdye,351,0 +isackblackdye,351,0 +isacclackdye,351,0 +sackblackdye,351,0 +sacblackdye,351,0 +blackcolor,351,0 +blackdye,351,0 +rosered,351,1 +roseredcolor,351,1 +roseredcolour,351,1 +rosereddye,351,1 +redrosecolor,351,1 +redrosecolour,351,1 +redrosedye,351,1 +redr,351,1 +redrcolor,351,1 +redrcolour,351,1 +redrdye,351,1 +redcolor,351,1 +redcolour,351,1 +reddye,351,1 +cactusgreen,351,2 +greencactus,351,2 +cactusgreencolour,351,2 +greencactuscolour,351,2 +cactusgreencolor,351,2 +greencactuscolor,351,2 +cactusgreendye,351,2 +greencactusdye,351,2 +greencolour,351,2 +greencolor,351,2 +greendye,351,2 +cocoabeans,351,3 +cocoabean,351,3 +cocobeans,351,3 +cocobean,351,3 +cbeans,351,3 +cbean,351,3 +beans,351,3 +bean,351,3 +browncocoabeans,351,3 +browncocoabean,351,3 +browncocobeans,351,3 +browncocobean,351,3 +browncbeans,351,3 +browncbean,351,3 +brownbeans,351,3 +brownbean,351,3 +brownb,351,3 +cocoabeanscolour,351,3 +cocoabeancolour,351,3 +cocobeanscolour,351,3 +cocobeancolour,351,3 +cbeanscolour,351,3 +cbeancolour,351,3 +beanscolour,351,3 +beancolour,351,3 +browncocoabeanscolour,351,3 +browncocoabeancolour,351,3 +browncocobeanscolour,351,3 +browncocobeancolour,351,3 +browncbeanscolour,351,3 +browncbeancolour,351,3 +brownbeanscolour,351,3 +brownbeancolour,351,3 +brownbcolour,351,3 +cocoabeanscolor,351,3 +cocoabeancolor,351,3 +cocobeanscolor,351,3 +cocobeancolor,351,3 +cbeanscolor,351,3 +cbeancolor,351,3 +beanscolor,351,3 +beancolor,351,3 +browncocoabeanscolor,351,3 +browncocoabeancolor,351,3 +browncocobeanscolor,351,3 +browncocobeancolor,351,3 +browncbeanscolor,351,3 +browncbeancolor,351,3 +brownbeanscolor,351,3 +brownbeancolor,351,3 +brownbcolor,351,3 +cocoabeansdye,351,3 +cocoabeandye,351,3 +cocobeansdye,351,3 +cocobeandye,351,3 +cbeansdye,351,3 +cbeandye,351,3 +beansdye,351,3 +beandye,351,3 +browncocoabeansdye,351,3 +browncocoabeandye,351,3 +browncocobeansdye,351,3 +browncocobeandye,351,3 +browncbeansdye,351,3 +browncbeandye,351,3 +brownbeansdye,351,3 +brownbeandye,351,3 +brownbdye,351,3 +browncolour,351,3 +browncolor,351,3 +browndye,351,3 +lapislazuli,351,4 +bluelapislazuli,351,4 +bluelapisl,351,4 +bluelapis,351,4 +bluel,351,4 +lapislazuliblue,351,4 +lapislblue,351,4 +lapisblue,351,4 +lapisl,351,4 +lapis,351,4 +bluelapislazulicolour,351,4 +bluelapislcolour,351,4 +bluelapiscolour,351,4 +lapislazulibluecolour,351,4 +lapislbluecolour,351,4 +lapisbluecolour,351,4 +lapislazulicolour,351,4 +lapislcolour,351,4 +lapiscolour,351,4 +bluelapislazulicolor,351,4 +bluelapislcolor,351,4 +bluelapiscolor,351,4 +lapislazulibluecolor,351,4 +lapislbluecolor,351,4 +lapisbluecolor,351,4 +lapislazulicolor,351,4 +lapislcolor,351,4 +lapiscolor,351,4 +bluelapislazulidye,351,4 +bluelapisldye,351,4 +bluelapisdye,351,4 +lapislazulibluedye,351,4 +lapislbluedye,351,4 +lapisbluedye,351,4 +lapislazulidye,351,4 +lapisldye,351,4 +lapisdye,351,4 +bluecolour,351,4 +bluecolor,351,4 +bluedye,351,4 +purpledye,351,5 +purplecolour,351,5 +purplecolor,351,5 +cyandye,351,6 +cyancolour,351,6 +cyancolor,351,6 +lightgraydye,351,7 +lightgraycolour,351,7 +lightgraycolor,351,7 +lgraycolour,351,7 +lgraycolor,351,7 +lgraydye,351,7 +lightgreydye,351,7 +lightgreycolour,351,7 +lightgreycolor,351,7 +lgreycolour,351,7 +lgreycolor,351,7 +lgreydye,351,7 +silvercolour,351,7 +silvercolor,351,7 +silverdye,351,7 +darkgraydye,351,8 +darkgraycolour,351,8 +darkgraycolor,351,8 +dgraycolour,351,8 +dgraycolor,351,8 +dgraydye,351,8 +graycolour,351,8 +graycolor,351,8 +graydye,351,8 +darkgreydye,351,8 +darkgreycolour,351,8 +darkgreycolor,351,8 +dgreycolour,351,8 +dgreycolor,351,8 +dgreydye,351,8 +greycolour,351,8 +greycolor,351,8 +greydye,351,8 +pinkdye,351,9 +pinkcolour,351,9 +pinkcolor,351,9 +limedye,351,10 +limecolour,351,10 +limecolor,351,10 +dandelionyellow,351,11 +dandelionyellowcolour,351,11 +dandelionyellowcolor,351,11 +dandelionyellowdye,351,11 +yellowdandelioncolour,351,11 +yellowdandelioncolor,351,11 +yellowdandeliondye,351,11 +yellowd,351,11 +yellowdcolour,351,11 +yellowdcolor,351,11 +yellowddye,351,11 +dyellow,351,11 +dyellowcolour,351,11 +dyellowcolor,351,11 +dyellowdye,351,11 +yellowcolour,351,11 +yellowcolor,351,11 +yellowdye,351,11 +lightbluecolour,351,12 +lightbluecolor,351,12 +lightbluedye,351,12 +lbluecolour,351,12 +lbluecolor,351,12 +lbluedye,351,12 +magentacolour,351,13 +magentacolor,351,13 +magentadye,351,13 +orangecolour,351,14 +orangecolor,351,14 +orangedye,351,14 +bonemeal,351,15 +whitebonemeal,351,15 +whitebonemealcolour,351,15 +whitebonemealcolor,351,15 +whitebonemealdye,351,15 +bonemealwhite,351,15 +bonemealwhitecolour,351,15 +bonemealwhitecolor,351,15 +bonemealwhitedye,351,15 +whitebonem,351,15 +whitebonemcolour,351,15 +whitebonemcolor,351,15 +whitebonemdye,351,15 +bonemwhite,351,15 +bonemwhitecolour,351,15 +bonemwhitecolor,351,15 +bonemwhitedye,351,15 +bonemealcolour,351,15 +bonemealcolor,351,15 +bonemealdye,351,15 +bonem,351,15 +bonemcolour,351,15 +bonemcolor,351,15 +bonemdye,351,15 +whitecolour,351,15 +whitecolor,351,15 +whitedye,351,15 +bone,352,0 +sugar,353,0 +whitedust,353,0 +cake,354,0 +bed,355,0 +redstonerepeater,356,0 +redstonerepeat,356,0 +redstonedelayer,356,0 +redstonedelay,356,0 +redstonedioder,356,0 +redstonediode,356,0 +rstonerepeater,356,0 +rstonerepeat,356,0 +rstonedelayer,356,0 +rstonedelay,356,0 +rstonedioder,356,0 +rstonediode,356,0 +redsrepeater,356,0 +redsrepeat,356,0 +redsdelayer,356,0 +redsdelay,356,0 +redsdioder,356,0 +redsdiode,356,0 +rsrepeater,356,0 +rsrepeat,356,0 +rsdelayer,356,0 +rsdelay,356,0 +rsdioder,356,0 +rsdiode,356,0 +repeater,356,0 +repeat,356,0 +delayer,356,0 +delay,356,0 +dioder,356,0 +diode,356,0 +cookie,357,0 +chart,358,0 +map0,358,0 +map1,358,1 +map2,358,2 +map3,358,3 +map4,358,4 +map5,358,5 +map6,358,6 +map7,358,7 +map8,358,8 +map9,358,9 +map10,358,10 +map11,358,11 +map12,358,12 +map13,358,13 +map14,358,14 +map15,358,15 +shears,359,0 +shear,359,0 +sheers,359,0 +sheer,359,0 +woolcutters,359,0 +woolcutter,359,0 +cutterswool,359,0 +cutterwool,359,0 +melonslice,360,0 +mslice,360,0 +slicemelon,360,0 +watermelonslice,360,0 +greenmelonslice,360,0 +melongreenslice,360,0 +pumpkinseeds,361,0 +pseeds,361,0 +seedsp,361,0 +seedspumpkin,361,0 +pumpseeds,361,0 +seedspump,361,0 +melonseeds,362,0 +mseeds,362,0 +watermelonseeds,362,0 +greenmelonseeds,362,0 +gmelonseeds,362,0 +seedsmelon,362,0 +seedswatermelon,362,0 +rawbeef,363,0 +rawsteak,363,0 +uncookedbeef,363,0 +uncookedsteak,363,0 +cowmeat,363,0 +plainbeef,363,0 +beef,364,0 +steak,364,0 +cookedbeef,364,0 +grilledbeef,364,0 +cookedsteak,364,0 +grilledsteak,364,0 +cookedcowmeat,364,0 +rawchicken,365,0 +uncookedchicken,365,0 +plainchicken,365,0 +chickenplain,365,0 +chickenuncooked,365,0 +chickenraw,365,0 +cookedchicken,366,0 +grilledchicken,366,0 +toastedchicken,366,0 +gchicken,366,0 +bbqchicken,366,0 +friedchicken,366,0 +cchicken,366,0 +rottenflesh,367,0 +zombieflesh,367,0 +rottenmeat,367,0 +zombiemeat,367,0 +badflesh,367,0 +poisonflesh,367,0 +zombieremains,367,0 +enderpearl,368,0 +endpearl,368,0 +pearl,368,0 +epearl,368,0 +bluepearl,368,0 +endergem,368,0 +blazerod,369,0 +goldenrod,369,0 +goldrod,369,0 +blazestick,369,0 +goldstick,369,0 +brod,369,0 +grod,369,0 +bstick,369,0 +gstick,369,0 +ghasttear,370,0 +ghastdrop,370,0 +ghosttear,370,0 +ghostdrop,370,0 +gtear,370,0 +gdrop,370,0 +tear,370,0 +goldnugget,371,0 +gnugget,371,0 +goldpebble,371,0 +gpebble,371,0 +goldball,371,0 +gball,371,0 +netherstalk,372,0 +deathstalk,372,0 +hellstalk,372,0 +nstalk,372,0 +dstalk,372,0 +hstalk,372,0 +netherwarts,372,0 +netherwart,372,0 +netherplant,372,0 +nethercrop,372,0 +hellwarts,372,0 +hellwart,372,0 +hellplant,372,0 +hellcrop,372,0 +deathwarts,372,0 +deathwart,372,0 +deathplant,372,0 +deathcrop,372,0 +nwarts,372,0 +nwart,372,0 +ncrop,372,0 +nplant,372,0 +hwarts,372,0 +hwart,372,0 +hplant,372,0 +hcrop,372,0 +dwarts,372,0 +dwart,372,0 +dplant,372,0 +dcrop,372,0 +potion,373,0 +mixture,373,0 +potions,373,0 +waterbottle,373,0 +fullbottle,373,0 +watervase,373,0 +fullvase,373,0 +clearpotion,373,6 +clearpot,373,6 +clearextendedpotion,373,7 +clearexpotion,373,7 +clear2potion,373,7 +clearextendedpot,373,7 +clearexpot,373,7 +clear2pot,373,7 +diffusepotion,373,11 +diffusepot,373,11 +artlesspotion,373,13 +artlesspot,373,13 +thinpotion,373,14 +thinpot,373,14 +thinextendedpotion,373,15 +thinexpotion,373,15 +thin2potion,373,15 +thinextendedpot,373,15 +thinexpot,373,15 +thin2pot,373,15 +awkwardpotion,373,16 +awkwardpot,373,16 +bunglingpotion,373,22 +bunglingpot,373,22 +bunglingextendedpotion,373,23 +bunglingexpotion,373,23 +bungling2potion,373,23 +bunglingextendedpot,373,23 +bunglingexpot,373,23 +bungling2pot,373,23 +smoothpotion,373,27 +smoothpot,373,27 +suavepotion,373,29 +suavepot,373,29 +debonairpotion,373,30 +debonairpot,373,30 +debonairextendedpotion,373,31 +debonairexpotion,373,31 +debonair2potion,373,31 +debonairextendedpot,373,31 +debonairexpot,373,31 +debonair2pot,373,31 +thickpotion,373,32 +thickpot,373,32 +charmingpotion,373,38 +charmingpot,373,38 +charmingextendedpotion,373,39 +charmingexpotion,373,39 +charming2potion,373,39 +charmingextendedpot,373,39 +charmingexpot,373,39 +charming2pot,373,39 +refinedpotion,373,43 +refinedpot,373,43 +cordialpotion,373,45 +cordialpot,373,45 +sparklingpotion,373,46 +sparklingpot,373,46 +sparklingextendedpotion,373,47 +sparklingexpotion,373,47 +sparkling2potion,373,47 +sparklingextendedpot,373,47 +sparklingexpot,373,47 +sparkling2pot,373,47 +potentpotion,373,48 +potentpot,373,48 +rankpotion,373,54 +rankpot,373,54 +rankextendedpotion,373,55 +rankexpotion,373,55 +rank2potion,373,55 +rankextendedpot,373,55 +rankexpot,373,55 +rank2pot,373,55 +acridpotion,373,59 +acridpot,373,59 +grosspotion,373,61 +grosspot,373,61 +stinkypotion,373,62 +stinkypot,373,62 +stinkyextendedpotion,373,63 +stinkyexpotion,373,63 +stinky2potion,373,63 +stinkyextendedpot,373,63 +stinkyexpot,373,63 +stinky2pot,373,63 +mundaneextendedpotion,373,64 +mundaneexpotion,373,64 +mundane2potion,373,64 +mundaneextendedpot,373,64 +mundaneexpot,373,64 +mundane2pot,373,64 +mundanepotion,373,8192 +mundanepot,373,8192 +regenerationpotion,373,8193 +regeneratepotion,373,8193 +regenpotion,373,8193 +regenerationpot,373,8193 +regeneratepot,373,8193 +regenpot,373,8193 +rpot,373,8193 +swiftnesspotion,373,8194 +swiftpotion,373,8194 +speedpotion,373,8194 +swiftnesspot,373,8194 +swiftpot,373,8194 +speedpot,373,8194 +swpot,373,8194 +fireresistancepotion,373,8195 +fireresistpotion,373,8195 +firerespotion,373,8195 +fireresistancepot,373,8195 +fireresistpot,373,8195 +firerespot,373,8195 +fpot,373,8195 +poisonpotion,373,8196 +acidpotion,373,8196 +poisonpot,373,8196 +acidpot,373,8196 +ppot,373,8196 +healingpotion,373,8197 +healpotion,373,8197 +lifepotion,373,8197 +healingpot,373,8197 +healpot,373,8197 +lifepot,373,8197 +hpot,373,8197 +nightvisionpotion,373,8198 +nvisionpotion,373,8198 +nightvpotion,373,8198 +darkvisionpotion,373,8198 +dvisionpotion,373,8198 +darkvpotion,373,8198 +nightvisionpot,373,8198 +nvisionpot,373,8198 +nightvpot,373,8198 +darkvisionpot,373,8198 +dvisionpot,373,8198 +darkvpot,373,8198 +npot,373,8198 +weaknesspotion,373,8200 +weakpotion,373,8200 +weaknesspot,373,8200 +weakpot,373,8200 +wpot,373,8200 +strengthpotion,373,8201 +strongpotion,373,8201 +strpotion,373,8201 +strengthpot,373,8201 +strongpot,373,8201 +strpot,373,8201 +stpot,373,8201 +slownesspotion,373,8202 +slowpotion,373,8202 +slownesspot,373,8202 +slowpot,373,8202 +slpot,373,8202 +harmingpotion,373,8204 +damagepotion,373,8204 +dmgpotion,373,8204 +harmingpot,373,8204 +damagepot,373,8204 +dmgpot,373,8204 +dpot,373,8204 +waterbreathingpotion,373,8205 +waterbreathpotion,373,8205 +breathingpotion,373,8205 +breathpotion,373,8205 +waterbreathingpot,373,8205 +waterbreathpot,373,8205 +breathingpot,373,8205 +breathpot,373,8205 +wbpot,373,8205 +invisibilitypotion,373,8206 +invisiblepotion,373,8206 +invpotion,373,8206 +invisibilitypot,373,8206 +invisiblepot,373,8206 +invpot,373,8206 +ipot,373,8206 +regenerationleveliipotion,373,8225 +regenerateleveliipotion,373,8225 +regenleveliipotion,373,8225 +regenerationlevel2potion,373,8225 +regeneratelevel2potion,373,8225 +regenlevel2potion,373,8225 +regenerationiipotion,373,8225 +regenerateiipotion,373,8225 +regeniipotion,373,8225 +regenerationleveliipot,373,8225 +regenerateleveliipot,373,8225 +regenleveliipot,373,8225 +regenerationlevel2pot,373,8225 +regeneratelevel2pot,373,8225 +regenlevel2pot,373,8225 +regenerationiipot,373,8225 +regenerateiipot,373,8225 +regeniipot,373,8225 +r2pot,373,8225 +swiftnessleveliipotion,373,8226 +swiftleveliipotion,373,8226 +speedleveliipotion,373,8226 +swiftnesslevel2potion,373,8226 +swiftlevel2potion,373,8226 +speedlevel2potion,373,8226 +swiftnessiipotion,373,8226 +swiftiipotion,373,8226 +speediipotion,373,8226 +swiftnessleveliipot,373,8226 +swiftleveliipot,373,8226 +speedleveliipot,373,8226 +swiftnesslevel2pot,373,8226 +swiftlevel2pot,373,8226 +speedlevel2pot,373,8226 +swiftnessiipot,373,8226 +swiftiipot,373,8226 +speediipot,373,8226 +sw2pot,373,8226 +poisonleveliipotion,373,8228 +acidleveliipotion,373,8228 +poisonlevel2potion,373,8228 +acidlevel2potion,373,8228 +poisoniipotion,373,8228 +acidiipotion,373,8228 +poisonleveliipot,373,8228 +acidleveliipot,373,8228 +poisonlevel2pot,373,8228 +acidlevel2pot,373,8228 +poisoniipot,373,8228 +acidiipot,373,8228 +p2pot,373,8228 +healingleveliipotion,373,8229 +healleveliipotion,373,8229 +healinglevel2potion,373,8229 +heallevel2potion,373,8229 +healingiipotion,373,8229 +healiipotion,373,8229 +healingleveliipot,373,8229 +healleveliipot,373,8229 +healinglevel2pot,373,8229 +heallevel2pot,373,8229 +healingiipot,373,8229 +healiipot,373,8229 +h2pot,373,8229 +strengthleveliipotion,373,8233 +strongleveliipotion,373,8233 +strleveliipotion,373,8233 +strengthlevel2potion,373,8233 +stronglevel2potion,373,8233 +strlevel2potion,373,8233 +strengthiipotion,373,8233 +strongiipotion,373,8233 +striipotion,373,8233 +strengthleveliipot,373,8233 +strongleveliipot,373,8233 +strleveliipot,373,8233 +strengthlevel2pot,373,8233 +stronglevel2pot,373,8233 +strlevel2pot,373,8233 +strengthiipot,373,8233 +strongiipot,373,8233 +striipot,373,8233 +st2pot,373,8233 +harmingleveliipotion,373,8236 +damageleveliipotion,373,8236 +dmgleveliipotion,373,8236 +harminglevel2potion,373,8236 +damagelevel2potion,373,8236 +dmglevel2potion,373,8236 +harmingiipotion,373,8236 +damageiipotion,373,8236 +dmgiipotion,373,8236 +harmingleveliipot,373,8236 +damageleveliipot,373,8236 +dmgleveliipot,373,8236 +harminglevel2pot,373,8236 +damagelevel2pot,373,8236 +dmglevel2pot,373,8236 +harmingiipot,373,8236 +damageiipot,373,8236 +dmgiipot,373,8236 +d2pot,373,8236 +regenerationextendedpotion,373,8257 +regenerateextendedpotion,373,8257 +regenextendepotion,373,8257 +regenerationexpotion,373,8257 +regenerateexpotion,373,8257 +regenexpotion,373,8257 +regenerationextendedpot,373,8257 +regenerateextendedpot,373,8257 +regenextendepot,373,8257 +regenerationexpot,373,8257 +regenerateexpot,373,8257 +regenexpot,373,8257 +repot,373,8257 +swiftnessextendedpotion,373,8258 +swiftextendedpotion,373,8258 +speedextendedpotion,373,8258 +swiftnessexpotion,373,8258 +swiftexpotion,373,8258 +speedexpotion,373,8258 +swiftnessextendedpot,373,8258 +swiftextendedpot,373,8258 +speedextendedpot,373,8258 +swiftnessexpot,373,8258 +swiftexpot,373,8258 +speedexpot,373,8258 +swepot,373,8258 +fireresistanceextendedpotion,373,8259 +fireresistextendedpotion,373,8259 +fireresextendedpotion,373,8259 +fireresistanceexpotion,373,8259 +fireresistexpotion,373,8259 +fireresexpotion,373,8259 +fireresistanceextendedpot,373,8259 +fireresistextendedpot,373,8259 +fireresextendedpot,373,8259 +fireresistanceexpot,373,8259 +fireresistexpot,373,8259 +fireresexpot,373,8259 +fepot,373,8259 +poisonextendedpotion,373,8260 +acidextendedpotion,373,8260 +poisonexpotion,373,8260 +acidexpotion,373,8260 +poisonextendedpot,373,8260 +acidextendedpot,373,8260 +poisonexpot,373,8260 +acidexpot,373,8260 +pepot,373,8260 +nightvisionextendedpotion,373,8262 +nvisionextendedpotion,373,8262 +nightvextendedpotion,373,8262 +darkvisionextendedpotion,373,8262 +dvisionextendedpotion,373,8262 +darkvextendedpotion,373,8262 +nightvisionexpotion,373,8262 +nvisionexpotion,373,8262 +nightvexpotion,373,8262 +darkvisionexpotion,373,8262 +dvisionexpotion,373,8262 +darkvexpotion,373,8262 +nightvisionextendedpot,373,8262 +nvisionextendedpot,373,8262 +nightvextendedpot,373,8262 +darkvisionextendedpot,373,8262 +dvisionextendedpot,373,8262 +darkvextendedpot,373,8262 +nightvisionexpot,373,8262 +nvisionexpot,373,8262 +nightvexpot,373,8262 +darkvisionexpot,373,8262 +dvisionexpot,373,8262 +darkvexpot,373,8262 +nepot,373,8262 +weaknessextendedpotion,373,8264 +weakextendedpotion,373,8264 +weaknessexpotion,373,8264 +weakexpotion,373,8264 +weaknessextendedpot,373,8264 +weakextendedpot,373,8264 +weaknessexpot,373,8264 +weakexpot,373,8264 +wepot,373,8264 +strengthextendedpotion,373,8265 +strongextendedpotion,373,8265 +strextendedpotion,373,8265 +strengthexpotion,373,8265 +strongexpotion,373,8265 +strexpotion,373,8265 +strengthextendedpot,373,8265 +strongextendedpot,373,8265 +strextendedpot,373,8265 +strengthexpot,373,8265 +strongexpot,373,8265 +strexpot,373,8265 +stepot,373,8265 +slownessextendedpotion,373,8266 +slowextenedpotion,373,8266 +slownessexpotion,373,8266 +slowexpotion,373,8266 +slownessextendedpot,373,8266 +slowextenedpot,373,8266 +slownessexpot,373,8266 +slowexpot,373,8266 +slepot,373,8266 +waterbreathingextendedpotion,373,8269 +waterbreathextendedpotion,373,8269 +breathingextendedpotion,373,8269 +breathextendedpotion,373,8269 +waterbreathingextendedpot,373,8269 +waterbreathextendedpot,373,8269 +breathingextendedpot,373,8269 +breathextendedpot,373,8269 +waterbreathingexpotion,373,8269 +waterbreathexpotion,373,8269 +breathingexpotion,373,8269 +breathexpotion,373,8269 +waterbreathingexpot,373,8269 +waterbreathexpot,373,8269 +breathingexpot,373,8269 +breathexpot,373,8269 +wbepot,373,8269 +invisibilityextendedpotion,373,8270 +invisibleextendedpotion,373,8270 +invextendedpotion,373,8270 +invisibilityexpotion,373,8270 +invisibleexpotion,373,8270 +invexpotion,373,8270 +invisibilityextendedpot,373,8270 +invisibleextendedpot,373,8270 +invextendedpot,373,8270 +invisibilityexpot,373,8270 +invisibleexpot,373,8270 +invexpot,373,8270 +iepot,373,8270 +regenerationdualbitpotion,373,8289 +regeneratedualbitpotion,373,8289 +regendualbitpotion,373,8289 +regenerationdbpotion,373,8289 +regeneratedbpotion,373,8289 +regendbpotion,373,8289 +regenerationdualbitpot,373,8289 +regeneratedualbitpot,373,8289 +regendualbitpot,373,8289 +regenerationdbpot,373,8289 +regeneratedbpot,373,8289 +regendbpot,373,8289 +rdbpot,373,8289 +swiftnessdualbitpotion,373,8290 +swiftdualbitpotion,373,8290 +speeddualbitpotion,373,8290 +swiftnessdualbitpot,373,8290 +swiftdualbitpot,373,8290 +speeddualbitpot,373,8290 +swiftnessdbpotion,373,8290 +swiftdbpotion,373,8290 +speeddbpotion,373,8290 +swiftnessdbpot,373,8290 +swiftdbpot,373,8290 +speeddbpot,373,8290 +swdbpot,373,8290 +poisondualbitpotion,373,8292 +aciddualbitpotion,373,8292 +poisondualbitpot,373,8292 +aciddualbitpot,373,8292 +poisondbpotion,373,8292 +aciddbpotion,373,8292 +poisondbpot,373,8292 +aciddbpot,373,8292 +pdbpot,373,8292 +strengthdualbitpotion,373,8297 +strongdualbitpotion,373,8297 +strdualbitpotion,373,8297 +strengthdualbitpot,373,8297 +strongdualbitpot,373,8297 +strdualbitpot,373,8297 +strengthdbpotion,373,8297 +strongdbpotion,373,8297 +strdbpotion,373,8297 +strengthdbpot,373,8297 +strongdbpot,373,8297 +strdbpot,373,8297 +stdbpot,373,8297 +splashmundanepotion,373,16384 +splmundanepotion,373,16384 +splashregenerationpotion,373,16385 +splashregeneratepotion,373,16385 +splashregenpotion,373,16385 +splashregenerationpot,373,16385 +splashregeneratepot,373,16385 +splashregenpot,373,16385 +regenerationsplashpotion,373,16385 +regeneratesplashpotion,373,16385 +regensplashpotion,373,16385 +splregenerationpotion,373,16385 +splregeneratepotion,373,16385 +splregenpotion,373,16385 +splregenerationpot,373,16385 +splregeneratepot,373,16385 +splregenpot,373,16385 +sprpot,373,16385 +splashswiftnesspotion,373,16386 +splashswiftpotion,373,16386 +splashspeedpotion,373,16386 +splashswiftnesspot,373,16386 +splashswiftpot,373,16386 +splashspeedpot,373,16386 +splswiftnesspotion,373,16386 +splswiftpotion,373,16386 +splspeedpotion,373,16386 +splswiftnesspot,373,16386 +splswiftpot,373,16386 +splspeedpot,373,16386 +spswpot,373,16386 +splashfireresistancepotion,373,16387 +splashfireresistpotion,373,16387 +splashfirerespotion,373,16387 +splashfireresistancepot,373,16387 +splashfireresistpot,373,16387 +splashfirerespot,373,16387 +splfireresistancepotion,373,16387 +splfireresistpotion,373,16387 +splfirerespotion,373,16387 +splfireresistancepot,373,16387 +splfireresistpot,373,16387 +splfirerespot,373,16387 +spfpot,373,16387 +splashpoisonpotion,373,16388 +splashacidpotion,373,16388 +splashpoisonpot,373,16388 +splashacidpot,373,16388 +splpoisonpotion,373,16388 +splacidpotion,373,16388 +splpoisonpot,373,16388 +splacidpot,373,16388 +spppot,373,16388 +splashhealingpotion,373,16389 +splashhealpotion,373,16389 +splashlifepotion,373,16389 +splashhealingpot,373,16389 +splashhealpot,373,16389 +splashlifepot,373,16389 +splhealingpotion,373,16389 +splhealpotion,373,16389 +spllifepotion,373,16389 +splhealingpot,373,16389 +splhealpot,373,16389 +spllifepot,373,16389 +sphpot,373,16389 +splashclearpotion,373,16390 +splashclearpot,373,16390 +splclearpotion,373,16390 +splclearpot,373,16390 +splashnightvisionpotion,373,16390 +splashnvisionpotion,373,16390 +splashnightvpotion,373,16390 +splashdarkvisionpotion,373,16390 +splashdvisionpotion,373,16390 +splashdarkvpotion,373,16390 +splashnightvisionpot,373,16390 +splashnvisionpot,373,16390 +splashnightvpot,373,16390 +splashdarkvisionpot,373,16390 +splashdvisionpot,373,16390 +splashdarkvpot,373,16390 +splnightvisionpotion,373,16390 +splnvisionpotion,373,16390 +splnightvpotion,373,16390 +spldarkvisionpotion,373,16390 +spldvisionpotion,373,16390 +spldarkvpotion,373,16390 +splnightvisionpot,373,16390 +splnvisionpot,373,16390 +splnightvpot,373,16390 +spldarkvisionpot,373,16390 +spldvisionpot,373,16390 +spldarkvpot,373,16390 +spnpot,373,16390 +splashclearextendedpotion,373,16391 +splashclearexpotion,373,16391 +splashclear2potion,373,16391 +splashclearextendedpot,373,16391 +splashclearexpot,373,16391 +splashclear2pot,373,16391 +splclearextendedpotion,373,16391 +splclearexpotion,373,16391 +splclear2potion,373,16391 +splclearextendedpot,373,16391 +splclearexpot,373,16391 +splclear2pot,373,16391 +splashweaknesspotion,373,16392 +splashweakpotion,373,16392 +splashweaknesspot,373,16392 +splashweakpot,373,16392 +splweaknesspotion,373,16392 +splweakpotion,373,16392 +splweaknesspot,373,16392 +splweakpot,373,16392 +spwpot,373,16392 +splashstrengthpotion,373,16393 +splashstrongpotion,373,16393 +splashstrpotion,373,16393 +splashstrengthpot,373,16393 +splashstrongpot,373,16393 +splashstrpot,373,16393 +splstrengthpotion,373,16393 +splstrongpotion,373,16393 +splstrpotion,373,16393 +splstrengthpot,373,16393 +splstrongpot,373,16393 +splstrpot,373,16393 +spstpot,373,16393 +splashslownesspotion,373,16394 +splashslowpotion,373,16394 +splashslownesspot,373,16394 +splashslowpot,373,16394 +splslownesspotion,373,16394 +splslowpotion,373,16394 +splslownesspot,373,16394 +splslowpot,373,16394 +spslpot,373,16394 +splashdiffusepotion,373,16395 +splashdiffusepot,373,16395 +spldiffusepotion,373,16395 +spldiffusepot,373,16395 +splashharmingpotion,373,16396 +splashdamagepotion,373,16396 +splashdmgpotion,373,16396 +splashharmingpot,373,16396 +splashdamagepot,373,16396 +splashdmgpot,373,16396 +splharmingpotion,373,16396 +spldamagepotion,373,16396 +spldmgpotion,373,16396 +splharmingpot,373,16396 +spldamagepot,373,16396 +spldmgpot,373,16396 +spdpot,373,16396 +splashartlesspotion,373,16397 +splashartlesspot,373,16397 +splartlesspotion,373,16397 +splartlesspot,373,16397 +splashwaterbreathingpotion,373,16397 +splashwaterbreathpotion,373,16397 +splashbreathingpotion,373,16397 +splashbreathpotion,373,16397 +splashwaterbreathingpot,373,16397 +splashwaterbreathpot,373,16397 +splashbreathingpot,373,16397 +splashbreathpot,373,16397 +splwaterbreathingpotion,373,16397 +splwaterbreathpotion,373,16397 +splbreathingpotion,373,16397 +splbreathpotion,373,16397 +splwaterbreathingpot,373,16397 +splwaterbreathpot,373,16397 +splbreathingpot,373,16397 +splbreathpot,373,16397 +spwbpot,373,16397 +splashthinpotion,373,16398 +splashthinpot,373,16398 +splthinpotion,373,16398 +splthinpot,373,16398 +splashinvisibilitypotion,373,16398 +splashinvisiblepotion,373,16398 +splashinvpotion,373,16398 +splashinvisibilitypot,373,16398 +splashinvisiblepot,373,16398 +splashinvpot,373,16398 +splinvisibilitypotion,373,16398 +splinvisiblepotion,373,16398 +splinvpotion,373,16398 +splinvisibilitypot,373,16398 +splinvisiblepot,373,16398 +splinvpot,373,16398 +spipot,373,16398 +splashthinextendedpotion,373,16399 +splashthinexpotion,373,16399 +splashthin2potion,373,16399 +splashthinextendedpot,373,16399 +splashthinexpot,373,16399 +splashthin2pot,373,16399 +splthinextendedpotion,373,16399 +splthinexpotion,373,16399 +splthin2potion,373,16399 +splthinextendedpot,373,16399 +splthinexpot,373,16399 +splthin2pot,373,16399 +splashawkwardpotion,373,16400 +splashawkwardpot,373,16400 +splawkwardpotion,373,16400 +splawkwardpot,373,16400 +splashbunglingpotion,373,16406 +splashbunglingpot,373,16406 +splbunglingpotion,373,16406 +splbunglingpot,373,16406 +splashbunglingextendedpotion,373,16407 +splashbunglingexpotion,373,16407 +splashbungling2potion,373,16407 +splashbunglingextendedpot,373,16407 +splashbunglingexpot,373,16407 +splashbungling2pot,373,16407 +splbunglingextendedpotion,373,16407 +splbunglingexpotion,373,16407 +splbungling2potion,373,16407 +splbunglingextendedpot,373,16407 +splbunglingexpot,373,16407 +splbungling2pot,373,16407 +splashsmoothpotion,373,16411 +splashsmoothpot,373,16411 +splsmoothpotion,373,16411 +splsmoothpot,373,16411 +splashsuavepotion,373,16413 +splashsuavepot,373,16413 +splsuavepotion,373,16413 +splsuavepot,373,16413 +splashdebonairpotion,373,16414 +splashdebonairpot,373,16414 +spldebonairpotion,373,16414 +spldebonairpot,373,16414 +splashdebonairextendedpotion,373,16415 +splashdebonairexpotion,373,16415 +splashdebonair2potion,373,16415 +splashdebonairextendedpot,373,16415 +splashdebonairexpot,373,16415 +splashdebonair2pot,373,16415 +spldebonairextendedpotion,373,16415 +spldebonairexpotion,373,16415 +spldebonair2potion,373,16415 +spldebonairextendedpot,373,16415 +spldebonairexpot,373,16415 +spldebonair2pot,373,16415 +splashthickpotion,373,16416 +splashthickpot,373,16416 +splthickpotion,373,16416 +splthickpot,373,16416 +splashregenerationleveliipotion,373,16417 +splashregenerateleveliipotion,373,16417 +splashregenleveliipotion,373,16417 +splashregenerationlevel2potion,373,16417 +splashregeneratelevel2potion,373,16417 +splashregenlevel2potion,373,16417 +splashregenerationiipotion,373,16417 +splashregenerateiipotion,373,16417 +splashregeniipotion,373,16417 +splashregenerationleveliipot,373,16417 +splashregenerateleveliipot,373,16417 +splashregenleveliipot,373,16417 +splashregenerationlevel2pot,373,16417 +splashregeneratelevel2pot,373,16417 +splashregenlevel2pot,373,16417 +splashregenerationiipot,373,16417 +splashregenerateiipot,373,16417 +splashregeniipot,373,16417 +splregenerationleveliipotion,373,16417 +splregenerateleveliipotion,373,16417 +splregenleveliipotion,373,16417 +splregenerationlevel2potion,373,16417 +splregeneratelevel2potion,373,16417 +splregenlevel2potion,373,16417 +splregenerationiipotion,373,16417 +splregenerateiipotion,373,16417 +splregeniipotion,373,16417 +splregenerationleveliipot,373,16417 +splregenerateleveliipot,373,16417 +splregenleveliipot,373,16417 +splregenerationlevel2pot,373,16417 +splregeneratelevel2pot,373,16417 +splregenlevel2pot,373,16417 +splregenerationiipot,373,16417 +splregenerateiipot,373,16417 +splregeniipot,373,16417 +spr2pot,373,16417 +splashswiftnessleveliipotion,373,16418 +splashswiftleveliipotion,373,16418 +splashspeedleveliipotion,373,16418 +splashswiftnesslevel2potion,373,16418 +splashswiftlevel2potion,373,16418 +splashspeedlevel2potion,373,16418 +splashswiftnessiipotion,373,16418 +splashswiftiipotion,373,16418 +splashspeediipotion,373,16418 +splashswiftnessleveliipot,373,16418 +splashswiftleveliipot,373,16418 +splashspeedleveliipot,373,16418 +splashswiftnesslevel2pot,373,16418 +splashswiftlevel2pot,373,16418 +splashspeedlevel2pot,373,16418 +splashswiftnessiipot,373,16418 +splashswiftiipot,373,16418 +splashspeediipot,373,16418 +splswiftnessleveliipotion,373,16418 +splswiftleveliipotion,373,16418 +splspeedleveliipotion,373,16418 +splswiftnesslevel2potion,373,16418 +splswiftlevel2potion,373,16418 +splspeedlevel2potion,373,16418 +splswiftnessiipotion,373,16418 +splswiftiipotion,373,16418 +splspeediipotion,373,16418 +splswiftnessleveliipot,373,16418 +splswiftleveliipot,373,16418 +splspeedleveliipot,373,16418 +splswiftnesslevel2pot,373,16418 +splswiftlevel2pot,373,16418 +splspeedlevel2pot,373,16418 +splswiftnessiipot,373,16418 +splswiftiipot,373,16418 +splspeediipot,373,16418 +spsw2pot,373,16418 +splashpoisonleveliipotion,373,16420 +splashacidleveliipotion,373,16420 +splashpoisonlevel2potion,373,16420 +splashacidlevel2potion,373,16420 +splashpoisoniipotion,373,16420 +splashacidiipotion,373,16420 +splashpoisonleveliipot,373,16420 +splashacidleveliipot,373,16420 +splashpoisonlevel2pot,373,16420 +splashacidlevel2pot,373,16420 +splashpoisoniipot,373,16420 +splashacidiipot,373,16420 +splpoisonleveliipotion,373,16420 +splacidleveliipotion,373,16420 +splpoisonlevel2potion,373,16420 +splcidlevel2potion,373,16420 +splpoisoniipotion,373,16420 +splacidiipotion,373,16420 +splpoisonleveliipot,373,16420 +splacidleveliipot,373,16420 +splpoisonlevel2pot,373,16420 +splacidlevel2pot,373,16420 +splpoisoniipot,373,16420 +splacidiipot,373,16420 +spp2pot,373,16420 +splashhealingleveliipotion,373,16421 +splashhealleveliipotion,373,16421 +splashhealinglevel2potion,373,16421 +splashheallevel2potion,373,16421 +splashhealingiipotion,373,16421 +splashhealiipotion,373,16421 +splashhealingleveliipot,373,16421 +splashhealleveliipot,373,16421 +splashhealinglevel2pot,373,16421 +splashheallevel2pot,373,16421 +splashhealingiipot,373,16421 +splashhealiipot,373,16421 +splhealingleveliipotion,373,16421 +splhealleveliipotion,373,16421 +splhealinglevel2potion,373,16421 +splheallevel2potion,373,16421 +splhealingiipotion,373,16421 +splhealiipotion,373,16421 +splhealingleveliipot,373,16421 +splhealleveliipot,373,16421 +splhealinglevel2pot,373,16421 +splheallevel2pot,373,16421 +splhealingiipot,373,16421 +splhealiipot,373,16421 +sph2pot,373,16421 +splashcharmingpotion,373,16422 +splashcharmingpot,373,16422 +splcharmingpotion,373,16422 +splcharmingpot,373,16422 +splashcharmingextendedpotion,373,16423 +splashcharmingexpotion,373,16423 +splashcharming2potion,373,16423 +splashcharmingextendedpot,373,16423 +splashcharmingexpot,373,16423 +splashcharming2pot,373,16423 +splcharmingextendedpotion,373,16423 +splcharmingexpotion,373,16423 +splcharming2potion,373,16423 +splcharmingextendedpot,373,16423 +splcharmingexpot,373,16423 +splcharming2pot,373,16423 +splashstrengthleveliipotion,373,16425 +splashstrongleveliipotion,373,16425 +splashstrleveliipotion,373,16425 +splashstrengthlevel2potion,373,16425 +splashstronglevel2potion,373,16425 +splashstrlevel2potion,373,16425 +splashstrengthiipotion,373,16425 +splashstrongiipotion,373,16425 +splashstriipotion,373,16425 +splashstrengthleveliipot,373,16425 +splashstrongleveliipot,373,16425 +splashstrleveliipot,373,16425 +splashstrengthlevel2pot,373,16425 +splashstronglevel2pot,373,16425 +splashstrlevel2pot,373,16425 +splashstrengthiipot,373,16425 +splashstrongiipot,373,16425 +splashstriipot,373,16425 +splstrengthleveliipotion,373,16425 +splstrongleveliipotion,373,16425 +splstrleveliipotion,373,16425 +splstrengthlevel2potion,373,16425 +splstronglevel2potion,373,16425 +splstrlevel2potion,373,16425 +splstrengthiipotion,373,16425 +splstrongiipotion,373,16425 +splstriipotion,373,16425 +splstrengthleveliipot,373,16425 +splstrongleveliipot,373,16425 +splstrleveliipot,373,16425 +splstrengthlevel2pot,373,16425 +splstronglevel2pot,373,16425 +splstrlevel2pot,373,16425 +splstrengthiipot,373,16425 +splstrongiipot,373,16425 +splstriipot,373,16425 +spst2pot,373,16425 +splashrefinedpotion,373,16427 +splashrefinedpot,373,16427 +splrefinedpotion,373,16427 +splrefinedpot,373,16427 +splashharmingleveliipotion,373,16428 +splashdamageleveliipotion,373,16428 +splashdmgleveliipotion,373,16428 +splashharminglevel2potion,373,16428 +splashdamagelevel2potion,373,16428 +splashdmglevel2potion,373,16428 +splashharmingiipotion,373,16428 +splashdamageiipotion,373,16428 +splashdmgiipotion,373,16428 +splashharmingleveliipot,373,16428 +splashdamageleveliipot,373,16428 +splashdmgleveliipot,373,16428 +splashharminglevel2pot,373,16428 +splashdamagelevel2pot,373,16428 +splashdmglevel2pot,373,16428 +splashharmingiipot,373,16428 +splashdamageiipot,373,16428 +splashdmgiipot,373,16428 +splharmingleveliipotion,373,16428 +spldamageleveliipotion,373,16428 +spldmgleveliipotion,373,16428 +splharminglevel2potion,373,16428 +spldamagelevel2potion,373,16428 +spldmglevel2potion,373,16428 +splharmingiipotion,373,16428 +spldamageiipotion,373,16428 +spldmgiipotion,373,16428 +splharmingleveliipot,373,16428 +spldamageleveliipot,373,16428 +spldmgleveliipot,373,16428 +splharminglevel2pot,373,16428 +spldamagelevel2pot,373,16428 +spldmglevel2pot,373,16428 +splharmingiipot,373,16428 +spldamageiipot,373,16428 +spldmgiipot,373,16428 +spd2pot,373,16428 +splashcordialpotion,373,16429 +splashcordialpot,373,16429 +splcordialpotion,373,16429 +splcordialpot,373,16429 +splashsparklingpotion,373,16430 +splashsparklingpot,373,16430 +splsparklingpotion,373,16430 +splsparklingpot,373,16430 +splashsparklingextendedpotion,373,16431 +splashsparklingexpotion,373,16431 +splashsparkling2potion,373,16431 +splashsparklingextendedpot,373,16431 +splashsparklingexpot,373,16431 +splashsparkling2pot,373,16431 +splsparklingextendedpotion,373,16431 +splsparklingexpotion,373,16431 +splsparkling2potion,373,16431 +splsparklingextendedpot,373,16431 +splsparklingexpot,373,16431 +splsparkling2pot,373,16431 +splashpotentpotion,373,16432 +splashpotentpot,373,16432 +splpotentpotion,373,16432 +splpotentpot,373,16432 +splashrankpotion,373,16438 +splashrankpot,373,16438 +splrankpotion,373,16438 +splrankpot,373,16438 +splashrankextendedpotion,373,16439 +splashrankexpotion,373,16439 +splashrank2potion,373,16439 +splashrankextendedpot,373,16439 +splashrankexpot,373,16439 +splashrank2pot,373,16439 +splrankextendedpotion,373,16439 +splrankexpotion,373,16439 +splrank2potion,373,16439 +splrankextendedpot,373,16439 +splrankexpot,373,16439 +splrank2pot,373,16439 +splashacridpotion,373,16443 +splashacridpot,373,16443 +splacridpotion,373,16443 +splacridpot,373,16443 +splashgrosspotion,373,16445 +splashgrosspot,373,16445 +splgrosspotion,373,16445 +splgrosspot,373,16445 +splashstinkypotion,373,16446 +splashstinkypot,373,16446 +splstinkypotion,373,16446 +splstinkypot,373,16446 +splashstinkyextendedpotion,373,16447 +splashstinkyexpotion,373,16447 +splashstinky2potion,373,16447 +splashstinkyextendedpot,373,16447 +splashstinkyexpot,373,16447 +splashstinky2pot,373,16447 +splstinkyextendedpotion,373,16447 +splstinkyexpotion,373,16447 +splstinky2potion,373,16447 +splstinkyextendedpot,373,16447 +splstinkyexpot,373,16447 +splstinky2pot,373,16447 +splashmundaneextendedpotion,373,16448 +splashmundaneexpotion,373,16448 +splashmundane2potion,373,16448 +splashmundaneextendedpot,373,16448 +splashmundaneexpot,373,16448 +splashmundane2pot,373,16448 +splmundaneextendedpotion,373,16448 +splmundaneexpotion,373,16448 +splmundane2potion,373,16448 +splmundaneextendedpot,373,16448 +splmundaneexpot,373,16448 +splmundane2pot,373,16448 +splashregenerationextendedpotion,373,16449 +splashregenerateextendedpotion,373,16449 +splashregenextendepotion,373,16449 +splashregenerationexpotion,373,16449 +splashregenerateexpotion,373,16449 +splashregenexpotion,373,16449 +splashregenerationextendedpot,373,16449 +splashregenerateextendedpot,373,16449 +splashregenextendepot,373,16449 +splashregenerationexpot,373,16449 +splashregenerateexpot,373,16449 +splashregenexpot,373,16449 +splregenerationextendedpotion,373,16449 +splregenerateextendedpotion,373,16449 +splregenextendepotion,373,16449 +splregenerationexpotion,373,16449 +splregenerateexpotion,373,16449 +splregenexpotion,373,16449 +splregenerationextendedpot,373,16449 +splregenerateextendedpot,373,16449 +splregenextendepot,373,16449 +splregenerationexpot,373,16449 +splregenerateexpot,373,16449 +splregenexpot,373,16449 +sprepot,373,16449 +splashswiftnessextendedpotion,373,16450 +splashswiftextendedpotion,373,16450 +splashspeedextendedpotion,373,16450 +splashswiftnessexpotion,373,16450 +splashswiftexpotion,373,16450 +splashspeedexpotion,373,16450 +splashswiftnessextendedpot,373,16450 +splashswiftextendedpot,373,16450 +splashspeedextendedpot,373,16450 +splashswiftnessexpot,373,16450 +splashswiftexpot,373,16450 +splashspeedexpot,373,16450 +splswiftnessextendedpotion,373,16450 +splswiftextendedpotion,373,16450 +splspeedextendedpotion,373,16450 +splswiftnessexpotion,373,16450 +splswiftexpotion,373,16450 +splspeedexpotion,373,16450 +splswiftnessextendedpot,373,16450 +splswiftextendedpot,373,16450 +splspeedextendedpot,373,16450 +splswiftnessexpot,373,16450 +splswiftexpot,373,16450 +splspeedexpot,373,16450 +spswepot,373,16450 +splashfireresistanceextendedpotion,373,16451 +splashfireresistextendedpotion,373,16451 +splashfireresextendedpotion,373,16451 +splashfireresistanceexpotion,373,16451 +splashfireresistexpotion,373,16451 +splashfireresexpotion,373,16451 +splashfireresistanceextendedpot,373,16451 +splashfireresistextendedpot,373,16451 +splashfireresextendedpot,373,16451 +splashfireresistanceexpot,373,16451 +splashfireresistexpot,373,16451 +splashfireresexpot,373,16451 +splfireresistanceextendedpotion,373,16451 +splfireresistextendedpotion,373,16451 +splfireresextendedpotion,373,16451 +splfireresistanceexpotion,373,16451 +splfireresistexpotion,373,16451 +splfireresexpotion,373,16451 +splfireresistanceextendedpot,373,16451 +splfireresistextendedpot,373,16451 +splfireresextendedpot,373,16451 +splfireresistanceexpot,373,16451 +splfireresistexpot,373,16451 +splfireresexpot,373,16451 +spfepot,373,16451 +splashpoisonextendedpotion,373,16452 +splashacidextendedpotion,373,16452 +splashpoisonexpotion,373,16452 +splashacidexpotion,373,16452 +splashpoisonextendedpot,373,16452 +splashacidextendedpot,373,16452 +splashpoisonexpot,373,16452 +splashacidexpot,373,16452 +splpoisonextendedpotion,373,16452 +splacidextendedpotion,373,16452 +splpoisonexpotion,373,16452 +splacidexpotion,373,16452 +splpoisonextendedpot,373,16452 +splacidextendedpot,373,16452 +splpoisonexpot,373,16452 +splacidexpot,373,16452 +sppepot,373,16452 +splashnightvisionextendedpotion,373,16454 +splashnvisionextendedpotion,373,16454 +splashnightvextendedpotion,373,16454 +splashdarkvisionextendedpotion,373,16454 +splashdvisionextendedpotion,373,16454 +splashdarkvextendedpotion,373,16454 +splashnightvisionextendedpot,373,16454 +splashnvisionextendedpot,373,16454 +splashnightvextendedpot,373,16454 +splashdarkvisionextendedpot,373,16454 +splashdvisionextendedpot,373,16454 +splashdarkvextendedpot,373,16454 +splashnightvisionexpotion,373,16454 +splashnvisionexpotion,373,16454 +splashnightvexpotion,373,16454 +splashdarkvisionexpotion,373,16454 +splashdvisionexpotion,373,16454 +splashdarkvexpotion,373,16454 +splashnightvisionexpot,373,16454 +splashnvisionexpot,373,16454 +splashnightvexpot,373,16454 +splashdarkvisionexpot,373,16454 +splashdvisionexpot,373,16454 +splashdarkvexpot,373,16454 +splnightvisionextendedpotion,373,16454 +splnvisionextendedpotion,373,16454 +splnightvextendedpotion,373,16454 +spldarkvisionextendedpotion,373,16454 +spldvisionextendedpotion,373,16454 +spldarkvextendedpotion,373,16454 +splnightvisionextendedpot,373,16454 +splnvisionextendedpot,373,16454 +splnightvextendedpot,373,16454 +spldarkvisionextendedpot,373,16454 +spldvisionextendedpot,373,16454 +spldarkvextendedpot,373,16454 +splnightvisionexpotion,373,16454 +splnvisionexpotion,373,16454 +splnightvexpotion,373,16454 +spldarkvisionexpotion,373,16454 +spldvisionexpotion,373,16454 +spldarkvexpotion,373,16454 +splnightvisionexpot,373,16454 +splnvisionexpot,373,16454 +splnightvexpot,373,16454 +spldarkvisionexpot,373,16454 +spldvisionexpot,373,16454 +spldarkvexpot,373,16454 +spnepot,373,16454 +splashweaknessextendedpotion,373,16456 +splashweakextendedpotion,373,16456 +splashweaknessexpotion,373,16456 +splashweakexpotion,373,16456 +splashweaknessextendedpot,373,16456 +splashweakextendedpot,373,16456 +splashweaknessexpot,373,16456 +splashweakexpot,373,16456 +splweaknessextendedpotion,373,16456 +sphweakextendedpotion,373,16456 +splweaknessexpotion,373,16456 +splweakexpotion,373,16456 +splweaknessextendedpot,373,16456 +splweakextendedpot,373,16456 +splweaknessexpot,373,16456 +splweakexpot,373,16456 +spwepot,373,16456 +splashstrengthextendedpotion,373,16457 +splashstrongextendedpotion,373,16457 +splashstrextendedpotion,373,16457 +splashstrengthexpotion,373,16457 +splashstrongexpotion,373,16457 +splashstrexpotion,373,16457 +splashstrengthextendedpot,373,16457 +splashstrongextendedpot,373,16457 +splashstrextendedpot,373,16457 +splashstrengthexpot,373,16457 +splashstrongexpot,373,16457 +splashstrexpot,373,16457 +splstrengthextendedpotion,373,16457 +splstrongextendedpotion,373,16457 +splstrextendedpotion,373,16457 +splstrengthexpotion,373,16457 +splstrongexpotion,373,16457 +splstrexpotion,373,16457 +splstrengthextendedpot,373,16457 +splstrongextendedpot,373,16457 +splstrextendedpot,373,16457 +splstrengthexpot,373,16457 +splstrongexpot,373,16457 +splstrexpot,373,16457 +spstepot,373,16457 +splashslownessextendedpotion,373,16458 +splashslowextenedpotion,373,16458 +splashslownessexpotion,373,16458 +splashslowexpotion,373,16458 +splashslownessextendedpot,373,16458 +splashslowextenedpot,373,16458 +splashslownessexpot,373,16458 +splashslowexpot,373,16458 +splslownessextendedpotion,373,16458 +splslowextenedpotion,373,16458 +splslownessexpotion,373,16458 +splslowexpotion,373,16458 +splslownessextendedpot,373,16458 +splslowextenedpot,373,16458 +splslownessexpot,373,16458 +splslowexpot,373,16458 +spslepot,373,16458 +splashwaterbreathingextendedpotion,373,16461 +splashwaterbreathextendedpotion,373,16461 +splashbreathingextendedpotion,373,16461 +splashbreathextendedpotion,373,16461 +splashwaterbreathingextendedpot,373,16461 +splashwaterbreathextendedpot,373,16461 +splashbreathingextendedpot,373,16461 +splashbreathextendedpot,373,16461 +splwaterbreathingextendedpotion,373,16461 +splwaterbreathextendedpotion,373,16461 +splbreathingextendedpotion,373,16461 +splbreathextendedpotion,373,16461 +splwaterbreathingextendedpot,373,16461 +splwaterbreathextendedpot,373,16461 +splbreathingextendedpot,373,16461 +splbreathextendedpot,373,16461 +splashwaterbreathingexpotion,373,16461 +splashwaterbreathexpotion,373,16461 +splashbreathingexpotion,373,16461 +splashbreathexpotion,373,16461 +splashwaterbreathingexpot,373,16461 +splashwaterbreathexpot,373,16461 +splashbreathingexpot,373,16461 +splashbreathexpot,373,16461 +splwaterbreathingexpotion,373,16461 +splwaterbreathexpotion,373,16461 +splbreathingexpotion,373,16461 +splbreathexpotion,373,16461 +splwaterbreathingexpot,373,16461 +splwaterbreathexpot,373,16461 +splbreathingexpot,373,16461 +splbreathexpot,373,16461 +spwbepot,373,16461 +splashinvisibilityextendedpotion,373,16462 +splashinvisibleextendedpotion,373,16462 +splashinvextendedpotion,373,16462 +splashinvisibilityextendedpot,373,16462 +splashinvisibleextendedpot,373,16462 +splashinvextendedpot,373,16462 +splashinvisibilityexpotion,373,16462 +splashinvisibleexpotion,373,16462 +splashinvexpotion,373,16462 +splashinvisibilityexpot,373,16462 +splashinvisibleexpot,373,16462 +splashinvexpot,373,16462 +splinvisibilityextendedpotion,373,16462 +splinvisibleextendedpotion,373,16462 +splinvextendedpotion,373,16462 +splinvisibilityextendedpot,373,16462 +splinvisibleextendedpot,373,16462 +splinvextendedpot,373,16462 +splinvisibilityexpotion,373,16462 +splinvisibleexpotion,373,16462 +splinvexpotion,373,16462 +splinvisibilityexpot,373,16462 +splinvisibleexpot,373,16462 +splinvexpot,373,16462 +spiepot,373,16462 +splashregenerationdualbitpotion,373,16481 +splashregeneratedualbitpotion,373,16481 +splashregendualbitpotion,373,16481 +splashregenerationdualbitpot,373,16481 +splashregeneratedualbitpot,373,16481 +splashregendualbitpot,373,16481 +splregenerationdualbitpotion,373,16481 +splregeneratedualbitpotion,373,16481 +splregendualbitpotion,373,16481 +splregenerationdualbitpot,373,16481 +splregeneratedualbitpot,373,16481 +splregendualbitpot,373,16481 +splashregenerationdbpotion,373,16481 +splashregeneratedbpotion,373,16481 +splashregendbpotion,373,16481 +splashregenerationdbpot,373,16481 +splashregeneratedbpot,373,16481 +splashregendbpot,373,16481 +splregenerationdbpotion,373,16481 +splregeneratedbpotion,373,16481 +splregendbpotion,373,16481 +splregenerationdbpot,373,16481 +splregeneratedbpot,373,16481 +splregendbpot,373,16481 +sprdbpot,373,16481 +splashswiftnessdualbitpotion,373,16482 +splashswiftdualbitpotion,373,16482 +splashspeeddualbitpotion,373,16482 +splashswiftnessdualbitpot,373,16482 +splashswiftdualbitpot,373,16482 +splashspeeddualbitpot,373,16482 +splswiftnessdualbitpotion,373,16482 +splswiftdualbitpotion,373,16482 +splspeeddualbitpotion,373,16482 +splswiftnessdualbitpot,373,16482 +splswiftdualbitpot,373,16482 +splspeeddualbitpot,373,16482 +splashswiftnessdbpotion,373,16482 +splashswiftdbpotion,373,16482 +splashspeeddbpotion,373,16482 +splashswiftnessdbpot,373,16482 +splashswiftdbpot,373,16482 +splashspeeddbpot,373,16482 +splswiftnessdbpotion,373,16482 +splswiftdbpotion,373,16482 +splspeeddbpotion,373,16482 +splswiftnessdbpot,373,16482 +splswiftdbpot,373,16482 +splspeeddbpot,373,16482 +spswdbpot,373,16482 +splashpoisondualbitpotion,373,16484 +splashaciddualbitpotion,373,16484 +splashpoisondualbitpot,373,16484 +splashaciddualbitpot,373,16484 +splpoisondualbitpotion,373,16484 +splaciddualbitpotion,373,16484 +splpoisondualbitpot,373,16484 +splaciddualbitpot,373,16484 +splashpoisondbpotion,373,16484 +splashaciddbpotion,373,16484 +splashpoisondbpot,373,16484 +splashaciddbpot,373,16484 +splpoisondbpotion,373,16484 +splaciddbpotion,373,16484 +splpoisondbpot,373,16484 +splaciddbpot,373,16484 +sppdbpot,373,16484 +splashstrengthdualbitpotion,373,16489 +splashstrongdualbitpotion,373,16489 +splashstrdualbitpotion,373,16489 +splashstrengthdualbitpot,373,16489 +splashstrongdualbitpot,373,16489 +splashstrdualbitpot,373,16489 +splstrengthdualbitpotion,373,16489 +splstrongdualbitpotion,373,16489 +splstrdualbitpotion,373,16489 +splstrengthdualbitpot,373,16489 +splstrongdualbitpot,373,16489 +splstrdualbitpot,373,16489 +splashstrengthdbpotion,373,16489 +splashstrongdbpotion,373,16489 +splashstrdbpotion,373,16489 +splashstrengthdbpot,373,16489 +splashstrongdbpot,373,16489 +splashstrdbpot,373,16489 +splstrengthdbpotion,373,16489 +splstrongdbpotion,373,16489 +splstrdbpotion,373,16489 +splstrengthdbpot,373,16489 +splstrongdbpot,373,16489 +splstrdbpot,373,16489 +spstdbpot,373,16489 +glassbottle,374,0 +bottle,374,0 +gbottle,374,0 +gvase,374,0 +vase,374,0 +glassvase,374,0 +emptyglassbottle,374,0 +emptybottle,374,0 +emptygbottle,374,0 +emptygvase,374,0 +emptyvase,374,0 +emptyglassvase,374,0 +eglassbottle,374,0 +ebottle,374,0 +egbottle,374,0 +egvase,374,0 +evase,374,0 +eglassvase,374,0 +spidereye,375,0 +eyeofspider,375,0 +seye,375,0 +fermentedspidereye,376,0 +craftedspidereye,376,0 +fspidereye,376,0 +cspidereye,376,0 +fermentedeyeofspider,376,0 +craftedeyeofspider,376,0 +feyeofspider,376,0 +ceyeofspider,376,0 +fermentedseye,376,0 +craftedseye,376,0 +fseye,376,0 +cseye,376,0 +blazepowder,377,0 +blazedust,377,0 +goldpowder,377,0 +golddust,377,0 +gdust,377,0 +gpowder,377,0 +bpowder,377,0 +bdust,377,0 +magmacream,378,0 +goldcream,378,0 +blazecream,378,0 +mcream,378,0 +gcream,378,0 +bcream,378,0 +combinedcream,378,0 +ccream,378,0 +bstand,379,0 +pstand,379,0 +brewingstand,379,0 +potionstand,379,0 +cauldron,380,0 +steelcauldron,380,0 +ironcauldron,380,0 +icauldron,380,0 +scauldron,380,0 +potioncauldron,380,0 +pcauldron,380,0 +eyeofender,381,0 +endereye,381,0 +endeye,381,0 +evilendereye,381,0 +evileyeofender,381,0 +evilenderpearl,381,0 +eeye,381,0 +eofender,381,0 +glisteringmelon,382,0 +speckledmelon,382,0 +goldmelon,382,0 +sparklymelon,382,0 +shiningmelon,382,0 +gmelon,382,0 +smelon,382,0 +creeperegg,383,50 +eggcreeper,383,50 +skeletonegg,383,51 +eggskeleton,383,51 +spideregg,383,52 +eggspider,383,52 +giantegg,383,53 +egggiant,383,53 +zombieegg,383,54 +eggzombie,383,54 +slimeegg,383,55 +eggslime,383,55 +ghastegg,383,56 +eggghast,383,56 +zombiepigmanegg,383,57 +zpigmanegg,383,57 +pigmanegg,383,57 +zombiepmanegg,383,57 +zpmanegg,383,57 +zombiepigmegg,383,57 +zpigmegg,383,57 +zombiepigegg,383,57 +zpigegg,383,57 +zombiepmegg,383,57 +zombiepegg,383,57 +eggzombiepigman,383,57 +eggzpigman,383,57 +eggpigman,383,57 +eggzombiepman,383,57 +eggzpman,383,57 +eggzombiepigm,383,57 +eggzpigm,383,57 +eggzombiepig,383,57 +eggzpig,383,57 +eggzombiepm,383,57 +eggzombiep,383,57 +endermanegg,383,58 +eggenderman,383,58 +eggcavespider,383,59 +cavespideregg,383,59 +silverfishegg,383,60 +eggsilverfish,383,60 +blazeegg,383,61 +eggblaze,383,61 +lavaslimeegg,383,62 +lavacubeegg,383,62 +magmacubeegg,383,62 +magmaslimeegg,383,62 +egglavaslime,383,62 +egglavacube,383,62 +eggmagmacube,383,62 +eggmagmaslime,383,62 +bategg,383,65 +eggbat,383,65 +witchegg,383,66 +eggwitch,383,66 +pigegg,383,90 +eggpig,383,90 +sheepegg,383,91 +eggsheep,383,91 +cowegg,383,92 +eggcow,383,92 +chickenegg,383,93 +eggchicken,383,93 +squidegg,383,94 +eggsquid,383,94 +wolfegg,383,95 +eggwolf,383,95 +mooshroomegg,383,96 +mushroomcowegg,383,96 +eggmooshroom,383,96 +eggmushroomcow,383,96 +snowgolemegg,383,97 +sgolemegg,383,97 +eggsnowgolem,383,97 +eggsgolem,383,97 +ocelotegg,383,98 +eggocelot,383,98 +irongolemegg,383,99 +igolemegg,383,99 +eggirongolem,383,99 +eggigolem,383,99 +egghorse,383,100 +horseegg,383,100 +villageregg,383,120 +eggvillager,383,120 +bottleofenchanting,384,0 +enchantingbottle,384,0 +expbottle,384,0 +xpbottle,384,0 +bottleexp,384,0 +bottlexp,384,0 +enchantbottle,384,0 +bottleenchanting,384,0 +bottleenchant,384,0 +bottleoenchanting,384,0 +firecharge,385,0 +fireball,385,0 +grenade,385,0 +bookandquill,386,0 +booknquill,386,0 +bookandfeather,386,0 +booknfeather,386,0 +writeablebook,386,0 +writtenbook,387,0 +readablebook,387,0 +sealedbook,387,0 +diary,387,0 +ownedbook,387,0 +emerald,388,0 +itemframe,389,0 +pictureframe,389,0 +iframe,389,0 +pframe,389,0 +flowerpot,390,0 +pot,390,0 +carrot,391,0 +potato,392,0 +rawpotato,392,0 +bakedpotato,393,0 +roastedpotato,393,0 +cookedpotato,393,0 +bakepotato,393,0 +roastpotato,393,0 +cookpotato,393,0 +bpotato,393,0 +rpotato,393,0 +cpotato,393,0 +poisonouspotato,394,0 +poisonpotato,394,0 +ppotato,394,0 +emptymap,395,0 +map,395,0 +goldencarrot,396,0 +goldcarrot,396,0 +gcarrot,396,0 +head,397,0 +skull,397,0 +skeletonhead,397,0 +headskeleton,397,0 +skeletonskull,397,0 +skullskeleton,397,0 +witherhead,397,1 +witherskeletonhead,397,1 +wskeletionhead,397,1 +headwither,397,1 +headwitherskeleton,397,1 +headwskeletion,397,1 +witherskull,397,1 +witherskeletonskull,397,1 +wskeletionskull,397,1 +skullwither,397,1 +skullwitherskeleton,397,1 +skullwskeletion,397,1 +zombiehead,397,2 +headzombie,397,2 +zombieskull,397,2 +skullzombie,397,2 +playerhead,397,3 +humanhead,397,3 +stevehead,397,3 +headplayer,397,3 +headhuman,397,3 +headsteve,397,3 +playerskull,397,3 +humanskull,397,3 +steveskull,397,3 +skullplayer,397,3 +skullhuman,397,3 +skullsteve,397,3 +creeperhead,397,4 +headcreeper,397,4 +creeperskull,397,4 +skullcreeper,397,4 +carrotonastick,398,0 +carrotonstick,398,0 +netherstar,399,0 +hellstar,399,0 +nstar,399,0 +hstar,399,0 +star,399,0 +pumpkinpie,400,0 +pumpkincake,400,0 +ppie,400,0 +pcake,400,0 +pie,400,0 +fireworkrocket,401,0 +fireworkmissle,401,0 +firework,401,0 +fworkrocket,401,0 +fworkmissle,401,0 +fwork,401,0 +fwrocket,401,0 +fwmissle,401,0 +fireworkstar,402,0 +fworkstar,402,0 +fwstar,402,0 +fireworkball,402,0 +fworkball,402,0 +fwball,402,0 +fireworkpowder,402,0 +fworkpowder,402,0 +fwpowder,402,0 +fireworkcharge,402,0 +fworkcharge,402,0 +fwcharge,402,0 +enchantedbook,403,0 +enchantmentbook,403,0 +enchantingbook,403,0 +enchantbook,403,0 +magicalbook,403,0 +magicbook,403,0 +ebook,403,0 +mbook,403,0 +redstonecomparator,404,0 +redstonecomparer,404,0 +redstonecompare,404,0 +rstonecomparator,404,0 +rstonecomparer,404,0 +rstonecompare,404,0 +redscomparator,404,0 +redscomparer,404,0 +redscompare,404,0 +rscomparator,404,0 +rscomparer,404,0 +rscompare,404,0 +comparator,404,0 +comparer,404,0 +compare,404,0 +netherbrick,405,0 +nbrick,405,0 +hellbrick,405,0 +deathbrick,405,0 +dbrick,405,0 +hbrick,405,0 +netherquartz,406,0 +deathquartz,406,0 +hellquartz,406,0 +nquartz,406,0 +dquartz,406,0 +hquartz,406,0 +quartz,406,0 +tntminecart,407,0 +dynamiteminecart,407,0 +dynamitemcart,407,0 +dynamitecart,407,0 +bombminecart,407,0 +bombmcart,407,0 +bombcart,407,0 +tntmcart,407,0 +tntcart,407,0 +dminecart,407,0 +dmcart,407,0 +dcart,407,0 +bminecart,407,0 +bmcart,407,0 +bcart,407,0 +tminecart,407,0 +tmcart,407,0 +tcart,407,0 +hopperminecart,408,0 +hoppermcart,408,0 +hoppercart,408,0 +hopminecart,408,0 +hopmcart,408,0 +hopcart,408,0 +hminecart,408,0 +hmcart,408,0 +hcart,408,0 +ironhorsearmor,417,0 +ironharmor,417,0 +ironarmor,417,0 +ihorsearmor,417,0 +iharmor,417,0 +iarmor,417,0 +steelhorsearmor,417,0 +steelharmor,417,0 +steelarmor,417,0 +shorsearmor,417,0 +sharmor,417,0 +sarmor,417,0 +goldenhorsearmor,418,0 +goldenharmor,418,0 +goldenarmor,418,0 +goldhorsearmor,418,0 +goldharmor,418,0 +goldarmor,418,0 +ghorsearmor,418,0 +gharmor,418,0 +garmor,418,0 +diamondhorsearmor,419,0 +diamondharmor,419,0 +diamondarmor,419,0 +dhorsearmor,419,0 +dharmor,419,0 +darmor,419,0 +crystalhorsearmor,419,0 +crystalharmor,419,0 +crystalarmor,419,0 +chorsearmor,419,0 +charmor,419,0 +carmor,419,0 +lead,420,0 +leash,420,0 +rope,420,0 +nametag,421,0 +tag,421,0 +commandblockminecart,422,0 +cmdblockminecart,422,0 +cblockminecart,422,0 +commandminecart,422,0 +cmdminecart,422,0 +cbminecart,422,0 +commandblockcart,422,0 +cmdblockcart,422,0 +cblockcart,422,0 +commandcart,422,0 +cmdcart,422,0 +cbcart,422,0 +13disc,2256,0 +goldmusicrecord,2256,0 +goldmusicdisk,2256,0 +goldmusicdisc,2256,0 +goldmusiccd,2256,0 +13musicrecord,2256,0 +13musicdisk,2256,0 +13musicdisc,2256,0 +13musiccd,2256,0 +gomusicrecord,2256,0 +gomusicdisk,2256,0 +gomusicdisc,2256,0 +gomusiccd,2256,0 +goldmrecord,2256,0 +goldmdisk,2256,0 +goldmdisc,2256,0 +goldmcd,2256,0 +13mrecord,2256,0 +13mdisk,2256,0 +13mdisc,2256,0 +13mcd,2256,0 +gomrecord,2256,0 +gomdisk,2256,0 +gomdisc,2256,0 +gomcd,2256,0 +goldrecord,2256,0 +golddisk,2256,0 +golddisc,2256,0 +goldcd,2256,0 +13record,2256,0 +13disk,2256,0 +13cd,2256,0 +gorecord,2256,0 +godisk,2256,0 +godisc,2256,0 +gocd,2256,0 +record1,2256,0 +disk1,2256,0 +disc1,2256,0 +cd1,2256,0 +1record,2256,0 +1disk,2256,0 +1disc,2256,0 +1cd,2256,0 +catdisc,2257,0 +greenmusicrecord,2257,0 +greenmusicdisk,2257,0 +greenmusicdisc,2257,0 +greenmusiccd,2257,0 +catmusicrecord,2257,0 +catmusicdisk,2257,0 +catmusicdisc,2257,0 +catmusiccd,2257,0 +grmusicrecord,2257,0 +grmusicdisk,2257,0 +grmusicdisc,2257,0 +grmusiccd,2257,0 +greenmrecord,2257,0 +greenmdisk,2257,0 +greenmdisc,2257,0 +greenmcd,2257,0 +catmrecord,2257,0 +catmdisk,2257,0 +catmdisc,2257,0 +catmcd,2257,0 +grmrecord,2257,0 +grmdisk,2257,0 +grmdisc,2257,0 +grmcd,2257,0 +greenrecord,2257,0 +greendisk,2257,0 +greendisc,2257,0 +greencd,2257,0 +catrecord,2257,0 +catdisk,2257,0 +catcd,2257,0 +grrecord,2257,0 +grdisk,2257,0 +grdisc,2257,0 +grcd,2257,0 +record2,2257,0 +disk2,2257,0 +disc2,2257,0 +cd2,2257,0 +2record,2257,0 +2disk,2257,0 +2disc,2257,0 +2cd,2257,0 +blocksdisc,2258,0 +orangemusicrecord,2258,0 +orangemusicdisk,2258,0 +orangemusicdisc,2258,0 +orangemusiccd,2258,0 +blocksmusicrecord,2258,0 +blocksmusicdisk,2258,0 +blocksmusicdisc,2258,0 +blocksmusiccd,2258,0 +ormusicrecord,2258,0 +ormusicdisk,2258,0 +ormusicdisc,2258,0 +ormusiccd,2258,0 +orangemrecord,2258,0 +orangemdisk,2258,0 +orangemdisc,2258,0 +orangemcd,2258,0 +blocksmrecord,2258,0 +blocksmdisk,2258,0 +blocksmdisc,2258,0 +blocksmcd,2258,0 +ormrecord,2258,0 +ormdisk,2258,0 +ormdisc,2258,0 +ormcd,2258,0 +orangerecord,2258,0 +orangedisk,2258,0 +orangedisc,2258,0 +orangecd,2258,0 +blocksrecord,2258,0 +blocksdisk,2258,0 +blockscd,2258,0 +orrecord,2258,0 +ordisk,2258,0 +ordisc,2258,0 +orcd,2258,0 +record3,2258,0 +disk3,2258,0 +disc3,2258,0 +cd3,2258,0 +3record,2258,0 +3disk,2258,0 +3disc,2258,0 +3cd,2258,0 +chirpdisc,2259,0 +redmusicrecord,2259,0 +redmusicdisk,2259,0 +redmusicdisc,2259,0 +redmusiccd,2259,0 +chirpmusicrecord,2259,0 +chirpmusicdisk,2259,0 +chirpmusicdisc,2259,0 +chirpmusiccd,2259,0 +remusicrecord,2259,0 +remusicdisk,2259,0 +remusicdisc,2259,0 +remusiccd,2259,0 +redmrecord,2259,0 +redmdisk,2259,0 +redmdisc,2259,0 +redmcd,2259,0 +chirpmrecord,2259,0 +chirpmdisk,2259,0 +chirpmdisc,2259,0 +chirpmcd,2259,0 +remrecord,2259,0 +remdisk,2259,0 +remdisc,2259,0 +remcd,2259,0 +redrecord,2259,0 +reddisk,2259,0 +reddisc,2259,0 +redcd,2259,0 +chirprecord,2259,0 +chirpdisk,2259,0 +chirpcd,2259,0 +rerecord,2259,0 +redisk,2259,0 +redisc,2259,0 +recd,2259,0 +record4,2259,0 +disk4,2259,0 +disc4,2259,0 +cd4,2259,0 +4record,2259,0 +4disk,2259,0 +4disc,2259,0 +4cd,2259,0 +fardisc,2260,0 +lightgreenmusicrecord,2260,0 +lightgreenmusicdisk,2260,0 +lightgreenmusicdisc,2260,0 +lightgreenmusiccd,2260,0 +lgreenmusicrecord,2260,0 +lgreenmusicdisk,2260,0 +lgreenmusicdisc,2260,0 +lgreenmusiccd,2260,0 +lightgrmusicrecord,2260,0 +lightgrmusicdisk,2260,0 +lightgrmusicdisc,2260,0 +lightgrmusiccd,2260,0 +farmusicrecord,2260,0 +farmusicdisk,2260,0 +farmusicdisc,2260,0 +farmusiccd,2260,0 +lgrmusicrecord,2260,0 +lgrmusicdisk,2260,0 +lgrmusicdisc,2260,0 +lgrmusiccd,2260,0 +lightgreenmrecord,2260,0 +lightgreenmdisk,2260,0 +lightgreenmdisc,2260,0 +lightgreenmcd,2260,0 +lgreenmrecord,2260,0 +lgreenmdisk,2260,0 +lgreenmdisc,2260,0 +lgreenmcd,2260,0 +lightgrmrecord,2260,0 +lightgrmdisk,2260,0 +lightgrmdisc,2260,0 +lightgrmcd,2260,0 +farmrecord,2260,0 +farmdisk,2260,0 +farmdisc,2260,0 +farmcd,2260,0 +lgrmrecord,2260,0 +lgrmdisk,2260,0 +lgrmdisc,2260,0 +lgrmcd,2260,0 +lightgreenrecord,2260,0 +lightgreendisk,2260,0 +lightgreendisc,2260,0 +lightgreencd,2260,0 +lgreenrecord,2260,0 +lgreendisk,2260,0 +lgreendisc,2260,0 +lgreencd,2260,0 +lightgrrecord,2260,0 +lightgrdisk,2260,0 +lightgrdisc,2260,0 +lightgrcd,2260,0 +farrecord,2260,0 +fardisk,2260,0 +farcd,2260,0 +lgrrecord,2260,0 +lgrdisk,2260,0 +lgrdisc,2260,0 +lgrcd,2260,0 +record5,2260,0 +disk5,2260,0 +disc5,2260,0 +cd5,2260,0 +5record,2260,0 +5disk,2260,0 +5disc,2260,0 +5cd,2260,0 +malldisc,2261,0 +purplemusicrecord,2261,0 +purplemusicdisk,2261,0 +purplemusicdisc,2261,0 +purplemusiccd,2261,0 +mallmusicrecord,2261,0 +mallmusicdisk,2261,0 +mallmusicdisc,2261,0 +mallmusiccd,2261,0 +pumusicrecord,2261,0 +pumusicdisk,2261,0 +pumusicdisc,2261,0 +pumusiccd,2261,0 +purplemrecord,2261,0 +purplemdisk,2261,0 +purplemdisc,2261,0 +purplemcd,2261,0 +mallmrecord,2261,0 +mallmdisk,2261,0 +mallmdisc,2261,0 +mallmcd,2261,0 +pumrecord,2261,0 +pumdisk,2261,0 +pumdisc,2261,0 +pumcd,2261,0 +purplerecord,2261,0 +purpledisk,2261,0 +purpledisc,2261,0 +purplecd,2261,0 +mallrecord,2261,0 +malldisk,2261,0 +mallcd,2261,0 +purecord,2261,0 +pudisk,2261,0 +pudisc,2261,0 +pucd,2261,0 +record6,2261,0 +disk6,2261,0 +disc6,2261,0 +cd6,2261,0 +6record,2261,0 +6disk,2261,0 +6disc,2261,0 +6cd,2261,0 +mellohidisc,2262,0 +pinkmusicrecord,2262,0 +pinkmusicdisk,2262,0 +pinkmusicdisc,2262,0 +pinkmusiccd,2262,0 +mellohimusicrecord,2262,0 +mellohimusicdisk,2262,0 +mellohimusicdisc,2262,0 +mellohimusiccd,2262,0 +pimusicrecord,2262,0 +pimusicdisk,2262,0 +pimusicdisc,2262,0 +pimusiccd,2262,0 +pinkmrecord,2262,0 +pinkmdisk,2262,0 +pinkmdisc,2262,0 +pinkmcd,2262,0 +mellohimrecord,2262,0 +mellohimdisk,2262,0 +mellohimdisc,2262,0 +mellohimcd,2262,0 +pimrecord,2262,0 +pimdisk,2262,0 +pimdisc,2262,0 +pimcd,2262,0 +pinkrecord,2262,0 +pinkdisk,2262,0 +pinkdisc,2262,0 +pinkcd,2262,0 +mellohirecord,2262,0 +mellohidisk,2262,0 +mellohicd,2262,0 +pirecord,2262,0 +pidisk,2262,0 +pidisc,2262,0 +picd,2262,0 +record7,2262,0 +disk7,2262,0 +disc7,2262,0 +cd7,2262,0 +7record,2262,0 +7disk,2262,0 +7disc,2262,0 +7cd,2262,0 +staldisc,2263,0 +blackmusicrecord,2263,0 +blackmusicdisk,2263,0 +blackmusicdisc,2263,0 +blackmusiccd,2263,0 +stalmusicrecord,2263,0 +stalmusicdisk,2263,0 +stalmusicdisc,2263,0 +stalmusiccd,2263,0 +blmusicrecord,2263,0 +blmusicdisk,2263,0 +blmusicdisc,2263,0 +blmusiccd,2263,0 +blackmrecord,2263,0 +blackmdisk,2263,0 +blackmdisc,2263,0 +blackmcd,2263,0 +stalmrecord,2263,0 +stalmdisk,2263,0 +stalmdisc,2263,0 +stalmcd,2263,0 +blmrecord,2263,0 +blmdisk,2263,0 +blmdisc,2263,0 +blmcd,2263,0 +blackrecord,2263,0 +blackdisk,2263,0 +blackdisc,2263,0 +blackcd,2263,0 +stalrecord,2263,0 +staldisk,2263,0 +stalcd,2263,0 +blrecord,2263,0 +bldisk,2263,0 +bldisc,2263,0 +blcd,2263,0 +record8,2263,0 +disk8,2263,0 +disc8,2263,0 +cd8,2263,0 +8record,2263,0 +8disk,2263,0 +8disc,2263,0 +8cd,2263,0 +straddisc,2264,0 +whitemusicrecord,2264,0 +whitemusicdisk,2264,0 +whitemusicdisc,2264,0 +whitemusiccd,2264,0 +stradmusicrecord,2264,0 +stradmusicdisk,2264,0 +stradmusicdisc,2264,0 +stradmusiccd,2264,0 +whmusicrecord,2264,0 +whmusicdisk,2264,0 +whmusicdisc,2264,0 +whmusiccd,2264,0 +whitemrecord,2264,0 +whitemdisk,2264,0 +whitemdisc,2264,0 +whitemcd,2264,0 +stradmrecord,2264,0 +stradmdisk,2264,0 +stradmdisc,2264,0 +stradmcd,2264,0 +whmrecord,2264,0 +whmdisk,2264,0 +whmdisc,2264,0 +whmcd,2264,0 +whiterecord,2264,0 +whitedisk,2264,0 +whitedisc,2264,0 +whitecd,2264,0 +stradrecord,2264,0 +straddisk,2264,0 +stradcd,2264,0 +whrecord,2264,0 +whdisk,2264,0 +whdisc,2264,0 +whcd,2264,0 +record9,2264,0 +disk9,2264,0 +disc9,2264,0 +cd9,2264,0 +9record,2264,0 +9disk,2264,0 +9disc,2264,0 +9cd,2264,0 +warddisc,2265,0 +darkgreenmusicrecord,2265,0 +darkgreenmusicdisk,2265,0 +darkgreenmusicdisc,2265,0 +darkgreenmusiccd,2265,0 +dgreenmusicrecord,2265,0 +dgreenmusicdisk,2265,0 +dgreenmusicdisc,2265,0 +dgreenmusiccd,2265,0 +darkgrmusicrecord,2265,0 +darkgrmusicdisk,2265,0 +darkgrmusicdisc,2265,0 +darkgrmusiccd,2265,0 +wardmusicrecord,2265,0 +wardmusicdisk,2265,0 +wardmusicdisc,2265,0 +wardmusiccd,2265,0 +dgrmusicrecord,2265,0 +dgrmusicdisk,2265,0 +dgrmusicdisc,2265,0 +dgrmusiccd,2265,0 +darkgreenmrecord,2265,0 +darkgreenmdisk,2265,0 +darkgreenmdisc,2265,0 +darkgreenmcd,2265,0 +dgreenmrecord,2265,0 +dgreenmdisk,2265,0 +dgreenmdisc,2265,0 +dgreenmcd,2265,0 +darkgrmrecord,2265,0 +darkgrmdisk,2265,0 +darkgrmdisc,2265,0 +darkgrmcd,2265,0 +wardmrecord,2265,0 +wardmdisk,2265,0 +wardmdisc,2265,0 +wardmcd,2265,0 +dgrmrecord,2265,0 +dgrmdisk,2265,0 +dgrmdisc,2265,0 +dgrmcd,2265,0 +darkgreenrecord,2265,0 +darkgreendisk,2265,0 +darkgreendisc,2265,0 +darkgreencd,2265,0 +dgreenrecord,2265,0 +dgreendisk,2265,0 +dgreendisc,2265,0 +dgreencd,2265,0 +darkgrrecord,2265,0 +darkgrdisk,2265,0 +darkgrdisc,2265,0 +darkgrcd,2265,0 +wardrecord,2265,0 +warddisk,2265,0 +wardcd,2265,0 +dgrrecord,2265,0 +dgrdisk,2265,0 +dgrdisc,2265,0 +dgrcd,2265,0 +record10,2265,0 +disk10,2265,0 +disc10,2265,0 +cd10,2265,0 +10record,2265,0 +10disk,2265,0 +10disc,2265,0 +10cd,2265,0 +11disc,2266,0 +crackedmusicrecord,2266,0 +crackedmusicdisk,2266,0 +crackedmusicdisc,2266,0 +crackedmusiccd,2266,0 +crackmusicrecord,2266,0 +crackmusicdisk,2266,0 +crackmusicdisc,2266,0 +crackmusiccd,2266,0 +11musicrecord,2266,0 +11musicdisk,2266,0 +11musicdisc,2266,0 +11musiccd,2266,0 +cmusicrecord,2266,0 +cmusicdisk,2266,0 +cmusicdisc,2266,0 +cmusiccd,2266,0 +crackedmrecord,2266,0 +crackedmdisk,2266,0 +crackedmdisc,2266,0 +crackedmcd,2266,0 +crackmrecord,2266,0 +crackmdisk,2266,0 +crackmdisc,2266,0 +crackmcd,2266,0 +11mrecord,2266,0 +11mdisk,2266,0 +11mdisc,2266,0 +11mcd,2266,0 +cmrecord,2266,0 +cmdisk,2266,0 +cmdisc,2266,0 +cmcd,2266,0 +crackedrecord,2266,0 +crackeddisk,2266,0 +crackeddisc,2266,0 +crackedcd,2266,0 +crackrecord,2266,0 +crackdisk,2266,0 +crackdisc,2266,0 +crackcd,2266,0 +crecord,2266,0 +cdisk,2266,0 +cdisc,2266,0 +ccd,2266,0 +record11,2266,0 +disk11,2266,0 +disc11,2266,0 +cd11,2266,0 +11record,2266,0 +11disk,2266,0 +11cd,2266,0 +waitdisc,2267,0 +waitmusicrecord,2267,0 +waitmusicdisk,2267,0 +waitmusicdisc,2267,0 +waitmusiccd,2267,0 +bluemusicrecord,2267,0 +bluemusicdisk,2267,0 +bluemusicdisc,2267,0 +bluemusiccd,2267,0 +12musicrecord,2267,0 +12musicdisk,2267,0 +12musicdisc,2267,0 +12musiccd,2267,0 +cyanmusicrecord,2267,0 +cyanmusicdisk,2267,0 +cyanmusicdisc,2267,0 +cyanmusiccd,2267,0 +waitmrecord,2267,0 +waitmdisk,2267,0 +waitmdisc,2267,0 +waitmcd,2267,0 +bluemrecord,2267,0 +bluemdisk,2267,0 +bluemdisc,2267,0 +bluemcd,2267,0 +12mrecord,2267,0 +12mdisk,2267,0 +12mdisc,2267,0 +12mcd,2267,0 +cyanmrecord,2267,0 +cyanmdisk,2267,0 +cyanmdisc,2267,0 +cyanmcd,2267,0 +waitrecord,2267,0 +waitdisk,2267,0 +waitcd,2267,0 +bluerecord,2267,0 +bluedisk,2267,0 +bluedisc,2267,0 +bluecd,2267,0 +cyanrecord,2267,0 +cyandisk,2267,0 +cyandisc,2267,0 +cyancd,2267,0 +record12,2267,0 +disk12,2267,0 +disc12,2267,0 +cd12,2267,0 +12record,2267,0 +12disk,2267,0 +12disc,2267,0 +12cd,2267,0 \ No newline at end of file diff --git a/bin/lives.yml b/bin/lives.yml new file mode 100644 index 0000000..04ec367 --- /dev/null +++ b/bin/lives.yml @@ -0,0 +1 @@ +lives: {} diff --git a/bin/net/jodah/expiringmap/EntryLoader.class b/bin/net/jodah/expiringmap/EntryLoader.class new file mode 100644 index 0000000..66a2ad1 Binary files /dev/null and b/bin/net/jodah/expiringmap/EntryLoader.class differ diff --git a/bin/net/jodah/expiringmap/ExpirationListener.class b/bin/net/jodah/expiringmap/ExpirationListener.class new file mode 100644 index 0000000..692b5e2 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpirationListener.class differ diff --git a/bin/net/jodah/expiringmap/ExpirationPolicy.class b/bin/net/jodah/expiringmap/ExpirationPolicy.class new file mode 100644 index 0000000..3807a79 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpirationPolicy.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringEntryLoader.class b/bin/net/jodah/expiringmap/ExpiringEntryLoader.class new file mode 100644 index 0000000..9538a77 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringEntryLoader.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$1.class b/bin/net/jodah/expiringmap/ExpiringMap$1.class new file mode 100644 index 0000000..903148b Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$1.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$2.class b/bin/net/jodah/expiringmap/ExpiringMap$2.class new file mode 100644 index 0000000..fa3ff08 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$2.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$3.class b/bin/net/jodah/expiringmap/ExpiringMap$3.class new file mode 100644 index 0000000..afc11e4 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$3.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$4.class b/bin/net/jodah/expiringmap/ExpiringMap$4.class new file mode 100644 index 0000000..408eb3c Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$4.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$5.class b/bin/net/jodah/expiringmap/ExpiringMap$5.class new file mode 100644 index 0000000..a819270 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$5.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$6.class b/bin/net/jodah/expiringmap/ExpiringMap$6.class new file mode 100644 index 0000000..8f5ec0b Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$6.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$Builder.class b/bin/net/jodah/expiringmap/ExpiringMap$Builder.class new file mode 100644 index 0000000..65d0524 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$Builder.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap$AbstractHashIterator.class b/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap$AbstractHashIterator.class new file mode 100644 index 0000000..63888d5 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap$AbstractHashIterator.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap$EntryIterator.class b/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap$EntryIterator.class new file mode 100644 index 0000000..4f7cc38 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap$EntryIterator.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap$KeyIterator.class b/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap$KeyIterator.class new file mode 100644 index 0000000..aac4ace Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap$KeyIterator.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap$ValueIterator.class b/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap$ValueIterator.class new file mode 100644 index 0000000..6179bbc Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap$ValueIterator.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap.class b/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap.class new file mode 100644 index 0000000..053bbd9 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$EntryLinkedHashMap.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$EntryMap.class b/bin/net/jodah/expiringmap/ExpiringMap$EntryMap.class new file mode 100644 index 0000000..cd6e6e9 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$EntryMap.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$AbstractHashIterator.class b/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$AbstractHashIterator.class new file mode 100644 index 0000000..e42bf0a Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$AbstractHashIterator.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$EntryIterator.class b/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$EntryIterator.class new file mode 100644 index 0000000..a450c30 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$EntryIterator.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$ExpiringEntryIterator.class b/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$ExpiringEntryIterator.class new file mode 100644 index 0000000..1c8cd48 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$ExpiringEntryIterator.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$KeyIterator.class b/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$KeyIterator.class new file mode 100644 index 0000000..5d6fc4c Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$KeyIterator.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$ValueIterator.class b/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$ValueIterator.class new file mode 100644 index 0000000..cfcc0a9 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap$ValueIterator.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap.class b/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap.class new file mode 100644 index 0000000..591baf7 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$EntryTreeHashMap.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap$ExpiringEntry.class b/bin/net/jodah/expiringmap/ExpiringMap$ExpiringEntry.class new file mode 100644 index 0000000..539fb27 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap$ExpiringEntry.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringMap.class b/bin/net/jodah/expiringmap/ExpiringMap.class new file mode 100644 index 0000000..180912c Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringMap.class differ diff --git a/bin/net/jodah/expiringmap/ExpiringValue.class b/bin/net/jodah/expiringmap/ExpiringValue.class new file mode 100644 index 0000000..7c43129 Binary files /dev/null and b/bin/net/jodah/expiringmap/ExpiringValue.class differ diff --git a/bin/net/jodah/expiringmap/internal/Assert.class b/bin/net/jodah/expiringmap/internal/Assert.class new file mode 100644 index 0000000..8dfd663 Binary files /dev/null and b/bin/net/jodah/expiringmap/internal/Assert.class differ diff --git a/bin/net/jodah/expiringmap/internal/NamedThreadFactory.class b/bin/net/jodah/expiringmap/internal/NamedThreadFactory.class new file mode 100644 index 0000000..809418d Binary files /dev/null and b/bin/net/jodah/expiringmap/internal/NamedThreadFactory.class differ diff --git a/bin/notifyz/hardcorefactions/HardcoreFactionsPlugin$1.class b/bin/notifyz/hardcorefactions/HardcoreFactionsPlugin$1.class new file mode 100644 index 0000000..a5d5010 Binary files /dev/null and b/bin/notifyz/hardcorefactions/HardcoreFactionsPlugin$1.class differ diff --git a/bin/notifyz/hardcorefactions/HardcoreFactionsPlugin$2.class b/bin/notifyz/hardcorefactions/HardcoreFactionsPlugin$2.class new file mode 100644 index 0000000..6ce27a5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/HardcoreFactionsPlugin$2.class differ diff --git a/bin/notifyz/hardcorefactions/HardcoreFactionsPlugin$3.class b/bin/notifyz/hardcorefactions/HardcoreFactionsPlugin$3.class new file mode 100644 index 0000000..94326ae Binary files /dev/null and b/bin/notifyz/hardcorefactions/HardcoreFactionsPlugin$3.class differ diff --git a/bin/notifyz/hardcorefactions/HardcoreFactionsPlugin.class b/bin/notifyz/hardcorefactions/HardcoreFactionsPlugin.class new file mode 100644 index 0000000..ff5ffba Binary files /dev/null and b/bin/notifyz/hardcorefactions/HardcoreFactionsPlugin.class differ diff --git a/bin/notifyz/hardcorefactions/chests/InventoryIO.class b/bin/notifyz/hardcorefactions/chests/InventoryIO.class new file mode 100644 index 0000000..6b2b948 Binary files /dev/null and b/bin/notifyz/hardcorefactions/chests/InventoryIO.class differ diff --git a/bin/notifyz/hardcorefactions/chests/Teller$Type.class b/bin/notifyz/hardcorefactions/chests/Teller$Type.class new file mode 100644 index 0000000..f04251c Binary files /dev/null and b/bin/notifyz/hardcorefactions/chests/Teller$Type.class differ diff --git a/bin/notifyz/hardcorefactions/chests/Teller.class b/bin/notifyz/hardcorefactions/chests/Teller.class new file mode 100644 index 0000000..34ee794 Binary files /dev/null and b/bin/notifyz/hardcorefactions/chests/Teller.class differ diff --git a/bin/notifyz/hardcorefactions/chests/VirtualChestManager$1.class b/bin/notifyz/hardcorefactions/chests/VirtualChestManager$1.class new file mode 100644 index 0000000..716ce84 Binary files /dev/null and b/bin/notifyz/hardcorefactions/chests/VirtualChestManager$1.class differ diff --git a/bin/notifyz/hardcorefactions/chests/VirtualChestManager.class b/bin/notifyz/hardcorefactions/chests/VirtualChestManager.class new file mode 100644 index 0000000..ab35119 Binary files /dev/null and b/bin/notifyz/hardcorefactions/chests/VirtualChestManager.class differ diff --git a/bin/notifyz/hardcorefactions/chests/commands/ChestCommand.class b/bin/notifyz/hardcorefactions/chests/commands/ChestCommand.class new file mode 100644 index 0000000..003d3be Binary files /dev/null and b/bin/notifyz/hardcorefactions/chests/commands/ChestCommand.class differ diff --git a/bin/notifyz/hardcorefactions/chests/commands/ClearChestCommand.class b/bin/notifyz/hardcorefactions/chests/commands/ClearChestCommand.class new file mode 100644 index 0000000..9a646ac Binary files /dev/null and b/bin/notifyz/hardcorefactions/chests/commands/ClearChestCommand.class differ diff --git a/bin/notifyz/hardcorefactions/chests/commands/DisposalCommand.class b/bin/notifyz/hardcorefactions/chests/commands/DisposalCommand.class new file mode 100644 index 0000000..2d3329e Binary files /dev/null and b/bin/notifyz/hardcorefactions/chests/commands/DisposalCommand.class differ diff --git a/bin/notifyz/hardcorefactions/chests/commands/SaveChestCommand.class b/bin/notifyz/hardcorefactions/chests/commands/SaveChestCommand.class new file mode 100644 index 0000000..9c3b86f Binary files /dev/null and b/bin/notifyz/hardcorefactions/chests/commands/SaveChestCommand.class differ diff --git a/bin/notifyz/hardcorefactions/chests/commands/SaveChestsCommand.class b/bin/notifyz/hardcorefactions/chests/commands/SaveChestsCommand.class new file mode 100644 index 0000000..609b5ad Binary files /dev/null and b/bin/notifyz/hardcorefactions/chests/commands/SaveChestsCommand.class differ diff --git a/bin/notifyz/hardcorefactions/chests/commands/WorkbenchCommand.class b/bin/notifyz/hardcorefactions/chests/commands/WorkbenchCommand.class new file mode 100644 index 0000000..95c3292 Binary files /dev/null and b/bin/notifyz/hardcorefactions/chests/commands/WorkbenchCommand.class differ diff --git a/bin/notifyz/hardcorefactions/chests/listeners/PlayerListener.class b/bin/notifyz/hardcorefactions/chests/listeners/PlayerListener.class new file mode 100644 index 0000000..b92375e Binary files /dev/null and b/bin/notifyz/hardcorefactions/chests/listeners/PlayerListener.class differ diff --git a/bin/notifyz/hardcorefactions/chests/utils/BukkitUtil.class b/bin/notifyz/hardcorefactions/chests/utils/BukkitUtil.class new file mode 100644 index 0000000..8061269 Binary files /dev/null and b/bin/notifyz/hardcorefactions/chests/utils/BukkitUtil.class differ diff --git a/bin/notifyz/hardcorefactions/classes/PvPClass.class b/bin/notifyz/hardcorefactions/classes/PvPClass.class new file mode 100644 index 0000000..81bd816 Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/PvPClass.class differ diff --git a/bin/notifyz/hardcorefactions/classes/events/PvPClassEquipEvent.class b/bin/notifyz/hardcorefactions/classes/events/PvPClassEquipEvent.class new file mode 100644 index 0000000..aeb23e8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/events/PvPClassEquipEvent.class differ diff --git a/bin/notifyz/hardcorefactions/classes/events/PvPClassUnEquipEvent.class b/bin/notifyz/hardcorefactions/classes/events/PvPClassUnEquipEvent.class new file mode 100644 index 0000000..ba65096 Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/events/PvPClassUnEquipEvent.class differ diff --git a/bin/notifyz/hardcorefactions/classes/manager/PvPClassManager.class b/bin/notifyz/hardcorefactions/classes/manager/PvPClassManager.class new file mode 100644 index 0000000..32c024e Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/manager/PvPClassManager.class differ diff --git a/bin/notifyz/hardcorefactions/classes/type/Holder.class b/bin/notifyz/hardcorefactions/classes/type/Holder.class new file mode 100644 index 0000000..66e2dde Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/type/Holder.class differ diff --git a/bin/notifyz/hardcorefactions/classes/type/archer/ArcherClass$1.class b/bin/notifyz/hardcorefactions/classes/type/archer/ArcherClass$1.class new file mode 100644 index 0000000..7712ed2 Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/type/archer/ArcherClass$1.class differ diff --git a/bin/notifyz/hardcorefactions/classes/type/archer/ArcherClass.class b/bin/notifyz/hardcorefactions/classes/type/archer/ArcherClass.class new file mode 100644 index 0000000..ba1afc5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/type/archer/ArcherClass.class differ diff --git a/bin/notifyz/hardcorefactions/classes/type/bard/BardClass$1.class b/bin/notifyz/hardcorefactions/classes/type/bard/BardClass$1.class new file mode 100644 index 0000000..17f699a Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/type/bard/BardClass$1.class differ diff --git a/bin/notifyz/hardcorefactions/classes/type/bard/BardClass.class b/bin/notifyz/hardcorefactions/classes/type/bard/BardClass.class new file mode 100644 index 0000000..dedfeb3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/type/bard/BardClass.class differ diff --git a/bin/notifyz/hardcorefactions/classes/type/bard/utilties/BardData.class b/bin/notifyz/hardcorefactions/classes/type/bard/utilties/BardData.class new file mode 100644 index 0000000..169b4e1 Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/type/bard/utilties/BardData.class differ diff --git a/bin/notifyz/hardcorefactions/classes/type/bard/utilties/BardEffect.class b/bin/notifyz/hardcorefactions/classes/type/bard/utilties/BardEffect.class new file mode 100644 index 0000000..7001079 Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/type/bard/utilties/BardEffect.class differ diff --git a/bin/notifyz/hardcorefactions/classes/type/bard/utilties/EffectRestorer.class b/bin/notifyz/hardcorefactions/classes/type/bard/utilties/EffectRestorer.class new file mode 100644 index 0000000..b648739 Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/type/bard/utilties/EffectRestorer.class differ diff --git a/bin/notifyz/hardcorefactions/classes/type/ghost/GhostClass$1.class b/bin/notifyz/hardcorefactions/classes/type/ghost/GhostClass$1.class new file mode 100644 index 0000000..e3165ee Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/type/ghost/GhostClass$1.class differ diff --git a/bin/notifyz/hardcorefactions/classes/type/ghost/GhostClass$2.class b/bin/notifyz/hardcorefactions/classes/type/ghost/GhostClass$2.class new file mode 100644 index 0000000..b52a786 Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/type/ghost/GhostClass$2.class differ diff --git a/bin/notifyz/hardcorefactions/classes/type/ghost/GhostClass.class b/bin/notifyz/hardcorefactions/classes/type/ghost/GhostClass.class new file mode 100644 index 0000000..f9cf746 Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/type/ghost/GhostClass.class differ diff --git a/bin/notifyz/hardcorefactions/classes/type/miner/MinerClass.class b/bin/notifyz/hardcorefactions/classes/type/miner/MinerClass.class new file mode 100644 index 0000000..7f1f19d Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/type/miner/MinerClass.class differ diff --git a/bin/notifyz/hardcorefactions/classes/type/rogue/RogueClass.class b/bin/notifyz/hardcorefactions/classes/type/rogue/RogueClass.class new file mode 100644 index 0000000..b510892 Binary files /dev/null and b/bin/notifyz/hardcorefactions/classes/type/rogue/RogueClass.class differ diff --git a/bin/notifyz/hardcorefactions/combatloggers/CombatLogEntry.class b/bin/notifyz/hardcorefactions/combatloggers/CombatLogEntry.class new file mode 100644 index 0000000..814cde1 Binary files /dev/null and b/bin/notifyz/hardcorefactions/combatloggers/CombatLogEntry.class differ diff --git a/bin/notifyz/hardcorefactions/combatloggers/CombatLogListener$LoggerRemovable.class b/bin/notifyz/hardcorefactions/combatloggers/CombatLogListener$LoggerRemovable.class new file mode 100644 index 0000000..a04d833 Binary files /dev/null and b/bin/notifyz/hardcorefactions/combatloggers/CombatLogListener$LoggerRemovable.class differ diff --git a/bin/notifyz/hardcorefactions/combatloggers/CombatLogListener.class b/bin/notifyz/hardcorefactions/combatloggers/CombatLogListener.class new file mode 100644 index 0000000..481c59a Binary files /dev/null and b/bin/notifyz/hardcorefactions/combatloggers/CombatLogListener.class differ diff --git a/bin/notifyz/hardcorefactions/combatloggers/CustomEntityRegistration.class b/bin/notifyz/hardcorefactions/combatloggers/CustomEntityRegistration.class new file mode 100644 index 0000000..ea4e161 Binary files /dev/null and b/bin/notifyz/hardcorefactions/combatloggers/CustomEntityRegistration.class differ diff --git a/bin/notifyz/hardcorefactions/combatloggers/LoggerDeathEvent.class b/bin/notifyz/hardcorefactions/combatloggers/LoggerDeathEvent.class new file mode 100644 index 0000000..2dfc14f Binary files /dev/null and b/bin/notifyz/hardcorefactions/combatloggers/LoggerDeathEvent.class differ diff --git a/bin/notifyz/hardcorefactions/combatloggers/LoggerEntity$PlayerNmsResult.class b/bin/notifyz/hardcorefactions/combatloggers/LoggerEntity$PlayerNmsResult.class new file mode 100644 index 0000000..5dc482a Binary files /dev/null and b/bin/notifyz/hardcorefactions/combatloggers/LoggerEntity$PlayerNmsResult.class differ diff --git a/bin/notifyz/hardcorefactions/combatloggers/LoggerEntity.class b/bin/notifyz/hardcorefactions/combatloggers/LoggerEntity.class new file mode 100644 index 0000000..6928100 Binary files /dev/null and b/bin/notifyz/hardcorefactions/combatloggers/LoggerEntity.class differ diff --git a/bin/notifyz/hardcorefactions/combatloggers/LoggerSpawnEvent.class b/bin/notifyz/hardcorefactions/combatloggers/LoggerSpawnEvent.class new file mode 100644 index 0000000..87b98b7 Binary files /dev/null and b/bin/notifyz/hardcorefactions/combatloggers/LoggerSpawnEvent.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/BackCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/BackCommand.class new file mode 100644 index 0000000..09e2d2e Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/BackCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/BroadcastCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/BroadcastCommand.class new file mode 100644 index 0000000..7f21f5c Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/BroadcastCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/DisableChatCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/DisableChatCommand.class new file mode 100644 index 0000000..a3eb815 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/DisableChatCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/EnchantCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/EnchantCommand.class new file mode 100644 index 0000000..3e38c60 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/EnchantCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/FeedCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/FeedCommand.class new file mode 100644 index 0000000..2ea8a2e Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/FeedCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/FlyCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/FlyCommand.class new file mode 100644 index 0000000..c0159a6 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/FlyCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/FreezeAllCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/FreezeAllCommand.class new file mode 100644 index 0000000..a2c670e Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/FreezeAllCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/FreezeCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/FreezeCommand.class new file mode 100644 index 0000000..a9254ab Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/FreezeCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/GamemodeCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/GamemodeCommand.class new file mode 100644 index 0000000..ab18320 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/GamemodeCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/GiveCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/GiveCommand.class new file mode 100644 index 0000000..b55bf19 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/GiveCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/GiveawayCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/GiveawayCommand.class new file mode 100644 index 0000000..8015579 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/GiveawayCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/GodCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/GodCommand.class new file mode 100644 index 0000000..28c6420 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/GodCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/GuiFreezeCommand$1.class b/bin/notifyz/hardcorefactions/commands/essentials/GuiFreezeCommand$1.class new file mode 100644 index 0000000..8043e26 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/GuiFreezeCommand$1.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/GuiFreezeCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/GuiFreezeCommand.class new file mode 100644 index 0000000..7dedf48 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/GuiFreezeCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/HatCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/HatCommand.class new file mode 100644 index 0000000..b74fd27 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/HatCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/HealCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/HealCommand.class new file mode 100644 index 0000000..f24b62f Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/HealCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/HideStaffCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/HideStaffCommand.class new file mode 100644 index 0000000..decec9c Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/HideStaffCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand$IgnoreAddArgument.class b/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand$IgnoreAddArgument.class new file mode 100644 index 0000000..08c5c11 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand$IgnoreAddArgument.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand$IgnoreClearArgument.class b/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand$IgnoreClearArgument.class new file mode 100644 index 0000000..99e3c3b Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand$IgnoreClearArgument.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand$IgnoreDeleteArgument.class b/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand$IgnoreDeleteArgument.class new file mode 100644 index 0000000..5f944cf Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand$IgnoreDeleteArgument.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand$IgnoreListArgument.class b/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand$IgnoreListArgument.class new file mode 100644 index 0000000..b2ee173 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand$IgnoreListArgument.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand.class new file mode 100644 index 0000000..e7e5e40 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/IgnoreCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/InvseeCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/InvseeCommand.class new file mode 100644 index 0000000..628b7c4 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/InvseeCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/InvseeOfflineCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/InvseeOfflineCommand.class new file mode 100644 index 0000000..b31c577 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/InvseeOfflineCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/KillCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/KillCommand.class new file mode 100644 index 0000000..2aa8cfe Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/KillCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/LagCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/LagCommand.class new file mode 100644 index 0000000..9ad0dc9 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/LagCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/ListCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/ListCommand.class new file mode 100644 index 0000000..189dd31 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/ListCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/MessageCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/MessageCommand.class new file mode 100644 index 0000000..f5c1187 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/MessageCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand$IgnoreClearArgument.class b/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand$IgnoreClearArgument.class new file mode 100644 index 0000000..096b5f1 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand$IgnoreClearArgument.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand$MessageSpyAddArgument.class b/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand$MessageSpyAddArgument.class new file mode 100644 index 0000000..dea2c40 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand$MessageSpyAddArgument.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand$MessageSpyDeleteArgument.class b/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand$MessageSpyDeleteArgument.class new file mode 100644 index 0000000..5c19339 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand$MessageSpyDeleteArgument.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand$MessageSpyListArgument.class b/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand$MessageSpyListArgument.class new file mode 100644 index 0000000..d7a329c Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand$MessageSpyListArgument.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand.class new file mode 100644 index 0000000..e1683f6 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/MoreItemsCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/MoreItemsCommand.class new file mode 100644 index 0000000..f16be69 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/MoreItemsCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/NewVideoCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/NewVideoCommand.class new file mode 100644 index 0000000..4b17e20 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/NewVideoCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/RecCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/RecCommand.class new file mode 100644 index 0000000..a13ae90 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/RecCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/RemovePermCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/RemovePermCommand.class new file mode 100644 index 0000000..be284a9 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/RemovePermCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/RenameCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/RenameCommand.class new file mode 100644 index 0000000..68add56 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/RenameCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/ReplyCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/ReplyCommand.class new file mode 100644 index 0000000..e43fa0c Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/ReplyCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/ServerTimeCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/ServerTimeCommand.class new file mode 100644 index 0000000..3079b77 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/ServerTimeCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/SetBorderCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/SetBorderCommand.class new file mode 100644 index 0000000..07e3d3d Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/SetBorderCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/SettingsCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/SettingsCommand.class new file mode 100644 index 0000000..7b21c69 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/SettingsCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/SlowchatCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/SlowchatCommand.class new file mode 100644 index 0000000..5c8bb58 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/SlowchatCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/SpawnCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/SpawnCommand.class new file mode 100644 index 0000000..228e68b Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/SpawnCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/SpawnerCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/SpawnerCommand.class new file mode 100644 index 0000000..1da285c Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/SpawnerCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/SpeedCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/SpeedCommand.class new file mode 100644 index 0000000..e6c159e Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/SpeedCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/StaffChatCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/StaffChatCommand.class new file mode 100644 index 0000000..38028eb Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/StaffChatCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/StatsCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/StatsCommand.class new file mode 100644 index 0000000..55e41a5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/StatsCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/TeleportCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/TeleportCommand.class new file mode 100644 index 0000000..8da1178 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/TeleportCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/ToggleChatCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/ToggleChatCommand.class new file mode 100644 index 0000000..9753941 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/ToggleChatCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/ToggleMessagesCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/ToggleMessagesCommand.class new file mode 100644 index 0000000..39edf10 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/ToggleMessagesCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/ToggleSoundsCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/ToggleSoundsCommand.class new file mode 100644 index 0000000..7effc83 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/ToggleSoundsCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/TopCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/TopCommand.class new file mode 100644 index 0000000..a0f49f2 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/TopCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/UptimeCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/UptimeCommand.class new file mode 100644 index 0000000..047b390 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/UptimeCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/VanishCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/VanishCommand.class new file mode 100644 index 0000000..aa3b203 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/VanishCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/essentials/WorldCommand.class b/bin/notifyz/hardcorefactions/commands/essentials/WorldCommand.class new file mode 100644 index 0000000..fec1f31 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/essentials/WorldCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/BardEnergyCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/BardEnergyCommand.class new file mode 100644 index 0000000..418276d Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/BardEnergyCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/BottleCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/BottleCommand.class new file mode 100644 index 0000000..fc160fd Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/BottleCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/CobbleCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/CobbleCommand.class new file mode 100644 index 0000000..139de49 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/CobbleCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/CrowbarCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/CrowbarCommand.class new file mode 100644 index 0000000..12e782b Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/CrowbarCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/EOTWCommand$EotwPrompt.class b/bin/notifyz/hardcorefactions/commands/hcf/EOTWCommand$EotwPrompt.class new file mode 100644 index 0000000..3c432be Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/EOTWCommand$EotwPrompt.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/EOTWCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/EOTWCommand.class new file mode 100644 index 0000000..ac42e90 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/EOTWCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/EOTWReviveCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/EOTWReviveCommand.class new file mode 100644 index 0000000..8b19a9a Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/EOTWReviveCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/EconomyCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/EconomyCommand.class new file mode 100644 index 0000000..4a6af71 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/EconomyCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/EndPortalCommand$1.class b/bin/notifyz/hardcorefactions/commands/hcf/EndPortalCommand$1.class new file mode 100644 index 0000000..19ad246 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/EndPortalCommand$1.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/EndPortalCommand$LocationPair.class b/bin/notifyz/hardcorefactions/commands/hcf/EndPortalCommand$LocationPair.class new file mode 100644 index 0000000..a401887 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/EndPortalCommand$LocationPair.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/EndPortalCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/EndPortalCommand.class new file mode 100644 index 0000000..248b5d3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/EndPortalCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/FFACommand.class b/bin/notifyz/hardcorefactions/commands/hcf/FFACommand.class new file mode 100644 index 0000000..ec82efb Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/FFACommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand$1.class b/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand$1.class new file mode 100644 index 0000000..ebebd6d Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand$1.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand$2$1.class b/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand$2$1.class new file mode 100644 index 0000000..4252b67 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand$2$1.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand$2.class b/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand$2.class new file mode 100644 index 0000000..da14716 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand$2.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand$3.class b/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand$3.class new file mode 100644 index 0000000..fb6984d Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand$3.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand.class new file mode 100644 index 0000000..f832556 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/FocusCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/InfoCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/InfoCommand.class new file mode 100644 index 0000000..482ae99 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/InfoCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/KitMapGUICommand$KitMapTask.class b/bin/notifyz/hardcorefactions/commands/hcf/KitMapGUICommand$KitMapTask.class new file mode 100644 index 0000000..24006ea Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/KitMapGUICommand$KitMapTask.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/KitMapGUICommand.class b/bin/notifyz/hardcorefactions/commands/hcf/KitMapGUICommand.class new file mode 100644 index 0000000..52753fc Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/KitMapGUICommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/LFFCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/LFFCommand.class new file mode 100644 index 0000000..6023633 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/LFFCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/LocationCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/LocationCommand.class new file mode 100644 index 0000000..4248126 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/LocationCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/LogoutCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/LogoutCommand.class new file mode 100644 index 0000000..2da4221 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/LogoutCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/MapKitCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/MapKitCommand.class new file mode 100644 index 0000000..a64b455 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/MapKitCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/MobDropsCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/MobDropsCommand.class new file mode 100644 index 0000000..c12b1b8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/MobDropsCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/PanicCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/PanicCommand.class new file mode 100644 index 0000000..5fe2906 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/PanicCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/PayCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/PayCommand.class new file mode 100644 index 0000000..635275b Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/PayCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/PlayTimeCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/PlayTimeCommand.class new file mode 100644 index 0000000..68e7d8f Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/PlayTimeCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/PvPTimerCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/PvPTimerCommand.class new file mode 100644 index 0000000..2908a84 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/PvPTimerCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/RebootCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/RebootCommand.class new file mode 100644 index 0000000..798fa15 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/RebootCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/ReclaimCommand$Rank.class b/bin/notifyz/hardcorefactions/commands/hcf/ReclaimCommand$Rank.class new file mode 100644 index 0000000..ad054b7 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/ReclaimCommand$Rank.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/ReclaimCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/ReclaimCommand.class new file mode 100644 index 0000000..3a0dea1 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/ReclaimCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/ReclaimResetCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/ReclaimResetCommand.class new file mode 100644 index 0000000..1eacbc2 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/ReclaimResetCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/RegenCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/RegenCommand.class new file mode 100644 index 0000000..29a468e Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/RegenCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/RestoreInventoryCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/RestoreInventoryCommand.class new file mode 100644 index 0000000..1d16113 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/RestoreInventoryCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/SOTWCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/SOTWCommand.class new file mode 100644 index 0000000..dfbf6d6 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/SOTWCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/SaleCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/SaleCommand.class new file mode 100644 index 0000000..3475c9b Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/SaleCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/SetCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/SetCommand.class new file mode 100644 index 0000000..4a3591d Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/SetCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/SpawnCannonCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/SpawnCannonCommand.class new file mode 100644 index 0000000..ccaa88b Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/SpawnCannonCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/StaffModeCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/StaffModeCommand.class new file mode 100644 index 0000000..a598b93 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/StaffModeCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/StaffReviveCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/StaffReviveCommand.class new file mode 100644 index 0000000..102024e Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/StaffReviveCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/TeamCoordinatesCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/TeamCoordinatesCommand.class new file mode 100644 index 0000000..c2eedfa Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/TeamCoordinatesCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/ToggleCapzoneEntryCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/ToggleCapzoneEntryCommand.class new file mode 100644 index 0000000..ecd6644 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/ToggleCapzoneEntryCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/ToggleDiamondAlertsCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/ToggleDiamondAlertsCommand.class new file mode 100644 index 0000000..7ba555f Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/ToggleDiamondAlertsCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/ToggleLightningCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/ToggleLightningCommand.class new file mode 100644 index 0000000..8257fef Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/ToggleLightningCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/hcf/ToggleSidebarCommand.class b/bin/notifyz/hardcorefactions/commands/hcf/ToggleSidebarCommand.class new file mode 100644 index 0000000..91b2d36 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/hcf/ToggleSidebarCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/help/CoordinatesCommand.class b/bin/notifyz/hardcorefactions/commands/help/CoordinatesCommand.class new file mode 100644 index 0000000..5cf5266 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/help/CoordinatesCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/help/FamousCommand.class b/bin/notifyz/hardcorefactions/commands/help/FamousCommand.class new file mode 100644 index 0000000..e7eb21e Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/help/FamousCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/help/HelpCommand.class b/bin/notifyz/hardcorefactions/commands/help/HelpCommand.class new file mode 100644 index 0000000..2606f8f Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/help/HelpCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/help/ReportCommand.class b/bin/notifyz/hardcorefactions/commands/help/ReportCommand.class new file mode 100644 index 0000000..2c5c7eb Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/help/ReportCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/help/RequestCommand.class b/bin/notifyz/hardcorefactions/commands/help/RequestCommand.class new file mode 100644 index 0000000..624d8d6 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/help/RequestCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/help/StoreCommand.class b/bin/notifyz/hardcorefactions/commands/help/StoreCommand.class new file mode 100644 index 0000000..2c8228e Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/help/StoreCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/help/TeamSpeakCommand.class b/bin/notifyz/hardcorefactions/commands/help/TeamSpeakCommand.class new file mode 100644 index 0000000..2671fb8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/help/TeamSpeakCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/help/WebsiteCommand.class b/bin/notifyz/hardcorefactions/commands/help/WebsiteCommand.class new file mode 100644 index 0000000..f9fe587 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/help/WebsiteCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/help/YoutubeCommand.class b/bin/notifyz/hardcorefactions/commands/help/YoutubeCommand.class new file mode 100644 index 0000000..125605e Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/help/YoutubeCommand.class differ diff --git a/bin/notifyz/hardcorefactions/commands/revive/Revive1.class b/bin/notifyz/hardcorefactions/commands/revive/Revive1.class new file mode 100644 index 0000000..69c1260 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/revive/Revive1.class differ diff --git a/bin/notifyz/hardcorefactions/commands/revive/Revive2.class b/bin/notifyz/hardcorefactions/commands/revive/Revive2.class new file mode 100644 index 0000000..b3b07ba Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/revive/Revive2.class differ diff --git a/bin/notifyz/hardcorefactions/commands/revive/ReviveHandler.class b/bin/notifyz/hardcorefactions/commands/revive/ReviveHandler.class new file mode 100644 index 0000000..fafd359 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/revive/ReviveHandler.class differ diff --git a/bin/notifyz/hardcorefactions/commands/revive/ReviveManager.class b/bin/notifyz/hardcorefactions/commands/revive/ReviveManager.class new file mode 100644 index 0000000..024a920 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/revive/ReviveManager.class differ diff --git a/bin/notifyz/hardcorefactions/commands/warp/WarpExecutor$1.class b/bin/notifyz/hardcorefactions/commands/warp/WarpExecutor$1.class new file mode 100644 index 0000000..de1fbdd Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/warp/WarpExecutor$1.class differ diff --git a/bin/notifyz/hardcorefactions/commands/warp/WarpExecutor.class b/bin/notifyz/hardcorefactions/commands/warp/WarpExecutor.class new file mode 100644 index 0000000..dcaf6d3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/warp/WarpExecutor.class differ diff --git a/bin/notifyz/hardcorefactions/commands/warp/arguments/WarpListArgument.class b/bin/notifyz/hardcorefactions/commands/warp/arguments/WarpListArgument.class new file mode 100644 index 0000000..bbc6df9 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/warp/arguments/WarpListArgument.class differ diff --git a/bin/notifyz/hardcorefactions/commands/warp/arguments/WarpRemoveArgument.class b/bin/notifyz/hardcorefactions/commands/warp/arguments/WarpRemoveArgument.class new file mode 100644 index 0000000..9888d66 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/warp/arguments/WarpRemoveArgument.class differ diff --git a/bin/notifyz/hardcorefactions/commands/warp/arguments/WarpSetArgument.class b/bin/notifyz/hardcorefactions/commands/warp/arguments/WarpSetArgument.class new file mode 100644 index 0000000..c245b2c Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/warp/arguments/WarpSetArgument.class differ diff --git a/bin/notifyz/hardcorefactions/commands/warp/utilities/FlatFileWarpManager.class b/bin/notifyz/hardcorefactions/commands/warp/utilities/FlatFileWarpManager.class new file mode 100644 index 0000000..7b5e886 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/warp/utilities/FlatFileWarpManager.class differ diff --git a/bin/notifyz/hardcorefactions/commands/warp/utilities/Warp.class b/bin/notifyz/hardcorefactions/commands/warp/utilities/Warp.class new file mode 100644 index 0000000..43a09d7 Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/warp/utilities/Warp.class differ diff --git a/bin/notifyz/hardcorefactions/commands/warp/utilities/WarpManager.class b/bin/notifyz/hardcorefactions/commands/warp/utilities/WarpManager.class new file mode 100644 index 0000000..d44ee1c Binary files /dev/null and b/bin/notifyz/hardcorefactions/commands/warp/utilities/WarpManager.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/Deathban.class b/bin/notifyz/hardcorefactions/deathban/Deathban.class new file mode 100644 index 0000000..25a441d Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/Deathban.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/lives/LivesExecutor.class b/bin/notifyz/hardcorefactions/deathban/lives/LivesExecutor.class new file mode 100644 index 0000000..8cafb0f Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/lives/LivesExecutor.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesCheckArgument.class b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesCheckArgument.class new file mode 100644 index 0000000..dfe5317 Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesCheckArgument.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesCheckDeathbanArgument.class b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesCheckDeathbanArgument.class new file mode 100644 index 0000000..437a616 Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesCheckDeathbanArgument.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesClearDeathbansArgument.class b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesClearDeathbansArgument.class new file mode 100644 index 0000000..bc0cae3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesClearDeathbansArgument.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesGiveArgument.class b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesGiveArgument.class new file mode 100644 index 0000000..781129b Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesGiveArgument.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesReviveArgument.class b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesReviveArgument.class new file mode 100644 index 0000000..466fff1 Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesReviveArgument.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesSetArgument.class b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesSetArgument.class new file mode 100644 index 0000000..40c5e67 Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesSetArgument.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesSetDeathbanTimeArgument.class b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesSetDeathbanTimeArgument.class new file mode 100644 index 0000000..ac820bf Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesSetDeathbanTimeArgument.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesTopArgument$1$1.class b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesTopArgument$1$1.class new file mode 100644 index 0000000..6ab0500 Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesTopArgument$1$1.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesTopArgument$1.class b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesTopArgument$1.class new file mode 100644 index 0000000..40bc1b0 Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesTopArgument$1.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesTopArgument.class b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesTopArgument.class new file mode 100644 index 0000000..43603c0 Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/lives/argument/LivesTopArgument.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/managers/DeathbanConfigManager.class b/bin/notifyz/hardcorefactions/deathban/managers/DeathbanConfigManager.class new file mode 100644 index 0000000..e165237 Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/managers/DeathbanConfigManager.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/managers/DeathbanFile$1.class b/bin/notifyz/hardcorefactions/deathban/managers/DeathbanFile$1.class new file mode 100644 index 0000000..5f62260 Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/managers/DeathbanFile$1.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/managers/DeathbanFile.class b/bin/notifyz/hardcorefactions/deathban/managers/DeathbanFile.class new file mode 100644 index 0000000..3e87d19 Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/managers/DeathbanFile.class differ diff --git a/bin/notifyz/hardcorefactions/deathban/managers/DeathbanManager.class b/bin/notifyz/hardcorefactions/deathban/managers/DeathbanManager.class new file mode 100644 index 0000000..2cb7e09 Binary files /dev/null and b/bin/notifyz/hardcorefactions/deathban/managers/DeathbanManager.class differ diff --git a/bin/notifyz/hardcorefactions/economy/Economy.class b/bin/notifyz/hardcorefactions/economy/Economy.class new file mode 100644 index 0000000..8165a0a Binary files /dev/null and b/bin/notifyz/hardcorefactions/economy/Economy.class differ diff --git a/bin/notifyz/hardcorefactions/economy/manager/EconomyFile$1.class b/bin/notifyz/hardcorefactions/economy/manager/EconomyFile$1.class new file mode 100644 index 0000000..d2849d0 Binary files /dev/null and b/bin/notifyz/hardcorefactions/economy/manager/EconomyFile$1.class differ diff --git a/bin/notifyz/hardcorefactions/economy/manager/EconomyFile.class b/bin/notifyz/hardcorefactions/economy/manager/EconomyFile.class new file mode 100644 index 0000000..9d4eed2 Binary files /dev/null and b/bin/notifyz/hardcorefactions/economy/manager/EconomyFile.class differ diff --git a/bin/notifyz/hardcorefactions/games/EventExecutor.class b/bin/notifyz/hardcorefactions/games/EventExecutor.class new file mode 100644 index 0000000..6a7d703 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/EventExecutor.class differ diff --git a/bin/notifyz/hardcorefactions/games/arguments/EventCancelArgument.class b/bin/notifyz/hardcorefactions/games/arguments/EventCancelArgument.class new file mode 100644 index 0000000..af6b857 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/arguments/EventCancelArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/arguments/EventCreateArgument.class b/bin/notifyz/hardcorefactions/games/arguments/EventCreateArgument.class new file mode 100644 index 0000000..741f111 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/arguments/EventCreateArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/arguments/EventDeleteArgument.class b/bin/notifyz/hardcorefactions/games/arguments/EventDeleteArgument.class new file mode 100644 index 0000000..c032ff5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/arguments/EventDeleteArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/arguments/EventListArgument.class b/bin/notifyz/hardcorefactions/games/arguments/EventListArgument.class new file mode 100644 index 0000000..afcb3de Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/arguments/EventListArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/arguments/EventRenameArgument.class b/bin/notifyz/hardcorefactions/games/arguments/EventRenameArgument.class new file mode 100644 index 0000000..03ab8f0 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/arguments/EventRenameArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/arguments/EventSetAreaArgument.class b/bin/notifyz/hardcorefactions/games/arguments/EventSetAreaArgument.class new file mode 100644 index 0000000..be89c1e Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/arguments/EventSetAreaArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/arguments/EventSetCapzoneArgument.class b/bin/notifyz/hardcorefactions/games/arguments/EventSetCapzoneArgument.class new file mode 100644 index 0000000..a935834 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/arguments/EventSetCapzoneArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/arguments/EventStartArgument.class b/bin/notifyz/hardcorefactions/games/arguments/EventStartArgument.class new file mode 100644 index 0000000..bc39cf9 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/arguments/EventStartArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/arguments/EventUptimeArgument.class b/bin/notifyz/hardcorefactions/games/arguments/EventUptimeArgument.class new file mode 100644 index 0000000..e597b26 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/arguments/EventUptimeArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/conquest/ConquestExecutor.class b/bin/notifyz/hardcorefactions/games/conquest/ConquestExecutor.class new file mode 100644 index 0000000..a786a13 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/conquest/ConquestExecutor.class differ diff --git a/bin/notifyz/hardcorefactions/games/conquest/ConquestSetpointsArgument.class b/bin/notifyz/hardcorefactions/games/conquest/ConquestSetpointsArgument.class new file mode 100644 index 0000000..7caa7ce Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/conquest/ConquestSetpointsArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/endevent/CustomDragon.class b/bin/notifyz/hardcorefactions/games/endevent/CustomDragon.class new file mode 100644 index 0000000..54f0b10 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/endevent/CustomDragon.class differ diff --git a/bin/notifyz/hardcorefactions/games/endevent/EndEventCommand.class b/bin/notifyz/hardcorefactions/games/endevent/EndEventCommand.class new file mode 100644 index 0000000..4dfc6ba Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/endevent/EndEventCommand.class differ diff --git a/bin/notifyz/hardcorefactions/games/endevent/EndEventHandler.class b/bin/notifyz/hardcorefactions/games/endevent/EndEventHandler.class new file mode 100644 index 0000000..d13c282 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/endevent/EndEventHandler.class differ diff --git a/bin/notifyz/hardcorefactions/games/eotw/EOTWHandler$EotwRunnable.class b/bin/notifyz/hardcorefactions/games/eotw/EOTWHandler$EotwRunnable.class new file mode 100644 index 0000000..a64c856 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/eotw/EOTWHandler$EotwRunnable.class differ diff --git a/bin/notifyz/hardcorefactions/games/eotw/EOTWHandler.class b/bin/notifyz/hardcorefactions/games/eotw/EOTWHandler.class new file mode 100644 index 0000000..cf62570 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/eotw/EOTWHandler.class differ diff --git a/bin/notifyz/hardcorefactions/games/fury/FuryExecutor.class b/bin/notifyz/hardcorefactions/games/fury/FuryExecutor.class new file mode 100644 index 0000000..5a0be3f Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/fury/FuryExecutor.class differ diff --git a/bin/notifyz/hardcorefactions/games/fury/FurySetpointsArgument.class b/bin/notifyz/hardcorefactions/games/fury/FurySetpointsArgument.class new file mode 100644 index 0000000..5eb1529 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/fury/FurySetpointsArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/EnderChestKey.class b/bin/notifyz/hardcorefactions/games/key/EnderChestKey.class new file mode 100644 index 0000000..0159b50 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/EnderChestKey.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/Key.class b/bin/notifyz/hardcorefactions/games/key/Key.class new file mode 100644 index 0000000..4d4bc0f Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/Key.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/KeyListener$1.class b/bin/notifyz/hardcorefactions/games/key/KeyListener$1.class new file mode 100644 index 0000000..7de2366 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/KeyListener$1.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/KeyListener$2.class b/bin/notifyz/hardcorefactions/games/key/KeyListener$2.class new file mode 100644 index 0000000..6aba0a1 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/KeyListener$2.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/KeyListener$3.class b/bin/notifyz/hardcorefactions/games/key/KeyListener$3.class new file mode 100644 index 0000000..a63b599 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/KeyListener$3.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/KeyListener$4.class b/bin/notifyz/hardcorefactions/games/key/KeyListener$4.class new file mode 100644 index 0000000..6f7eb29 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/KeyListener$4.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/KeyListener.class b/bin/notifyz/hardcorefactions/games/key/KeyListener.class new file mode 100644 index 0000000..13aa1e9 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/KeyListener.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/KeyManager.class b/bin/notifyz/hardcorefactions/games/key/KeyManager.class new file mode 100644 index 0000000..4d846b1 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/KeyManager.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/LootExecutor.class b/bin/notifyz/hardcorefactions/games/key/LootExecutor.class new file mode 100644 index 0000000..d274f3b Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/LootExecutor.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/RewardableItemStack.class b/bin/notifyz/hardcorefactions/games/key/RewardableItemStack.class new file mode 100644 index 0000000..ac55bac Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/RewardableItemStack.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/argument/LootAddArgument.class b/bin/notifyz/hardcorefactions/games/key/argument/LootAddArgument.class new file mode 100644 index 0000000..a618c08 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/argument/LootAddArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/argument/LootBankArgument.class b/bin/notifyz/hardcorefactions/games/key/argument/LootBankArgument.class new file mode 100644 index 0000000..7ba58e0 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/argument/LootBankArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/argument/LootBroadcastsArgument.class b/bin/notifyz/hardcorefactions/games/key/argument/LootBroadcastsArgument.class new file mode 100644 index 0000000..13b8b62 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/argument/LootBroadcastsArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/argument/LootCreateArgument.class b/bin/notifyz/hardcorefactions/games/key/argument/LootCreateArgument.class new file mode 100644 index 0000000..f1925fa Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/argument/LootCreateArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/argument/LootDepositArgument.class b/bin/notifyz/hardcorefactions/games/key/argument/LootDepositArgument.class new file mode 100644 index 0000000..2dfedf7 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/argument/LootDepositArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/argument/LootEventKeyArgument.class b/bin/notifyz/hardcorefactions/games/key/argument/LootEventKeyArgument.class new file mode 100644 index 0000000..e259b41 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/argument/LootEventKeyArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/argument/LootGiveArgument.class b/bin/notifyz/hardcorefactions/games/key/argument/LootGiveArgument.class new file mode 100644 index 0000000..0eb73f7 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/argument/LootGiveArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/argument/LootRollsArgument.class b/bin/notifyz/hardcorefactions/games/key/argument/LootRollsArgument.class new file mode 100644 index 0000000..1f85c1b Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/argument/LootRollsArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/argument/LootWithdrawArgument.class b/bin/notifyz/hardcorefactions/games/key/argument/LootWithdrawArgument.class new file mode 100644 index 0000000..b11e094 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/argument/LootWithdrawArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/type/ConquestKey.class b/bin/notifyz/hardcorefactions/games/key/type/ConquestKey.class new file mode 100644 index 0000000..f1e2705 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/type/ConquestKey.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/type/CustomKey.class b/bin/notifyz/hardcorefactions/games/key/type/CustomKey.class new file mode 100644 index 0000000..3ec2adc Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/type/CustomKey.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/type/ExoKey.class b/bin/notifyz/hardcorefactions/games/key/type/ExoKey.class new file mode 100644 index 0000000..d1dc051 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/type/ExoKey.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/type/GodKey.class b/bin/notifyz/hardcorefactions/games/key/type/GodKey.class new file mode 100644 index 0000000..adaf5a5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/type/GodKey.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/type/KothKey.class b/bin/notifyz/hardcorefactions/games/key/type/KothKey.class new file mode 100644 index 0000000..5f904cc Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/type/KothKey.class differ diff --git a/bin/notifyz/hardcorefactions/games/key/type/LegendKey.class b/bin/notifyz/hardcorefactions/games/key/type/LegendKey.class new file mode 100644 index 0000000..95428da Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/key/type/LegendKey.class differ diff --git a/bin/notifyz/hardcorefactions/games/koth/KothExecutor.class b/bin/notifyz/hardcorefactions/games/koth/KothExecutor.class new file mode 100644 index 0000000..5be0db5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/koth/KothExecutor.class differ diff --git a/bin/notifyz/hardcorefactions/games/koth/arguments/KothHelpArgument.class b/bin/notifyz/hardcorefactions/games/koth/arguments/KothHelpArgument.class new file mode 100644 index 0000000..9323e32 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/koth/arguments/KothHelpArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/koth/arguments/KothNextArgument.class b/bin/notifyz/hardcorefactions/games/koth/arguments/KothNextArgument.class new file mode 100644 index 0000000..522b37e Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/koth/arguments/KothNextArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/koth/arguments/KothScheduleArgument.class b/bin/notifyz/hardcorefactions/games/koth/arguments/KothScheduleArgument.class new file mode 100644 index 0000000..363d5cd Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/koth/arguments/KothScheduleArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/koth/arguments/KothSetCapDelayArgument.class b/bin/notifyz/hardcorefactions/games/koth/arguments/KothSetCapDelayArgument.class new file mode 100644 index 0000000..52f39fc Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/koth/arguments/KothSetCapDelayArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/koth/arguments/KothTopCapturesArgument.class b/bin/notifyz/hardcorefactions/games/koth/arguments/KothTopCapturesArgument.class new file mode 100644 index 0000000..96cbbb2 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/koth/arguments/KothTopCapturesArgument.class differ diff --git a/bin/notifyz/hardcorefactions/games/mountain/GlowstoneMountainCommand.class b/bin/notifyz/hardcorefactions/games/mountain/GlowstoneMountainCommand.class new file mode 100644 index 0000000..92b5e0d Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/mountain/GlowstoneMountainCommand.class differ diff --git a/bin/notifyz/hardcorefactions/games/skygear/SkyGearCommand.class b/bin/notifyz/hardcorefactions/games/skygear/SkyGearCommand.class new file mode 100644 index 0000000..f5dfa6c Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/skygear/SkyGearCommand.class differ diff --git a/bin/notifyz/hardcorefactions/games/skygear/handlers/SkyGearHandler.class b/bin/notifyz/hardcorefactions/games/skygear/handlers/SkyGearHandler.class new file mode 100644 index 0000000..96584ee Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/skygear/handlers/SkyGearHandler.class differ diff --git a/bin/notifyz/hardcorefactions/games/skygear/listeners/SkyGearListener.class b/bin/notifyz/hardcorefactions/games/skygear/listeners/SkyGearListener.class new file mode 100644 index 0000000..f391570 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/skygear/listeners/SkyGearListener.class differ diff --git a/bin/notifyz/hardcorefactions/games/sotw/SOTWHandler$SotwRunnable.class b/bin/notifyz/hardcorefactions/games/sotw/SOTWHandler$SotwRunnable.class new file mode 100644 index 0000000..ff2ba18 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/sotw/SOTWHandler$SotwRunnable.class differ diff --git a/bin/notifyz/hardcorefactions/games/sotw/SOTWHandler.class b/bin/notifyz/hardcorefactions/games/sotw/SOTWHandler.class new file mode 100644 index 0000000..5674520 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/sotw/SOTWHandler.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/EventTimer$1.class b/bin/notifyz/hardcorefactions/games/utilities/EventTimer$1.class new file mode 100644 index 0000000..3b92c69 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/EventTimer$1.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/EventTimer.class b/bin/notifyz/hardcorefactions/games/utilities/EventTimer.class new file mode 100644 index 0000000..b5e540f Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/EventTimer.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/MoreObjects$ToStringHelper$ValueHolder.class b/bin/notifyz/hardcorefactions/games/utilities/MoreObjects$ToStringHelper$ValueHolder.class new file mode 100644 index 0000000..2c42a62 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/MoreObjects$ToStringHelper$ValueHolder.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/MoreObjects$ToStringHelper.class b/bin/notifyz/hardcorefactions/games/utilities/MoreObjects$ToStringHelper.class new file mode 100644 index 0000000..b2770af Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/MoreObjects$ToStringHelper.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/MoreObjects.class b/bin/notifyz/hardcorefactions/games/utilities/MoreObjects.class new file mode 100644 index 0000000..4bb94a3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/MoreObjects.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/capturezone/CaptureZone.class b/bin/notifyz/hardcorefactions/games/utilities/capturezone/CaptureZone.class new file mode 100644 index 0000000..6ab86c7 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/capturezone/CaptureZone.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/capturezone/EventCapture.class b/bin/notifyz/hardcorefactions/games/utilities/capturezone/EventCapture.class new file mode 100644 index 0000000..e531c16 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/capturezone/EventCapture.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/scheduler/EventScheduler.class b/bin/notifyz/hardcorefactions/games/utilities/scheduler/EventScheduler.class new file mode 100644 index 0000000..71d1da2 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/scheduler/EventScheduler.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/scheduler/EventScheduler2.class b/bin/notifyz/hardcorefactions/games/utilities/scheduler/EventScheduler2.class new file mode 100644 index 0000000..13f4c3f Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/scheduler/EventScheduler2.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/scheduler/IEventScheduler.class b/bin/notifyz/hardcorefactions/games/utilities/scheduler/IEventScheduler.class new file mode 100644 index 0000000..e8a9f50 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/scheduler/IEventScheduler.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/tracker/CitadelTracker.class b/bin/notifyz/hardcorefactions/games/utilities/tracker/CitadelTracker.class new file mode 100644 index 0000000..792a593 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/tracker/CitadelTracker.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/tracker/ConquestTracker.class b/bin/notifyz/hardcorefactions/games/utilities/tracker/ConquestTracker.class new file mode 100644 index 0000000..64e535a Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/tracker/ConquestTracker.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/tracker/EventTracker.class b/bin/notifyz/hardcorefactions/games/utilities/tracker/EventTracker.class new file mode 100644 index 0000000..6c0540e Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/tracker/EventTracker.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/tracker/FuryTracker.class b/bin/notifyz/hardcorefactions/games/utilities/tracker/FuryTracker.class new file mode 100644 index 0000000..02cfe04 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/tracker/FuryTracker.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/tracker/KothTracker.class b/bin/notifyz/hardcorefactions/games/utilities/tracker/KothTracker.class new file mode 100644 index 0000000..ed7ed30 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/tracker/KothTracker.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/tracker/PalaceTracker.class b/bin/notifyz/hardcorefactions/games/utilities/tracker/PalaceTracker.class new file mode 100644 index 0000000..d902d31 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/tracker/PalaceTracker.class differ diff --git a/bin/notifyz/hardcorefactions/games/utilities/type/EventType.class b/bin/notifyz/hardcorefactions/games/utilities/type/EventType.class new file mode 100644 index 0000000..376f136 Binary files /dev/null and b/bin/notifyz/hardcorefactions/games/utilities/type/EventType.class differ diff --git a/bin/notifyz/hardcorefactions/kit/FlatFileKitManager.class b/bin/notifyz/hardcorefactions/kit/FlatFileKitManager.class new file mode 100644 index 0000000..31c8048 Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/FlatFileKitManager.class differ diff --git a/bin/notifyz/hardcorefactions/kit/Kit.class b/bin/notifyz/hardcorefactions/kit/Kit.class new file mode 100644 index 0000000..b953ac3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/Kit.class differ diff --git a/bin/notifyz/hardcorefactions/kit/KitExecutor.class b/bin/notifyz/hardcorefactions/kit/KitExecutor.class new file mode 100644 index 0000000..15005fa Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/KitExecutor.class differ diff --git a/bin/notifyz/hardcorefactions/kit/KitListener.class b/bin/notifyz/hardcorefactions/kit/KitListener.class new file mode 100644 index 0000000..0aeeb4a Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/KitListener.class differ diff --git a/bin/notifyz/hardcorefactions/kit/KitManager.class b/bin/notifyz/hardcorefactions/kit/KitManager.class new file mode 100644 index 0000000..f0f9c1c Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/KitManager.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitApplyArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitApplyArgument.class new file mode 100644 index 0000000..48606ec Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitApplyArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitCreateArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitCreateArgument.class new file mode 100644 index 0000000..b261831 Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitCreateArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitDeleteArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitDeleteArgument.class new file mode 100644 index 0000000..405359b Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitDeleteArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitDisableArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitDisableArgument.class new file mode 100644 index 0000000..8211b38 Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitDisableArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitGuiArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitGuiArgument.class new file mode 100644 index 0000000..66a8799 Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitGuiArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitListArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitListArgument.class new file mode 100644 index 0000000..aaeb273 Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitListArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitPreviewArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitPreviewArgument.class new file mode 100644 index 0000000..eb8a88b Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitPreviewArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitRenameArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitRenameArgument.class new file mode 100644 index 0000000..c2077e1 Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitRenameArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitSetDelayArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitSetDelayArgument.class new file mode 100644 index 0000000..a237bb6 Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitSetDelayArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitSetDescriptionArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitSetDescriptionArgument.class new file mode 100644 index 0000000..b39374b Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitSetDescriptionArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitSetImageArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitSetImageArgument.class new file mode 100644 index 0000000..346dc4a Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitSetImageArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitSetIndexArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitSetIndexArgument.class new file mode 100644 index 0000000..8e697b5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitSetIndexArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitSetItemsArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitSetItemsArgument.class new file mode 100644 index 0000000..fc6a3f0 Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitSetItemsArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitSetMaxUsesArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitSetMaxUsesArgument.class new file mode 100644 index 0000000..f84d3f2 Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitSetMaxUsesArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/argument/KitSetminplaytimeArgument.class b/bin/notifyz/hardcorefactions/kit/argument/KitSetminplaytimeArgument.class new file mode 100644 index 0000000..27e3c8a Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/argument/KitSetminplaytimeArgument.class differ diff --git a/bin/notifyz/hardcorefactions/kit/event/KitApplyEvent.class b/bin/notifyz/hardcorefactions/kit/event/KitApplyEvent.class new file mode 100644 index 0000000..355d2e8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/event/KitApplyEvent.class differ diff --git a/bin/notifyz/hardcorefactions/kit/event/KitCreateEvent.class b/bin/notifyz/hardcorefactions/kit/event/KitCreateEvent.class new file mode 100644 index 0000000..be063a8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/event/KitCreateEvent.class differ diff --git a/bin/notifyz/hardcorefactions/kit/event/KitRemoveEvent.class b/bin/notifyz/hardcorefactions/kit/event/KitRemoveEvent.class new file mode 100644 index 0000000..75c289e Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/event/KitRemoveEvent.class differ diff --git a/bin/notifyz/hardcorefactions/kit/event/KitRenameEvent.class b/bin/notifyz/hardcorefactions/kit/event/KitRenameEvent.class new file mode 100644 index 0000000..f590e08 Binary files /dev/null and b/bin/notifyz/hardcorefactions/kit/event/KitRenameEvent.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/CoreListener$1.class b/bin/notifyz/hardcorefactions/listeners/CoreListener$1.class new file mode 100644 index 0000000..5378ce5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/CoreListener$1.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/CoreListener.class b/bin/notifyz/hardcorefactions/listeners/CoreListener.class new file mode 100644 index 0000000..d82a56b Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/CoreListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/claim/ClaimWandListener$1.class b/bin/notifyz/hardcorefactions/listeners/claim/ClaimWandListener$1.class new file mode 100644 index 0000000..ba83bc0 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/claim/ClaimWandListener$1.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/claim/ClaimWandListener$2.class b/bin/notifyz/hardcorefactions/listeners/claim/ClaimWandListener$2.class new file mode 100644 index 0000000..de5ee0f Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/claim/ClaimWandListener$2.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/claim/ClaimWandListener.class b/bin/notifyz/hardcorefactions/listeners/claim/ClaimWandListener.class new file mode 100644 index 0000000..13ac659 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/claim/ClaimWandListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/claim/SubclaimWandListener$1.class b/bin/notifyz/hardcorefactions/listeners/claim/SubclaimWandListener$1.class new file mode 100644 index 0000000..52e3ecc Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/claim/SubclaimWandListener$1.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/claim/SubclaimWandListener$2.class b/bin/notifyz/hardcorefactions/listeners/claim/SubclaimWandListener$2.class new file mode 100644 index 0000000..0a3ed40 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/claim/SubclaimWandListener$2.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/claim/SubclaimWandListener.class b/bin/notifyz/hardcorefactions/listeners/claim/SubclaimWandListener.class new file mode 100644 index 0000000..5b49fe9 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/claim/SubclaimWandListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/essentials/AutoMuteListener.class b/bin/notifyz/hardcorefactions/listeners/essentials/AutoMuteListener.class new file mode 100644 index 0000000..87f51b7 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/essentials/AutoMuteListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/essentials/BreedListener.class b/bin/notifyz/hardcorefactions/listeners/essentials/BreedListener.class new file mode 100644 index 0000000..2913f74 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/essentials/BreedListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/essentials/ChatListener.class b/bin/notifyz/hardcorefactions/listeners/essentials/ChatListener.class new file mode 100644 index 0000000..bc72924 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/essentials/ChatListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/essentials/FreezeAllListener.class b/bin/notifyz/hardcorefactions/listeners/essentials/FreezeAllListener.class new file mode 100644 index 0000000..b556293 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/essentials/FreezeAllListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/essentials/FreezeListener$AlertTask.class b/bin/notifyz/hardcorefactions/listeners/essentials/FreezeListener$AlertTask.class new file mode 100644 index 0000000..e39ba15 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/essentials/FreezeListener$AlertTask.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/essentials/FreezeListener.class b/bin/notifyz/hardcorefactions/listeners/essentials/FreezeListener.class new file mode 100644 index 0000000..adb0dd6 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/essentials/FreezeListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/essentials/FurnaceSmeltSpeederListener.class b/bin/notifyz/hardcorefactions/listeners/essentials/FurnaceSmeltSpeederListener.class new file mode 100644 index 0000000..b5d9f6b Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/essentials/FurnaceSmeltSpeederListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/essentials/HideStaffListener.class b/bin/notifyz/hardcorefactions/listeners/essentials/HideStaffListener.class new file mode 100644 index 0000000..8d76d8d Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/essentials/HideStaffListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/essentials/MobstackListener.class b/bin/notifyz/hardcorefactions/listeners/essentials/MobstackListener.class new file mode 100644 index 0000000..4f46e97 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/essentials/MobstackListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/essentials/PlayTimeListener.class b/bin/notifyz/hardcorefactions/listeners/essentials/PlayTimeListener.class new file mode 100644 index 0000000..10d016b Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/essentials/PlayTimeListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/essentials/RestoreInventoryListener.class b/bin/notifyz/hardcorefactions/listeners/essentials/RestoreInventoryListener.class new file mode 100644 index 0000000..c48e02e Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/essentials/RestoreInventoryListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/essentials/SkullListener.class b/bin/notifyz/hardcorefactions/listeners/essentials/SkullListener.class new file mode 100644 index 0000000..929722c Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/essentials/SkullListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/essentials/StaffChatListener.class b/bin/notifyz/hardcorefactions/listeners/essentials/StaffChatListener.class new file mode 100644 index 0000000..19c06fb Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/essentials/StaffChatListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/essentials/WhitelistMessageListener.class b/bin/notifyz/hardcorefactions/listeners/essentials/WhitelistMessageListener.class new file mode 100644 index 0000000..6abb398 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/essentials/WhitelistMessageListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/AnvilSpamListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/AnvilSpamListener.class new file mode 100644 index 0000000..efa603d Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/AnvilSpamListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/BedBombingListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/BedBombingListener.class new file mode 100644 index 0000000..086cbf8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/BedBombingListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/BookDeenchantListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/BookDeenchantListener.class new file mode 100644 index 0000000..2040b77 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/BookDeenchantListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/BorderListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/BorderListener.class new file mode 100644 index 0000000..4fe4215 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/BorderListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/BottledExpListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/BottledExpListener.class new file mode 100644 index 0000000..4be875f Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/BottledExpListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/CobwebListener$1.class b/bin/notifyz/hardcorefactions/listeners/hcf/CobwebListener$1.class new file mode 100644 index 0000000..063a600 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/CobwebListener$1.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/CobwebListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/CobwebListener.class new file mode 100644 index 0000000..657b37a Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/CobwebListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/ColorSignListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/ColorSignListener.class new file mode 100644 index 0000000..6f6e1aa Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/ColorSignListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/CrowbarListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/CrowbarListener.class new file mode 100644 index 0000000..a3267e8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/CrowbarListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/DeathListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/DeathListener.class new file mode 100644 index 0000000..bc2bac7 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/DeathListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/DeathMessageListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/DeathMessageListener.class new file mode 100644 index 0000000..e853f83 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/DeathMessageListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/DeathSignListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/DeathSignListener.class new file mode 100644 index 0000000..eb3f156 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/DeathSignListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/DeathbanListener$1.class b/bin/notifyz/hardcorefactions/listeners/hcf/DeathbanListener$1.class new file mode 100644 index 0000000..5d8154f Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/DeathbanListener$1.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/DeathbanListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/DeathbanListener.class new file mode 100644 index 0000000..21c6c9c Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/DeathbanListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/EOTWListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/EOTWListener.class new file mode 100644 index 0000000..87dfbff Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/EOTWListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/ElevatorListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/ElevatorListener.class new file mode 100644 index 0000000..d76d335 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/ElevatorListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/EnchantLimitListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/EnchantLimitListener.class new file mode 100644 index 0000000..ddd895b Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/EnchantLimitListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/EntityLimitListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/EntityLimitListener.class new file mode 100644 index 0000000..0ae714e Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/EntityLimitListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/EventListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/EventListener.class new file mode 100644 index 0000000..c6bf1c4 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/EventListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/EventSignListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/EventSignListener.class new file mode 100644 index 0000000..b3fe92b Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/EventSignListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/ExpMultiplierListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/ExpMultiplierListener.class new file mode 100644 index 0000000..46e3add Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/ExpMultiplierListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/FoundDiamondListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/FoundDiamondListener.class new file mode 100644 index 0000000..354a68c Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/FoundDiamondListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/ItemStatTrackingListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/ItemStatTrackingListener.class new file mode 100644 index 0000000..06fc8a5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/ItemStatTrackingListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/KillStreaks.class b/bin/notifyz/hardcorefactions/listeners/hcf/KillStreaks.class new file mode 100644 index 0000000..33dceea Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/KillStreaks.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/KillstreakListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/KillstreakListener.class new file mode 100644 index 0000000..a477eb5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/KillstreakListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/KitMapKitsListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/KitMapKitsListener.class new file mode 100644 index 0000000..d28d8ba Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/KitMapKitsListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/KitMapListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/KitMapListener.class new file mode 100644 index 0000000..302c4a8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/KitMapListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/MinecartElevatorListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/MinecartElevatorListener.class new file mode 100644 index 0000000..e765e17 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/MinecartElevatorListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/PickaxeStatisticsListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/PickaxeStatisticsListener.class new file mode 100644 index 0000000..9847edc Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/PickaxeStatisticsListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/PickaxeStatsListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/PickaxeStatsListener.class new file mode 100644 index 0000000..f104df7 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/PickaxeStatsListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/PortalListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/PortalListener.class new file mode 100644 index 0000000..3287a1a Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/PortalListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/PotionLimitListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/PotionLimitListener.class new file mode 100644 index 0000000..aafa945 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/PotionLimitListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/ProtectionListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/ProtectionListener.class new file mode 100644 index 0000000..11312b1 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/ProtectionListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/SOTWListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/SOTWListener.class new file mode 100644 index 0000000..cab1237 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/SOTWListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/ShopListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/ShopListener.class new file mode 100644 index 0000000..ac84c2a Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/ShopListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/StaffModeListener$1.class b/bin/notifyz/hardcorefactions/listeners/hcf/StaffModeListener$1.class new file mode 100644 index 0000000..afb4214 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/StaffModeListener$1.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/StaffModeListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/StaffModeListener.class new file mode 100644 index 0000000..25bfb75 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/StaffModeListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/Strength2Listener.class b/bin/notifyz/hardcorefactions/listeners/hcf/Strength2Listener.class new file mode 100644 index 0000000..05e6b4f Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/Strength2Listener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/StrengthListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/StrengthListener.class new file mode 100644 index 0000000..adc15eb Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/StrengthListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/SubclaimListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/SubclaimListener.class new file mode 100644 index 0000000..86a68ec Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/SubclaimListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/TeamListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/TeamListener.class new file mode 100644 index 0000000..6fafc60 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/TeamListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/ThrowableCobwebsListener$1.class b/bin/notifyz/hardcorefactions/listeners/hcf/ThrowableCobwebsListener$1.class new file mode 100644 index 0000000..0f088c5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/ThrowableCobwebsListener$1.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/ThrowableCobwebsListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/ThrowableCobwebsListener.class new file mode 100644 index 0000000..17d9dd0 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/ThrowableCobwebsListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/WorldListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/WorldListener.class new file mode 100644 index 0000000..8db1e9d Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/WorldListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/AnvilDupeFixListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/AnvilDupeFixListener.class new file mode 100644 index 0000000..01621da Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/AnvilDupeFixListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/AnvilRepairEvent.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/AnvilRepairEvent.class new file mode 100644 index 0000000..cb06dde Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/AnvilRepairEvent.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/ArcherBeaconSpeedFixListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/ArcherBeaconSpeedFixListener.class new file mode 100644 index 0000000..fc1aaa1 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/ArcherBeaconSpeedFixListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/ArmorFixListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/ArmorFixListener.class new file mode 100644 index 0000000..b7b4298 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/ArmorFixListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/BeaconStrengthFixListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/BeaconStrengthFixListener.class new file mode 100644 index 0000000..326ca6a Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/BeaconStrengthFixListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/BlockHitFixListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/BlockHitFixListener.class new file mode 100644 index 0000000..6f9444f Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/BlockHitFixListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/BoatGlitchFixListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/BoatGlitchFixListener.class new file mode 100644 index 0000000..6d20f99 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/BoatGlitchFixListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/CrashFixListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/CrashFixListener.class new file mode 100644 index 0000000..c60fe8e Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/CrashFixListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/DuplicationGlitchListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/DuplicationGlitchListener.class new file mode 100644 index 0000000..5a0ba73 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/DuplicationGlitchListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/EnderChestRemovalListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/EnderChestRemovalListener.class new file mode 100644 index 0000000..8338131 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/EnderChestRemovalListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/HungerFixListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/HungerFixListener.class new file mode 100644 index 0000000..fbc29dc Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/HungerFixListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/InfinityArrowFixListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/InfinityArrowFixListener.class new file mode 100644 index 0000000..da46257 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/InfinityArrowFixListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/MobFixListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/MobFixListener.class new file mode 100644 index 0000000..0bda60c Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/MobFixListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/PearlGlitchListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/PearlGlitchListener.class new file mode 100644 index 0000000..9a26286 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/PearlGlitchListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/PearlThroughListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/PearlThroughListener.class new file mode 100644 index 0000000..8f206a1 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/PearlThroughListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/SplashPotionListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/SplashPotionListener.class new file mode 100644 index 0000000..8e843df Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/SplashPotionListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/SugarCaneFixListener$Util.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/SugarCaneFixListener$Util.class new file mode 100644 index 0000000..44185d2 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/SugarCaneFixListener$Util.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/SugarCaneFixListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/SugarCaneFixListener.class new file mode 100644 index 0000000..fcc0b91 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/SugarCaneFixListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/VoidGlitchFixListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/VoidGlitchFixListener.class new file mode 100644 index 0000000..4413180 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/VoidGlitchFixListener.class differ diff --git a/bin/notifyz/hardcorefactions/listeners/hcf/fixes/WeatherFixListener.class b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/WeatherFixListener.class new file mode 100644 index 0000000..56a3908 Binary files /dev/null and b/bin/notifyz/hardcorefactions/listeners/hcf/fixes/WeatherFixListener.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/BufferedObjective$1.class b/bin/notifyz/hardcorefactions/scoreboard/BufferedObjective$1.class new file mode 100644 index 0000000..a209b78 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/BufferedObjective$1.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/BufferedObjective.class b/bin/notifyz/hardcorefactions/scoreboard/BufferedObjective.class new file mode 100644 index 0000000..05daa55 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/BufferedObjective.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/provider/PvPClassHolder.class b/bin/notifyz/hardcorefactions/scoreboard/provider/PvPClassHolder.class new file mode 100644 index 0000000..1ab5fd9 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/provider/PvPClassHolder.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/provider/ScoreboardProvider.class b/bin/notifyz/hardcorefactions/scoreboard/provider/ScoreboardProvider.class new file mode 100644 index 0000000..c516580 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/provider/ScoreboardProvider.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/TimerExecutor.class b/bin/notifyz/hardcorefactions/scoreboard/timer/TimerExecutor.class new file mode 100644 index 0000000..83ec0d5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/TimerExecutor.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/TimerManager.class b/bin/notifyz/hardcorefactions/scoreboard/timer/TimerManager.class new file mode 100644 index 0000000..1bf1dab Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/TimerManager.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/arguments/TimerCheckArgument$1.class b/bin/notifyz/hardcorefactions/scoreboard/timer/arguments/TimerCheckArgument$1.class new file mode 100644 index 0000000..9751f38 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/arguments/TimerCheckArgument$1.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/arguments/TimerCheckArgument.class b/bin/notifyz/hardcorefactions/scoreboard/timer/arguments/TimerCheckArgument.class new file mode 100644 index 0000000..ddf27b4 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/arguments/TimerCheckArgument.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/arguments/TimerSetArgument.class b/bin/notifyz/hardcorefactions/scoreboard/timer/arguments/TimerSetArgument.class new file mode 100644 index 0000000..fc0d818 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/arguments/TimerSetArgument.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/GlobalTimer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/GlobalTimer.class new file mode 100644 index 0000000..ac7c526 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/GlobalTimer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/PlayerTimer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/PlayerTimer.class new file mode 100644 index 0000000..9947e63 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/PlayerTimer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/Timer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/Timer.class new file mode 100644 index 0000000..bb5b375 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/Timer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/TimerCooldown$1.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/TimerCooldown$1.class new file mode 100644 index 0000000..2714538 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/TimerCooldown$1.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/TimerCooldown.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/TimerCooldown.class new file mode 100644 index 0000000..293b80f Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/TimerCooldown.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerClearEvent.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerClearEvent.class new file mode 100644 index 0000000..ba07403 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerClearEvent.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerExpireEvent.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerExpireEvent.class new file mode 100644 index 0000000..b37b3bf Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerExpireEvent.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerExtendEvent.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerExtendEvent.class new file mode 100644 index 0000000..22cca56 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerExtendEvent.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerPauseEvent.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerPauseEvent.class new file mode 100644 index 0000000..934d51a Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerPauseEvent.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerStartEvent.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerStartEvent.class new file mode 100644 index 0000000..b67eaf6 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/events/TimerStartEvent.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/AppleTimer$1.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/AppleTimer$1.class new file mode 100644 index 0000000..da4cd95 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/AppleTimer$1.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/AppleTimer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/AppleTimer.class new file mode 100644 index 0000000..af7f373 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/AppleTimer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/ClassWarmupTimer$1.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/ClassWarmupTimer$1.class new file mode 100644 index 0000000..3f12f81 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/ClassWarmupTimer$1.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/ClassWarmupTimer$2.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/ClassWarmupTimer$2.class new file mode 100644 index 0000000..52b5e76 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/ClassWarmupTimer$2.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/ClassWarmupTimer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/ClassWarmupTimer.class new file mode 100644 index 0000000..c428a48 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/ClassWarmupTimer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/CombatTimer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/CombatTimer.class new file mode 100644 index 0000000..ffe9323 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/CombatTimer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/EnderpearlTimer$PearlNameFaker.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/EnderpearlTimer$PearlNameFaker.class new file mode 100644 index 0000000..fb4c433 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/EnderpearlTimer$PearlNameFaker.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/EnderpearlTimer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/EnderpearlTimer.class new file mode 100644 index 0000000..1a1ca92 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/EnderpearlTimer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/GappleTimer$1.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/GappleTimer$1.class new file mode 100644 index 0000000..d632f8d Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/GappleTimer$1.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/GappleTimer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/GappleTimer.class new file mode 100644 index 0000000..511bfc3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/GappleTimer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/HomeTimer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/HomeTimer.class new file mode 100644 index 0000000..796c8f7 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/HomeTimer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/KeySaleTimer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/KeySaleTimer.class new file mode 100644 index 0000000..8594ba3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/KeySaleTimer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/LogoutTimer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/LogoutTimer.class new file mode 100644 index 0000000..b4b5955 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/LogoutTimer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/PvPProtectionTimer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/PvPProtectionTimer.class new file mode 100644 index 0000000..ce4ef68 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/PvPProtectionTimer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/RebootTimer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/RebootTimer.class new file mode 100644 index 0000000..8858629 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/RebootTimer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/SaleTimer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/SaleTimer.class new file mode 100644 index 0000000..1b10b8d Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/SaleTimer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/StuckTimer.class b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/StuckTimer.class new file mode 100644 index 0000000..e7d3035 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/timer/utilities/type/StuckTimer.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/utilities/PlayerBoard$1.class b/bin/notifyz/hardcorefactions/scoreboard/utilities/PlayerBoard$1.class new file mode 100644 index 0000000..7700899 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/utilities/PlayerBoard$1.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/utilities/PlayerBoard$2.class b/bin/notifyz/hardcorefactions/scoreboard/utilities/PlayerBoard$2.class new file mode 100644 index 0000000..ced8312 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/utilities/PlayerBoard$2.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/utilities/PlayerBoard$3.class b/bin/notifyz/hardcorefactions/scoreboard/utilities/PlayerBoard$3.class new file mode 100644 index 0000000..a5ae31e Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/utilities/PlayerBoard$3.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/utilities/PlayerBoard.class b/bin/notifyz/hardcorefactions/scoreboard/utilities/PlayerBoard.class new file mode 100644 index 0000000..ddc8b72 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/utilities/PlayerBoard.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/utilities/ScoreboardHandler.class b/bin/notifyz/hardcorefactions/scoreboard/utilities/ScoreboardHandler.class new file mode 100644 index 0000000..2d06ede Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/utilities/ScoreboardHandler.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/utilities/SidebarEntry.class b/bin/notifyz/hardcorefactions/scoreboard/utilities/SidebarEntry.class new file mode 100644 index 0000000..3e87650 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/utilities/SidebarEntry.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/utilities/SidebarFiller.class b/bin/notifyz/hardcorefactions/scoreboard/utilities/SidebarFiller.class new file mode 100644 index 0000000..f05e8a6 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/utilities/SidebarFiller.class differ diff --git a/bin/notifyz/hardcorefactions/scoreboard/utilities/SidebarProvider.class b/bin/notifyz/hardcorefactions/scoreboard/utilities/SidebarProvider.class new file mode 100644 index 0000000..441cd70 Binary files /dev/null and b/bin/notifyz/hardcorefactions/scoreboard/utilities/SidebarProvider.class differ diff --git a/bin/notifyz/hardcorefactions/team/TeamManager.class b/bin/notifyz/hardcorefactions/team/TeamManager.class new file mode 100644 index 0000000..deddceb Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/TeamManager.class differ diff --git a/bin/notifyz/hardcorefactions/team/claim/Claim.class b/bin/notifyz/hardcorefactions/team/claim/Claim.class new file mode 100644 index 0000000..2a2177e Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/claim/Claim.class differ diff --git a/bin/notifyz/hardcorefactions/team/claim/subclaim/Subclaim.class b/bin/notifyz/hardcorefactions/team/claim/subclaim/Subclaim.class new file mode 100644 index 0000000..42f170b Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/claim/subclaim/Subclaim.class differ diff --git a/bin/notifyz/hardcorefactions/team/claim/team/ClaimManager.class b/bin/notifyz/hardcorefactions/team/claim/team/ClaimManager.class new file mode 100644 index 0000000..12aa2b3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/claim/team/ClaimManager.class differ diff --git a/bin/notifyz/hardcorefactions/team/claim/team/ClaimSelection.class b/bin/notifyz/hardcorefactions/team/claim/team/ClaimSelection.class new file mode 100644 index 0000000..84e4d1b Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/claim/team/ClaimSelection.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/TeamExecutor.class b/bin/notifyz/hardcorefactions/team/commands/TeamExecutor.class new file mode 100644 index 0000000..9045eb6 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/TeamExecutor.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamBanCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamBanCommand.class new file mode 100644 index 0000000..ca55a40 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamBanCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamChatSpyCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamChatSpyCommand.class new file mode 100644 index 0000000..ae9c3f8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamChatSpyCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamClaimForCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamClaimForCommand.class new file mode 100644 index 0000000..c30aaad Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamClaimForCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamClearClaimsCommand$ClaimClearAllPrompt.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamClearClaimsCommand$ClaimClearAllPrompt.class new file mode 100644 index 0000000..8b2ccd6 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamClearClaimsCommand$ClaimClearAllPrompt.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamClearClaimsCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamClearClaimsCommand.class new file mode 100644 index 0000000..5f290eb Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamClearClaimsCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceDemoteCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceDemoteCommand.class new file mode 100644 index 0000000..fa439be Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceDemoteCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceJoinCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceJoinCommand.class new file mode 100644 index 0000000..2de10be Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceJoinCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceKickCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceKickCommand.class new file mode 100644 index 0000000..17eeed9 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceKickCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceLeaderCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceLeaderCommand.class new file mode 100644 index 0000000..c98ed7a Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceLeaderCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamForcePromoteCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamForcePromoteCommand.class new file mode 100644 index 0000000..33c890b Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamForcePromoteCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceUnallyCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceUnallyCommand.class new file mode 100644 index 0000000..c9e7313 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceUnallyCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceUnclaimHereCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceUnclaimHereCommand.class new file mode 100644 index 0000000..0058611 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamForceUnclaimHereCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamManageCommand$FactionPrompt.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamManageCommand$FactionPrompt.class new file mode 100644 index 0000000..1a147a8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamManageCommand$FactionPrompt.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamManageCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamManageCommand.class new file mode 100644 index 0000000..7a0485c Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamManageCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamMuteCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamMuteCommand.class new file mode 100644 index 0000000..41f747f Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamMuteCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamRemoveCommand$RemoveAllPrompt.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamRemoveCommand$RemoveAllPrompt.class new file mode 100644 index 0000000..2b3050d Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamRemoveCommand$RemoveAllPrompt.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamRemoveCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamRemoveCommand.class new file mode 100644 index 0000000..a41a241 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamRemoveCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamSetDeathbanMultiplierCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamSetDeathbanMultiplierCommand.class new file mode 100644 index 0000000..4a7847e Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamSetDeathbanMultiplierCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamSetDtrCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamSetDtrCommand.class new file mode 100644 index 0000000..bd58eb8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamSetDtrCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamSetDtrRegenCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamSetDtrRegenCommand.class new file mode 100644 index 0000000..cb3d833 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamSetDtrRegenCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamSetLivesCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamSetLivesCommand.class new file mode 100644 index 0000000..d1fc565 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamSetLivesCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamUnbanCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamUnbanCommand.class new file mode 100644 index 0000000..e4ff404 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamUnbanCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/staff/TeamUnmuteCommand.class b/bin/notifyz/hardcorefactions/team/commands/staff/TeamUnmuteCommand.class new file mode 100644 index 0000000..5200903 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/staff/TeamUnmuteCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimAddMemberCommand.class b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimAddMemberCommand.class new file mode 100644 index 0000000..b6ebb10 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimAddMemberCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimCommandExecutor.class b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimCommandExecutor.class new file mode 100644 index 0000000..5310072 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimCommandExecutor.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimCreateCommand.class b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimCreateCommand.class new file mode 100644 index 0000000..330dbdc Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimCreateCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimDelMemberCommand.class b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimDelMemberCommand.class new file mode 100644 index 0000000..c5381fb Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimDelMemberCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimDeleteCommand.class b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimDeleteCommand.class new file mode 100644 index 0000000..ee9af29 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimDeleteCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimListCommand.class b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimListCommand.class new file mode 100644 index 0000000..3741af9 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimListCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimMembersCommand.class b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimMembersCommand.class new file mode 100644 index 0000000..72906f8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimMembersCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimRenameCommand.class b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimRenameCommand.class new file mode 100644 index 0000000..ac61cf0 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimRenameCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimStartCommand.class b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimStartCommand.class new file mode 100644 index 0000000..2c1da88 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamSubclaimStartCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamUnsubclaimCommand.class b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamUnsubclaimCommand.class new file mode 100644 index 0000000..aa99034 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/subclaim/TeamUnsubclaimCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamAcceptCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamAcceptCommand.class new file mode 100644 index 0000000..caadb0b Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamAcceptCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamAllyCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamAllyCommand.class new file mode 100644 index 0000000..79c9150 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamAllyCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamAnnouncementCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamAnnouncementCommand.class new file mode 100644 index 0000000..6cbd41b Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamAnnouncementCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamChatCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamChatCommand.class new file mode 100644 index 0000000..fc7b2be Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamChatCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamClaimChunkArgument.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamClaimChunkArgument.class new file mode 100644 index 0000000..e7f2c2b Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamClaimChunkArgument.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamClaimCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamClaimCommand.class new file mode 100644 index 0000000..5b66bf7 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamClaimCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamClaimsCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamClaimsCommand.class new file mode 100644 index 0000000..6e76f72 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamClaimsCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamCoLeaderCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamCoLeaderCommand.class new file mode 100644 index 0000000..69158a1 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamCoLeaderCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamCreateCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamCreateCommand.class new file mode 100644 index 0000000..af1a5db Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamCreateCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamDemoteCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamDemoteCommand.class new file mode 100644 index 0000000..1849dd4 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamDemoteCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamDepositCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamDepositCommand.class new file mode 100644 index 0000000..8f7c008 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamDepositCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamDepositLivesCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamDepositLivesCommand.class new file mode 100644 index 0000000..0368c3c Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamDepositLivesCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamDisbandCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamDisbandCommand.class new file mode 100644 index 0000000..bcd5d93 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamDisbandCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamHQCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamHQCommand.class new file mode 100644 index 0000000..95a3292 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamHQCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamHelpCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamHelpCommand.class new file mode 100644 index 0000000..6f70d13 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamHelpCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamInviteCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamInviteCommand.class new file mode 100644 index 0000000..a7ed535 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamInviteCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamInvitesCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamInvitesCommand.class new file mode 100644 index 0000000..7870478 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamInvitesCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamKickCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamKickCommand.class new file mode 100644 index 0000000..04a334a Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamKickCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamLeaderCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamLeaderCommand.class new file mode 100644 index 0000000..df08495 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamLeaderCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamLeaveCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamLeaveCommand.class new file mode 100644 index 0000000..c6b96ac Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamLeaveCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamListCommand$1.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamListCommand$1.class new file mode 100644 index 0000000..4eb6219 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamListCommand$1.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamListCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamListCommand.class new file mode 100644 index 0000000..4dae2e4 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamListCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamMapCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamMapCommand.class new file mode 100644 index 0000000..c217329 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamMapCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamMessageCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamMessageCommand.class new file mode 100644 index 0000000..0bce185 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamMessageCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamOpenCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamOpenCommand.class new file mode 100644 index 0000000..ddae318 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamOpenCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamPromoteCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamPromoteCommand.class new file mode 100644 index 0000000..1bb1350 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamPromoteCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamRenameCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamRenameCommand.class new file mode 100644 index 0000000..24d76d4 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamRenameCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamReviveCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamReviveCommand.class new file mode 100644 index 0000000..11351b6 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamReviveCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamSetHQCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamSetHQCommand.class new file mode 100644 index 0000000..d9a8e31 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamSetHQCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamShowCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamShowCommand.class new file mode 100644 index 0000000..f813329 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamShowCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamStuckCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamStuckCommand.class new file mode 100644 index 0000000..70ec443 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamStuckCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamUnallyCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamUnallyCommand.class new file mode 100644 index 0000000..d76ecc9 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamUnallyCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamUnclaimCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamUnclaimCommand.class new file mode 100644 index 0000000..10c4d63 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamUnclaimCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamUninviteCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamUninviteCommand.class new file mode 100644 index 0000000..c1154bd Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamUninviteCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/commands/team/TeamWithdrawCommand.class b/bin/notifyz/hardcorefactions/team/commands/team/TeamWithdrawCommand.class new file mode 100644 index 0000000..31334d9 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/commands/team/TeamWithdrawCommand.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/CaptureZoneEnterEvent.class b/bin/notifyz/hardcorefactions/team/events/CaptureZoneEnterEvent.class new file mode 100644 index 0000000..a1acd83 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/CaptureZoneEnterEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/CaptureZoneLeaveEvent.class b/bin/notifyz/hardcorefactions/team/events/CaptureZoneLeaveEvent.class new file mode 100644 index 0000000..c5182ff Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/CaptureZoneLeaveEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/PlayerClaimEnterEvent$EnterCause.class b/bin/notifyz/hardcorefactions/team/events/PlayerClaimEnterEvent$EnterCause.class new file mode 100644 index 0000000..cb1031a Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/PlayerClaimEnterEvent$EnterCause.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/PlayerClaimEnterEvent.class b/bin/notifyz/hardcorefactions/team/events/PlayerClaimEnterEvent.class new file mode 100644 index 0000000..c2b5f70 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/PlayerClaimEnterEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/PlayerJoinTeamEvent.class b/bin/notifyz/hardcorefactions/team/events/PlayerJoinTeamEvent.class new file mode 100644 index 0000000..6791113 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/PlayerJoinTeamEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/PlayerJoinedTeamEvent.class b/bin/notifyz/hardcorefactions/team/events/PlayerJoinedTeamEvent.class new file mode 100644 index 0000000..8b702cc Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/PlayerJoinedTeamEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/PlayerLeaveTeamEvent.class b/bin/notifyz/hardcorefactions/team/events/PlayerLeaveTeamEvent.class new file mode 100644 index 0000000..84bd567 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/PlayerLeaveTeamEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/PlayerLeftTeamEvent.class b/bin/notifyz/hardcorefactions/team/events/PlayerLeftTeamEvent.class new file mode 100644 index 0000000..46cd86e Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/PlayerLeftTeamEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/TeamChatEvent.class b/bin/notifyz/hardcorefactions/team/events/TeamChatEvent.class new file mode 100644 index 0000000..25ba0fe Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/TeamChatEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/TeamClaimChangeEvent.class b/bin/notifyz/hardcorefactions/team/events/TeamClaimChangeEvent.class new file mode 100644 index 0000000..8972907 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/TeamClaimChangeEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/TeamClaimChangedEvent.class b/bin/notifyz/hardcorefactions/team/events/TeamClaimChangedEvent.class new file mode 100644 index 0000000..512ad8b Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/TeamClaimChangedEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/TeamCreateEvent.class b/bin/notifyz/hardcorefactions/team/events/TeamCreateEvent.class new file mode 100644 index 0000000..38ce153 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/TeamCreateEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/TeamDtrChangeEvent$DtrUpdateCause.class b/bin/notifyz/hardcorefactions/team/events/TeamDtrChangeEvent$DtrUpdateCause.class new file mode 100644 index 0000000..a0cef20 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/TeamDtrChangeEvent$DtrUpdateCause.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/TeamDtrChangeEvent.class b/bin/notifyz/hardcorefactions/team/events/TeamDtrChangeEvent.class new file mode 100644 index 0000000..7d99265 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/TeamDtrChangeEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/TeamEvent.class b/bin/notifyz/hardcorefactions/team/events/TeamEvent.class new file mode 100644 index 0000000..aabceda Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/TeamEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/TeamRelationCreateEvent.class b/bin/notifyz/hardcorefactions/team/events/TeamRelationCreateEvent.class new file mode 100644 index 0000000..e60c351 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/TeamRelationCreateEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/TeamRelationRemoveEvent.class b/bin/notifyz/hardcorefactions/team/events/TeamRelationRemoveEvent.class new file mode 100644 index 0000000..1e00a17 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/TeamRelationRemoveEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/TeamRemoveEvent.class b/bin/notifyz/hardcorefactions/team/events/TeamRemoveEvent.class new file mode 100644 index 0000000..ca25d45 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/TeamRemoveEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/TeamRenameEvent.class b/bin/notifyz/hardcorefactions/team/events/TeamRenameEvent.class new file mode 100644 index 0000000..c934f54 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/TeamRenameEvent.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/cause/ClaimChangeCause.class b/bin/notifyz/hardcorefactions/team/events/cause/ClaimChangeCause.class new file mode 100644 index 0000000..68b5d06 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/cause/ClaimChangeCause.class differ diff --git a/bin/notifyz/hardcorefactions/team/events/cause/TeamLeaveCause.class b/bin/notifyz/hardcorefactions/team/events/cause/TeamLeaveCause.class new file mode 100644 index 0000000..13ee04f Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/events/cause/TeamLeaveCause.class differ diff --git a/bin/notifyz/hardcorefactions/team/struct/Role.class b/bin/notifyz/hardcorefactions/team/struct/Role.class new file mode 100644 index 0000000..13de5d8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/struct/Role.class differ diff --git a/bin/notifyz/hardcorefactions/team/struct/chat/TeamChannel.class b/bin/notifyz/hardcorefactions/team/struct/chat/TeamChannel.class new file mode 100644 index 0000000..0eaa197 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/struct/chat/TeamChannel.class differ diff --git a/bin/notifyz/hardcorefactions/team/struct/teamstatus/Raidable.class b/bin/notifyz/hardcorefactions/team/struct/teamstatus/Raidable.class new file mode 100644 index 0000000..5635b98 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/struct/teamstatus/Raidable.class differ diff --git a/bin/notifyz/hardcorefactions/team/struct/teamstatus/RegenStatus.class b/bin/notifyz/hardcorefactions/team/struct/teamstatus/RegenStatus.class new file mode 100644 index 0000000..d61174f Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/struct/teamstatus/RegenStatus.class differ diff --git a/bin/notifyz/hardcorefactions/team/struct/teamstatus/Relation.class b/bin/notifyz/hardcorefactions/team/struct/teamstatus/Relation.class new file mode 100644 index 0000000..be0b0e6 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/struct/teamstatus/Relation.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/ClaimableTeam$1.class b/bin/notifyz/hardcorefactions/team/type/ClaimableTeam$1.class new file mode 100644 index 0000000..5abaee4 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/ClaimableTeam$1.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/ClaimableTeam.class b/bin/notifyz/hardcorefactions/team/type/ClaimableTeam.class new file mode 100644 index 0000000..4e63246 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/ClaimableTeam.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/PlayerTeam$1.class b/bin/notifyz/hardcorefactions/team/type/PlayerTeam$1.class new file mode 100644 index 0000000..2458290 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/PlayerTeam$1.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/PlayerTeam.class b/bin/notifyz/hardcorefactions/team/type/PlayerTeam.class new file mode 100644 index 0000000..766206b Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/PlayerTeam.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/CapturableFaction.class b/bin/notifyz/hardcorefactions/team/type/system/CapturableFaction.class new file mode 100644 index 0000000..107e706 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/CapturableFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/ConquestFaction$ConquestZone.class b/bin/notifyz/hardcorefactions/team/type/system/ConquestFaction$ConquestZone.class new file mode 100644 index 0000000..11096c2 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/ConquestFaction$ConquestZone.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/ConquestFaction.class b/bin/notifyz/hardcorefactions/team/type/system/ConquestFaction.class new file mode 100644 index 0000000..1b2a452 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/ConquestFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/EndPortalFaction.class b/bin/notifyz/hardcorefactions/team/type/system/EndPortalFaction.class new file mode 100644 index 0000000..ebdd7db Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/EndPortalFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/EventFaction.class b/bin/notifyz/hardcorefactions/team/type/system/EventFaction.class new file mode 100644 index 0000000..0f15117 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/EventFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/FuryFaction$FuryZone.class b/bin/notifyz/hardcorefactions/team/type/system/FuryFaction$FuryZone.class new file mode 100644 index 0000000..bb90a2e Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/FuryFaction$FuryZone.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/FuryFaction.class b/bin/notifyz/hardcorefactions/team/type/system/FuryFaction.class new file mode 100644 index 0000000..2532441 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/FuryFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/GlowstoneMountainFaction.class b/bin/notifyz/hardcorefactions/team/type/system/GlowstoneMountainFaction.class new file mode 100644 index 0000000..3c627ba Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/GlowstoneMountainFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/KothFaction.class b/bin/notifyz/hardcorefactions/team/type/system/KothFaction.class new file mode 100644 index 0000000..5b3ea5f Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/KothFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/PalaceFaction.class b/bin/notifyz/hardcorefactions/team/type/system/PalaceFaction.class new file mode 100644 index 0000000..e787dd5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/PalaceFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/RoadFaction$EastRoadFaction.class b/bin/notifyz/hardcorefactions/team/type/system/RoadFaction$EastRoadFaction.class new file mode 100644 index 0000000..77c126a Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/RoadFaction$EastRoadFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/RoadFaction$NorthRoadFaction.class b/bin/notifyz/hardcorefactions/team/type/system/RoadFaction$NorthRoadFaction.class new file mode 100644 index 0000000..ee50e58 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/RoadFaction$NorthRoadFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/RoadFaction$SouthRoadFaction.class b/bin/notifyz/hardcorefactions/team/type/system/RoadFaction$SouthRoadFaction.class new file mode 100644 index 0000000..ec86363 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/RoadFaction$SouthRoadFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/RoadFaction$WestRoadFaction.class b/bin/notifyz/hardcorefactions/team/type/system/RoadFaction$WestRoadFaction.class new file mode 100644 index 0000000..54cef70 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/RoadFaction$WestRoadFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/RoadFaction.class b/bin/notifyz/hardcorefactions/team/type/system/RoadFaction.class new file mode 100644 index 0000000..00aa5fb Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/RoadFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/SpawnFaction.class b/bin/notifyz/hardcorefactions/team/type/system/SpawnFaction.class new file mode 100644 index 0000000..ba1ef21 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/SpawnFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/WarzoneFaction.class b/bin/notifyz/hardcorefactions/team/type/system/WarzoneFaction.class new file mode 100644 index 0000000..f5d4f8e Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/WarzoneFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/type/system/WildernessFaction.class b/bin/notifyz/hardcorefactions/team/type/system/WildernessFaction.class new file mode 100644 index 0000000..c4b47bf Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/type/system/WildernessFaction.class differ diff --git a/bin/notifyz/hardcorefactions/team/utilities/ITeam.class b/bin/notifyz/hardcorefactions/team/utilities/ITeam.class new file mode 100644 index 0000000..7049437 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/utilities/ITeam.class differ diff --git a/bin/notifyz/hardcorefactions/team/utilities/LandMap.class b/bin/notifyz/hardcorefactions/team/utilities/LandMap.class new file mode 100644 index 0000000..4fc6a8f Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/utilities/LandMap.class differ diff --git a/bin/notifyz/hardcorefactions/team/utilities/TeamFile.class b/bin/notifyz/hardcorefactions/team/utilities/TeamFile.class new file mode 100644 index 0000000..dd2aa22 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/utilities/TeamFile.class differ diff --git a/bin/notifyz/hardcorefactions/team/utilities/TeamMember.class b/bin/notifyz/hardcorefactions/team/utilities/TeamMember.class new file mode 100644 index 0000000..58b8a12 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/utilities/TeamMember.class differ diff --git a/bin/notifyz/hardcorefactions/team/utilities/TeamType.class b/bin/notifyz/hardcorefactions/team/utilities/TeamType.class new file mode 100644 index 0000000..4506be3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/utilities/TeamType.class differ diff --git a/bin/notifyz/hardcorefactions/team/utilities/TeamUser$1.class b/bin/notifyz/hardcorefactions/team/utilities/TeamUser$1.class new file mode 100644 index 0000000..2b13f7a Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/utilities/TeamUser$1.class differ diff --git a/bin/notifyz/hardcorefactions/team/utilities/TeamUser$2.class b/bin/notifyz/hardcorefactions/team/utilities/TeamUser$2.class new file mode 100644 index 0000000..fe4ef4c Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/utilities/TeamUser$2.class differ diff --git a/bin/notifyz/hardcorefactions/team/utilities/TeamUser.class b/bin/notifyz/hardcorefactions/team/utilities/TeamUser.class new file mode 100644 index 0000000..24a5576 Binary files /dev/null and b/bin/notifyz/hardcorefactions/team/utilities/TeamUser.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/Configuration.class b/bin/notifyz/hardcorefactions/utilities/Configuration.class new file mode 100644 index 0000000..35a091b Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/Configuration.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/IPluginAPI.class b/bin/notifyz/hardcorefactions/utilities/api/IPluginAPI.class new file mode 100644 index 0000000..b11bb66 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/IPluginAPI.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/ICallback.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/ICallback.class new file mode 100644 index 0000000..7fdff66 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/ICallback.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/IFluentIterableCompat$1.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/IFluentIterableCompat$1.class new file mode 100644 index 0000000..0ca55fe Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/IFluentIterableCompat$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/IFluentIterableCompat.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/IFluentIterableCompat.class new file mode 100644 index 0000000..682fcf2 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/IFluentIterableCompat.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/IGuavaCompat.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/IGuavaCompat.class new file mode 100644 index 0000000..14b877e Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/IGuavaCompat.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/INameHistory.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/INameHistory.class new file mode 100644 index 0000000..f70c802 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/INameHistory.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandAPI.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandAPI.class new file mode 100644 index 0000000..b6f88ef Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandAPI.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandArgument.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandArgument.class new file mode 100644 index 0000000..35dbb00 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandArgument.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandArgumentExecutor.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandArgumentExecutor.class new file mode 100644 index 0000000..7fcc765 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandArgumentExecutor.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandWrapper$ArgumentComparator.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandWrapper$ArgumentComparator.class new file mode 100644 index 0000000..c06db14 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandWrapper$ArgumentComparator.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandWrapper.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandWrapper.class new file mode 100644 index 0000000..98fe8a4 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/command/ICommandWrapper.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/command/IConstantsAPI.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/command/IConstantsAPI.class new file mode 100644 index 0000000..312b7f2 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/command/IConstantsAPI.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/utils/IConcurrentValueOrderedMap$InternalEntry.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/utils/IConcurrentValueOrderedMap$InternalEntry.class new file mode 100644 index 0000000..706d784 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/utils/IConcurrentValueOrderedMap$InternalEntry.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/utils/IConcurrentValueOrderedMap.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/utils/IConcurrentValueOrderedMap.class new file mode 100644 index 0000000..e1d207f Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/utils/IConcurrentValueOrderedMap.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/utils/INmsUtils.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/utils/INmsUtils.class new file mode 100644 index 0000000..63906f7 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/utils/INmsUtils.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/api/utilties/utils/ISpigotUtils.class b/bin/notifyz/hardcorefactions/utilities/api/utilties/utils/ISpigotUtils.class new file mode 100644 index 0000000..bdb7ea2 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/api/utilties/utils/ISpigotUtils.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/BukkitUtils.class b/bin/notifyz/hardcorefactions/utilities/chat/BukkitUtils.class new file mode 100644 index 0000000..04a3e65 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/BukkitUtils.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/ChatUtil.class b/bin/notifyz/hardcorefactions/utilities/chat/ChatUtil.class new file mode 100644 index 0000000..0597136 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/ChatUtil.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/ClickAction.class b/bin/notifyz/hardcorefactions/utilities/chat/ClickAction.class new file mode 100644 index 0000000..4404cde Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/ClickAction.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/Color.class b/bin/notifyz/hardcorefactions/utilities/chat/Color.class new file mode 100644 index 0000000..86fb923 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/Color.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/Configuration.class b/bin/notifyz/hardcorefactions/utilities/chat/Configuration.class new file mode 100644 index 0000000..f63da93 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/Configuration.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/Cooldowns.class b/bin/notifyz/hardcorefactions/utilities/chat/Cooldowns.class new file mode 100644 index 0000000..1dd9c1e Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/Cooldowns.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/DelayedMessageRunnable.class b/bin/notifyz/hardcorefactions/utilities/chat/DelayedMessageRunnable.class new file mode 100644 index 0000000..fbcbbc0 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/DelayedMessageRunnable.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/FancyMessage.class b/bin/notifyz/hardcorefactions/utilities/chat/FancyMessage.class new file mode 100644 index 0000000..c51a8e5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/FancyMessage.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/FileConfig.class b/bin/notifyz/hardcorefactions/utilities/chat/FileConfig.class new file mode 100644 index 0000000..4b19f2a Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/FileConfig.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/HoverAction.class b/bin/notifyz/hardcorefactions/utilities/chat/HoverAction.class new file mode 100644 index 0000000..5ea0e0f Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/HoverAction.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/Lang.class b/bin/notifyz/hardcorefactions/utilities/chat/Lang.class new file mode 100644 index 0000000..21bd38b Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/Lang.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/MessageEvent.class b/bin/notifyz/hardcorefactions/utilities/chat/MessageEvent.class new file mode 100644 index 0000000..8a058fc Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/MessageEvent.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/MessagePart.class b/bin/notifyz/hardcorefactions/utilities/chat/MessagePart.class new file mode 100644 index 0000000..d7af8a1 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/MessagePart.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/Text.class b/bin/notifyz/hardcorefactions/utilities/chat/Text.class new file mode 100644 index 0000000..b777232 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/Text.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/TextUtils.class b/bin/notifyz/hardcorefactions/utilities/chat/TextUtils.class new file mode 100644 index 0000000..c3e6ba5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/TextUtils.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/chat/Trans.class b/bin/notifyz/hardcorefactions/utilities/chat/Trans.class new file mode 100644 index 0000000..25f604c Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/chat/Trans.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/crowbar/Crowbar.class b/bin/notifyz/hardcorefactions/utilities/crowbar/Crowbar.class new file mode 100644 index 0000000..ca4d424 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/crowbar/Crowbar.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/cuboid/CoordinatePair.class b/bin/notifyz/hardcorefactions/utilities/cuboid/CoordinatePair.class new file mode 100644 index 0000000..fe4c703 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/cuboid/CoordinatePair.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/cuboid/Cuboid.class b/bin/notifyz/hardcorefactions/utilities/cuboid/Cuboid.class new file mode 100644 index 0000000..94b9dac Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/cuboid/Cuboid.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/cuboid/CuboidBlockIterator.class b/bin/notifyz/hardcorefactions/utilities/cuboid/CuboidBlockIterator.class new file mode 100644 index 0000000..cc98948 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/cuboid/CuboidBlockIterator.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/cuboid/CuboidDirection.class b/bin/notifyz/hardcorefactions/utilities/cuboid/CuboidDirection.class new file mode 100644 index 0000000..1b2a979 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/cuboid/CuboidDirection.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/cuboid/CuboidLocationIterator.class b/bin/notifyz/hardcorefactions/utilities/cuboid/CuboidLocationIterator.class new file mode 100644 index 0000000..efbc698 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/cuboid/CuboidLocationIterator.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/cuboid/NamedCuboid.class b/bin/notifyz/hardcorefactions/utilities/cuboid/NamedCuboid.class new file mode 100644 index 0000000..3d42a91 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/cuboid/NamedCuboid.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/freeze/FrozenInventory.class b/bin/notifyz/hardcorefactions/utilities/freeze/FrozenInventory.class new file mode 100644 index 0000000..7d4a406 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/freeze/FrozenInventory.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/freeze/FrozenManager.class b/bin/notifyz/hardcorefactions/utilities/freeze/FrozenManager.class new file mode 100644 index 0000000..7d1ba7d Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/freeze/FrozenManager.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/imagemessage/ImageChar.class b/bin/notifyz/hardcorefactions/utilities/imagemessage/ImageChar.class new file mode 100644 index 0000000..eca723a Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/imagemessage/ImageChar.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/imagemessage/ImageMessage.class b/bin/notifyz/hardcorefactions/utilities/imagemessage/ImageMessage.class new file mode 100644 index 0000000..3544dd9 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/imagemessage/ImageMessage.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/InventoryRestoreHandler$InventoryState.class b/bin/notifyz/hardcorefactions/utilities/inventory/InventoryRestoreHandler$InventoryState.class new file mode 100644 index 0000000..7dde8b0 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/InventoryRestoreHandler$InventoryState.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/InventoryRestoreHandler.class b/bin/notifyz/hardcorefactions/utilities/inventory/InventoryRestoreHandler.class new file mode 100644 index 0000000..921b597 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/InventoryRestoreHandler.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/InventorySerialisation.class b/bin/notifyz/hardcorefactions/utilities/inventory/InventorySerialisation.class new file mode 100644 index 0000000..4bdcfa6 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/InventorySerialisation.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/InventoryUtils.class b/bin/notifyz/hardcorefactions/utilities/inventory/InventoryUtils.class new file mode 100644 index 0000000..bc0ed94 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/InventoryUtils.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/ItemBuilder.class b/bin/notifyz/hardcorefactions/utilities/inventory/ItemBuilder.class new file mode 100644 index 0000000..bea416a Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/ItemBuilder.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/ItemStackUtils.class b/bin/notifyz/hardcorefactions/utilities/inventory/ItemStackUtils.class new file mode 100644 index 0000000..883aa99 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/ItemStackUtils.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/Menu$1.class b/bin/notifyz/hardcorefactions/utilities/inventory/Menu$1.class new file mode 100644 index 0000000..d6ddf9d Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/Menu$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/Menu$ItemAction.class b/bin/notifyz/hardcorefactions/utilities/inventory/Menu$ItemAction.class new file mode 100644 index 0000000..b2bd823 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/Menu$ItemAction.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/Menu.class b/bin/notifyz/hardcorefactions/utilities/inventory/Menu.class new file mode 100644 index 0000000..825f6d0 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/Menu.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/PickStats.class b/bin/notifyz/hardcorefactions/utilities/inventory/PickStats.class new file mode 100644 index 0000000..6643562 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/PickStats.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/SettingsBuilder.class b/bin/notifyz/hardcorefactions/utilities/inventory/SettingsBuilder.class new file mode 100644 index 0000000..895aa88 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/SettingsBuilder.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/item/ItemDB.class b/bin/notifyz/hardcorefactions/utilities/inventory/item/ItemDB.class new file mode 100644 index 0000000..e5be058 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/item/ItemDB.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/item/ItemData.class b/bin/notifyz/hardcorefactions/utilities/inventory/item/ItemData.class new file mode 100644 index 0000000..e184c87 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/item/ItemData.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/item/ManagedFile.class b/bin/notifyz/hardcorefactions/utilities/inventory/item/ManagedFile.class new file mode 100644 index 0000000..f75dda6 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/item/ManagedFile.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/item/SimpleItemDB$1.class b/bin/notifyz/hardcorefactions/utilities/inventory/item/SimpleItemDB$1.class new file mode 100644 index 0000000..561dc08 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/item/SimpleItemDB$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/item/SimpleItemDB.class b/bin/notifyz/hardcorefactions/utilities/inventory/item/SimpleItemDB.class new file mode 100644 index 0000000..d35422b Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/item/SimpleItemDB.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/restoration/Inventories.class b/bin/notifyz/hardcorefactions/utilities/inventory/restoration/Inventories.class new file mode 100644 index 0000000..55f3955 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/restoration/Inventories.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/restoration/InventoryManager.class b/bin/notifyz/hardcorefactions/utilities/inventory/restoration/InventoryManager.class new file mode 100644 index 0000000..3e13bd7 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/restoration/InventoryManager.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/restoration/RestoreManager.class b/bin/notifyz/hardcorefactions/utilities/inventory/restoration/RestoreManager.class new file mode 100644 index 0000000..ea7f732 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/restoration/RestoreManager.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/inventory/restoration/TimeUtil.class b/bin/notifyz/hardcorefactions/utilities/inventory/restoration/TimeUtil.class new file mode 100644 index 0000000..b39b497 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/inventory/restoration/TimeUtil.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/user/IConsoleUser.class b/bin/notifyz/hardcorefactions/utilities/user/IConsoleUser.class new file mode 100644 index 0000000..54df39b Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/user/IConsoleUser.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/user/IUser.class b/bin/notifyz/hardcorefactions/utilities/user/IUser.class new file mode 100644 index 0000000..0420319 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/user/IUser.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/user/IUserManager.class b/bin/notifyz/hardcorefactions/utilities/user/IUserManager.class new file mode 100644 index 0000000..3fd57b4 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/user/IUserManager.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/user/UserManager.class b/bin/notifyz/hardcorefactions/utilities/user/UserManager.class new file mode 100644 index 0000000..2799ad8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/user/UserManager.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/ConcurrentValueOrderedMap$InternalEntry.class b/bin/notifyz/hardcorefactions/utilities/utils/ConcurrentValueOrderedMap$InternalEntry.class new file mode 100644 index 0000000..d562f54 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/ConcurrentValueOrderedMap$InternalEntry.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/ConcurrentValueOrderedMap.class b/bin/notifyz/hardcorefactions/utilities/utils/ConcurrentValueOrderedMap.class new file mode 100644 index 0000000..69522ae Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/ConcurrentValueOrderedMap.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/Config.class b/bin/notifyz/hardcorefactions/utilities/utils/Config.class new file mode 100644 index 0000000..79241e3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/Config.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/CountRemover$1.class b/bin/notifyz/hardcorefactions/utilities/utils/CountRemover$1.class new file mode 100644 index 0000000..fdbfe93 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/CountRemover$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/CountRemover.class b/bin/notifyz/hardcorefactions/utilities/utils/CountRemover.class new file mode 100644 index 0000000..f8f6c3e Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/CountRemover.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/DataHandler$1.class b/bin/notifyz/hardcorefactions/utilities/utils/DataHandler$1.class new file mode 100644 index 0000000..77fad7a Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/DataHandler$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/DataHandler.class b/bin/notifyz/hardcorefactions/utilities/utils/DataHandler.class new file mode 100644 index 0000000..e1e3f38 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/DataHandler.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/DateTimeFormats$1.class b/bin/notifyz/hardcorefactions/utilities/utils/DateTimeFormats$1.class new file mode 100644 index 0000000..a2dbc22 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/DateTimeFormats$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/DateTimeFormats$2.class b/bin/notifyz/hardcorefactions/utilities/utils/DateTimeFormats$2.class new file mode 100644 index 0000000..7bbe936 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/DateTimeFormats$2.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/DateTimeFormats$3.class b/bin/notifyz/hardcorefactions/utilities/utils/DateTimeFormats$3.class new file mode 100644 index 0000000..0f41078 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/DateTimeFormats$3.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/DateTimeFormats.class b/bin/notifyz/hardcorefactions/utilities/utils/DateTimeFormats.class new file mode 100644 index 0000000..2a4b3ab Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/DateTimeFormats.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/DelayedMessageRunnable.class b/bin/notifyz/hardcorefactions/utilities/utils/DelayedMessageRunnable.class new file mode 100644 index 0000000..7fd8884 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/DelayedMessageRunnable.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/DurationFormatter.class b/bin/notifyz/hardcorefactions/utilities/utils/DurationFormatter.class new file mode 100644 index 0000000..937ee64 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/DurationFormatter.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/Embedded.class b/bin/notifyz/hardcorefactions/utilities/utils/Embedded.class new file mode 100644 index 0000000..c5711bd Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/Embedded.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/ExperienceManager.class b/bin/notifyz/hardcorefactions/utilities/utils/ExperienceManager.class new file mode 100644 index 0000000..50c7398 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/ExperienceManager.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/GenericUtils.class b/bin/notifyz/hardcorefactions/utilities/utils/GenericUtils.class new file mode 100644 index 0000000..2653f84 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/GenericUtils.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/JavaUtils.class b/bin/notifyz/hardcorefactions/utilities/utils/JavaUtils.class new file mode 100644 index 0000000..54fb072 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/JavaUtils.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/MapSorting$1.class b/bin/notifyz/hardcorefactions/utilities/utils/MapSorting$1.class new file mode 100644 index 0000000..0cc8ee5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/MapSorting$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/MapSorting$2.class b/bin/notifyz/hardcorefactions/utilities/utils/MapSorting$2.class new file mode 100644 index 0000000..a201b24 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/MapSorting$2.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/MapSorting.class b/bin/notifyz/hardcorefactions/utilities/utils/MapSorting.class new file mode 100644 index 0000000..35375e5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/MapSorting.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/Mapper.class b/bin/notifyz/hardcorefactions/utilities/utils/Mapper.class new file mode 100644 index 0000000..2268a2c Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/Mapper.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/NMSHandler.class b/bin/notifyz/hardcorefactions/utilities/utils/NMSHandler.class new file mode 100644 index 0000000..1c47333 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/NMSHandler.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/NameHistory.class b/bin/notifyz/hardcorefactions/utilities/utils/NameHistory.class new file mode 100644 index 0000000..2de151a Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/NameHistory.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/NmsUtils.class b/bin/notifyz/hardcorefactions/utilities/utils/NmsUtils.class new file mode 100644 index 0000000..38a7ab3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/NmsUtils.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/ParticleEffect.class b/bin/notifyz/hardcorefactions/utilities/utils/ParticleEffect.class new file mode 100644 index 0000000..f1b329a Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/ParticleEffect.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/PersistableLocation.class b/bin/notifyz/hardcorefactions/utilities/utils/PersistableLocation.class new file mode 100644 index 0000000..4be1055 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/PersistableLocation.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/RandomUtils.class b/bin/notifyz/hardcorefactions/utilities/utils/RandomUtils.class new file mode 100644 index 0000000..d070f5b Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/RandomUtils.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/Reflection.class b/bin/notifyz/hardcorefactions/utilities/utils/Reflection.class new file mode 100644 index 0000000..927cb0f Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/Reflection.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/ServerHandler.class b/bin/notifyz/hardcorefactions/utilities/utils/ServerHandler.class new file mode 100644 index 0000000..387858e Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/ServerHandler.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/ServerParticipator.class b/bin/notifyz/hardcorefactions/utilities/utils/ServerParticipator.class new file mode 100644 index 0000000..56c036b Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/ServerParticipator.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/SignHandler$1.class b/bin/notifyz/hardcorefactions/utilities/utils/SignHandler$1.class new file mode 100644 index 0000000..b72c8a3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/SignHandler$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/SignHandler$SignChange.class b/bin/notifyz/hardcorefactions/utilities/utils/SignHandler$SignChange.class new file mode 100644 index 0000000..df4762a Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/SignHandler$SignChange.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/SignHandler.class b/bin/notifyz/hardcorefactions/utilities/utils/SignHandler.class new file mode 100644 index 0000000..6844412 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/SignHandler.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/SpamDetectEvent.class b/bin/notifyz/hardcorefactions/utilities/utils/SpamDetectEvent.class new file mode 100644 index 0000000..50dcee3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/SpamDetectEvent.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/SpigotUtils.class b/bin/notifyz/hardcorefactions/utilities/utils/SpigotUtils.class new file mode 100644 index 0000000..908940f Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/SpigotUtils.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/StaffPriority.class b/bin/notifyz/hardcorefactions/utilities/utils/StaffPriority.class new file mode 100644 index 0000000..832b7f3 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/StaffPriority.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/TimeUtils$IntegerCountdown.class b/bin/notifyz/hardcorefactions/utilities/utils/TimeUtils$IntegerCountdown.class new file mode 100644 index 0000000..9c752df Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/TimeUtils$IntegerCountdown.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/TimeUtils$LongCountdown.class b/bin/notifyz/hardcorefactions/utilities/utils/TimeUtils$LongCountdown.class new file mode 100644 index 0000000..77d594c Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/TimeUtils$LongCountdown.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/TimeUtils.class b/bin/notifyz/hardcorefactions/utilities/utils/TimeUtils.class new file mode 100644 index 0000000..ba35dcc Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/TimeUtils.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/Tuple.class b/bin/notifyz/hardcorefactions/utilities/utils/Tuple.class new file mode 100644 index 0000000..2b536aa Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/Tuple.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/UUIDFetcher.class b/bin/notifyz/hardcorefactions/utilities/utils/UUIDFetcher.class new file mode 100644 index 0000000..2558cbd Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/UUIDFetcher.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/utils/Utils.class b/bin/notifyz/hardcorefactions/utilities/utils/Utils.class new file mode 100644 index 0000000..2d65570 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/utils/Utils.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/BlockFiller.class b/bin/notifyz/hardcorefactions/utilities/visualise/BlockFiller.class new file mode 100644 index 0000000..a74610a Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/BlockFiller.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/ProtocolLibHook.class b/bin/notifyz/hardcorefactions/utilities/visualise/ProtocolLibHook.class new file mode 100644 index 0000000..b83a33d Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/ProtocolLibHook.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualBlock.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualBlock.class new file mode 100644 index 0000000..d43715e Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualBlock.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualBlockData.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualBlockData.class new file mode 100644 index 0000000..6f28f02 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualBlockData.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$1$1.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$1$1.class new file mode 100644 index 0000000..4c29ecd Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$1$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$1.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$1.class new file mode 100644 index 0000000..6577318 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$2$1.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$2$1.class new file mode 100644 index 0000000..9928a40 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$2$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$2.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$2.class new file mode 100644 index 0000000..c69fdd9 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$2.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$3$1.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$3$1.class new file mode 100644 index 0000000..8c28879 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$3$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$3.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$3.class new file mode 100644 index 0000000..0140a5a Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$3.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$4$1.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$4$1.class new file mode 100644 index 0000000..a5aae00 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$4$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$4.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$4.class new file mode 100644 index 0000000..6fe862b Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$4.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$5$1.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$5$1.class new file mode 100644 index 0000000..9b6823e Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$5$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$5.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$5.class new file mode 100644 index 0000000..53b1ec7 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType$5.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualType.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType.class new file mode 100644 index 0000000..8b89202 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualType.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualiseHandler.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualiseHandler.class new file mode 100644 index 0000000..3d41bdd Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualiseHandler.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/VisualiseUtil.class b/bin/notifyz/hardcorefactions/utilities/visualise/VisualiseUtil.class new file mode 100644 index 0000000..2bc6566 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/VisualiseUtil.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/WallBorderListener$1.class b/bin/notifyz/hardcorefactions/utilities/visualise/WallBorderListener$1.class new file mode 100644 index 0000000..438645e Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/WallBorderListener$1.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/WallBorderListener$2.class b/bin/notifyz/hardcorefactions/utilities/visualise/WallBorderListener$2.class new file mode 100644 index 0000000..defa22a Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/WallBorderListener$2.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/WallBorderListener.class b/bin/notifyz/hardcorefactions/utilities/visualise/WallBorderListener.class new file mode 100644 index 0000000..35a38b5 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/WallBorderListener.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/protocol/BlockDig.class b/bin/notifyz/hardcorefactions/utilities/visualise/protocol/BlockDig.class new file mode 100644 index 0000000..d51aa70 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/protocol/BlockDig.class differ diff --git a/bin/notifyz/hardcorefactions/utilities/visualise/protocol/BlockPlace.class b/bin/notifyz/hardcorefactions/utilities/visualise/protocol/BlockPlace.class new file mode 100644 index 0000000..25aa2d8 Binary files /dev/null and b/bin/notifyz/hardcorefactions/utilities/visualise/protocol/BlockPlace.class differ diff --git a/bin/plugin.yml b/bin/plugin.yml new file mode 100644 index 0000000..6cf4f91 --- /dev/null +++ b/bin/plugin.yml @@ -0,0 +1,345 @@ +name: HCF +main: notifyz.hardcorefactions.HardcoreFactionsPlugin +version: 1.0 +author: InvisRaidinq,RyanRoycroft +description: HCF core made for Exempvp network. +depends: [Vault, ProtocolLib, WorldEdit, CustomSpigot, DTC, DeathMessages] +commands: + kit: + sale: + reboot: + oinvsee: + aliases: [oinv] + ffa: + freezeall: + teamspeak: + aliases: [ts3, ts] + description: Command used to check teamspeak3 ip. + store: + aliases: [buy, purchase] + description: Command used to found server store. + website: + aliases: [web, forum, forums] + description: Command used to found server website. + youtube: + aliases: [yt] + description: Command used to see youtube information. + famous: + aliases: [] + description: Command used to see famous information. + hat: + aliases: [] + description: Command used to set item to your head. + spawn: + aliases: [] + description: Command used to teleport to spawn. + bottle: + aliases: [] + description: Command used to store XP + hcfcore: + aliases: [] + description: Command used to check author name etc. + world: + aliases: [] + description: Command used to switch worlds. + request: + aliases: [] + description: Command used to request help. + report: + aliases: [] + description: Command used to report player. + list: + aliases: [online, who, onlineplayers] + description: Command used to check online players. + slowchat: + aliases: [] + description: Command used to slowchat. + warp: + aliases: [] + description: Command used to set warps etc. + message: + aliases: [m, msg, tell, whisper, w] + description: Messsage an online player. + messagespy: + aliases: [ms, msgspy, pmspy, whisperspy, privatemessagespy, tellspy, spy, socialspy] + description: Command used to spy on pm's of players. + reply: + aliases: [r] + description: Reply to a player message. + ignore: + aliases: [] + description: Command used to ignore players. + togglemessages: + aliases: [togglepm, toggleprivatemessages] + description: Disable private messages. + sounds: + aliases: [togglesounds] + description: Disable sounds from messages. + togglechat: + aliases: [tgc, toggleglobalchat] + description: Toggles global chat visibility on or off. + lag: + aliases: [] + description: Command used to check is server lagging. + giveaway: + aliases: [gw] + description: Command used to start giveaways. + disablechat: + aliases: [togglechat, offchat] + description: Command used to disable chat. + uptime: + aliases: [] + description: Command used to check server uptime. + settings: + aliases: [config, configuration, options] + description: Command used to toggle options + top: + aliases: [] + description: Command used to teleport to the top. + playtime: + aliases: [pt, playt, ptime] + description: Command used to check total player time. + give: + aliases: [i] + description: Command used to give you items. + removeperm: + aliases: [rp] + description: Remove permissions from a user. + teleport: + aliases: [tp] + description: Command used to teleport to the player. + tphere: + aliases: [teleporthere, s] + description: Command used to teleport player to player. + fly: + aliases: [flight] + description: Command used to toggle flight. + gamemode: + aliases: [gm, gamem, gmode] + description: Command used to see gamemode help. + gamemodes: + aliases: [gms] + description: Command used to toggle gamemode survival. + gamemodec: + aliases: [gmc] + description: Command used to toggle gamemode creative. + gamemodea: + aliases: [gma] + description: Command used to toggle gamemode adventure. + feed: + aliases: [fed] + description: Command used to feed player. + heal: + aliases: [health] + description: Command used to heal player. + invsee: + aliases: [] + description: Command used to see inventory of player. + tppos: + aliases: [] + description: Command used to teleport to the position. + teleportall: + aliases: [tpall] + description: Command used to teleport all to you. + broadcast: + aliases: [bc, bcast, broadc] + description: Command used to broadcast things. + rename: + aliases: [newname] + description: Command used to rename items. + god: + aliases: [godmode] + description: Command used to toggle god mode. + enchant: + aliases: [ench] + description: Command used to enchant items. + kill: + aliases: [] + description: Command used to kill players :3. + info: + aliases: [info] + description: Show information about a user. + focus: + aliases: [target] + description: Command used to focus players. + endportal: + aliases: [portal, lightportal] + description: Command used to enable endportals of players(staff only). + platinum: + aliases: [] + description: Command used to revive other players. + gold: + aliases: [] + description: Command used to revive other players. + spawner: + aliases: [givespawner] + description: Command used to give spawner. + coords: + aliases: [coordinates] + description: Command used to check event coordinates. + cobble: + aliases: [cobblestone, stone, togglecobble] + description: Command used to stop pick-up cobblestone. + rec: + aliases: [recording] + description: Command used to start/stop recording. + newvideo: + aliases: [newv, nvideo, nw] + description: Command used publish your new video. + lff: + aliases: [lookingforfaction] + description: Command used to help player to found faction. + glow: + aliases: [glowstone, glowm, glowstonemountain] + description: Command used to make Glowstone Mountain region. + set: + aliases: [setlocation] + description: Command used to set server locations. + help: + aliases: ["?", version] + description: Command used to see Information's of the server. + stats: + aliases: [status, ores, ore] + description: Command used to check your status. + staffmode: + aliases: [staff, mod, modmode, h, hackermode] + description: Command that gives you staff items and scoreboard. + freeze: + aliases: [ss] + description: Command used to freeze's player. + guifreeze: + aliases: [guiss] + description: Command used to gui-freeze's player. + staffchat: + aliases: [sc, schat, staffc] + description: Command used to chat with other staff members. + vanish: + aliases: [v] + description: Command used to hide staff. + conquest: + description: Command used to handle Conquest events. + economy: + aliases: [bal, money, eco, econ, balance] + description: Command used to modify the economy. + eotw: + aliases: [endoftheworld] + description: Sets if the server is in End of the World mode. + eotwrevive: + description: Command used by staff to revive players. + event: + description: Command used to manage minigame events. + team: + aliases: [f, fac, t] + description: Team related commands. + hcf: + aliases: [hardcorefactions, hcfactions] + restoreinventory: + aliases: [inv] + description: Restore inventory of player after death. + koth: + description: Make or delete KotH arenas. + lives: + description: Management of lives or deathbans. + location: + aliases: [loc] + description: Check the faction location of a player. + logout: + aliases: [disconnect] + description: Command to safely logout without an NPC spawning. + mapkit: + aliases: [viewkit] + description: Used to check the current map restrictions. + pay: + aliases: [p2p] + description: Allow players to pay money. + pvptimer: + aliases: [pvp, prot] + description: Command to enable or disable pvp timer protection. + regen: + description: Check ETA until a faction is able to regenerate DTR. + servertime: + description: Checks the date and time of server. + sotw: + aliases: [startoftheworld] + description: Command used to manage start of the world. + spawncannon: + aliases: [cannon, playercannon] + description: Shoots you into the warzone. + staffrevive: + aliases: [revive, srevive, staffr] + description: Command used by staff to revive players. + timer: + description: Command to manage timers. + togglecapzoneentry: + aliases: [togglecapentry] + description: Command used to hide or show capture zone entry messages. + togglefd: + aliases: [togglefounddiamond] + description: Command used to hide or show diamond alerts in chat. + mobdrops: + aliases: [togglemobdrops] + description: Command used to enable or disable mob drops pickup. + crowbar: + description: Give another player a crowbar + togglelightning: + aliases: [lightningtoggle, togglestrikes] + description: Toggles the lightning strikes for when a player dies. + togglesidebar: + aliases: [sidebartoggle, sidebar, hud, togglehud] + description: Toggles the scoreboard timers displayed on sidebar. + key: + description: Obtain keys to unlock awesome loot. + reclaim: + aliases: [] + description: Command used to claim donor perks. + chest: + aliases: [] + description: Command used to open chest in Safezone. + clearchest: + aliases: [] + description: Command used to open clearchest in Safezone. + disposal: + aliases: [] + description: Command used to open disposal. + savechests: + aliases: [] + description: Command used to open savechests. + workbench: + aliases: [] + description: Command used to open crafting table. + panic: + aliases: [] + description: Command used to get in panic mode. + skygear: + aliases: [] + description: Command used to get skygear perks. + setborder: + aliases: [] + description: Command used to set world border. + tc: + aliases: [tl, fc, teamcoordinates] + description: Command used to inform faction members your coordinates. + hidestaff: + aliases: [hstaff, staffhide] + description: Command used to hide staff from you. + speed: + aliases: [] + description: Command used to change speed of walk/fly. + more: + aliases: [moreitems] + description: Command used to change amount of your item in head. + back: + aliases: [] + description: Command used to teleport to your last location. + bardenergy: + aliases: [] + description: Command used to set bard energy. + fury: + aliases: [] + description: Command used to set fury points. + endevent: + aliases: [] + description: Command used to start EndEvent. + reclaimreset: + aliases: [resetreclaim] + description: Command used to start reset reclaim. \ No newline at end of file diff --git a/bin/reclaimsettings.yml b/bin/reclaimsettings.yml new file mode 100644 index 0000000..1aa62ff --- /dev/null +++ b/bin/reclaimsettings.yml @@ -0,0 +1,16 @@ +# You can use %PLAYER% for player name or %RANK% for rank name +# An example can be seen below +rankName: + name: 'RankName' # Put your rank name here + rankname: 'RankName' # Put your rank name here + commands: + - 'broadcast &c&l%PLAYER% &e&lhas reclaimed their %RANK% perks' + - 'example command1' + - 'example command2..' +rankName2: + name: 'RankName2' # Put your rank name here + rankname: 'RankName2' # Put your rank name here + commands: + - 'broadcast &c&l%PLAYER% &e&lhas reclaimed their %RANK%2 perks' + - 'example command1' + - 'example command2..' \ No newline at end of file diff --git a/bin/timers.yml b/bin/timers.yml new file mode 100644 index 0000000..e69de29 diff --git a/src/balances.yml b/src/balances.yml new file mode 100644 index 0000000..18e0854 --- /dev/null +++ b/src/balances.yml @@ -0,0 +1 @@ +balances: {} diff --git a/src/config.cdl b/src/config.cdl new file mode 100644 index 0000000..c8a74cc --- /dev/null +++ b/src/config.cdl @@ -0,0 +1,306 @@ +// HCF Configuration File +// Be sure to double-check your config +// Credits - Techcable's Configuration API + +// If the plugin should attempt to limit entities to reduce lag. +// currently what this does is allow only 25 entities in one chunk. +handleEntityLimiting = true + +// If arrows shot from a bow with infinity should be removed +// when they land to reduce entity lag. +removeInfinityArrowsOnLand = true + +// The maximum Beacon strength level +beaconStrengthLevelLimit = 1 + +// If boats should not be allowed to be placed on land. +disableBoatPlacementOnLand = true + +enderpearlGlitching { + // If this plugin should try and block Enderpearl glitching. + enabled = true + + // If the enderpearl should be refunded if the player was detected. + refund = true +} + +// If enderchests should be disabled. +disableEnderchests = true + +// If beds cannot be placed in the Nether. +preventPlacingBedsNether = false + +// Timezone to use for events and stuff +serverTimeZone = "America/New_York" + +// The speed at which items in furnaces cook, set to 1.0 for default. +furnaceCookSpeedMultiplier = 6.0 + +brewingSpeedMultiplier = 6.0 + +// If you should be able to bottle exp by crafting a glass bottle. +bottledExp = true + +// If you should be able to de-enchant books by right clicking enchant tables. +bookDeenchanting = true + +// If death signs should spawn upon deaths. +deathSigns = true + +// If death signs should thaw upon deaths. +deathLightning = true + +// The current number of the map. +mapNumber = 1 + +// If the server is in a kit map mode. +kitMap = false + +// If ally damage should be prevented or just warn the attacker. +preventAllyDamage = true + +economy { + // The amount of money a player starts off with. + startingBalance = 0 +} + +spawners { + // If players should not be able to break spawners in the Nether. + preventBreakingNether = true + + // If players should not be able to place spawners in the Nether. + preventPlacingNether = true +} + +expMultiplier { + // The multipliers to set for experience, set to 1.0 to normalise as vanilla. + global = 2.0 + fishing = 2.0 + smelting = 2.0 + lootingPerLevel = 1.5 + luckPerLevel = 1.5 + fortunePerLevel = 1.5 +} + +scoreboard { + sidebar { + // The title of the sidebar, use {MAP_NUMBER} as a + // placeholder with & as colour codes. + title = "&9&lMC-Market &7(Map {MAP_NUMBER})" + + // If this plugin utilises the sidebar. + enabled = true + } + + nametags { + // If this plugin will utilise nametags. + enabled = true + } +} + +combatlog { + // If this plugin will protect from combat-logging. + enabled = true + + // The ticks for when a combat logger NPC should despawn. + despawnDelayTicks = 900 +} + +warzone { + // The radius of the warzone. + radiusOverworld = 1000 + radiusNether = 1000 +} + +factions { + conquest { + // How much points should a faction lose when a player dies in Conquest. + pointLossPerDeath = 20 + + // How much points should a faction need to win Conquest. + requiredVictoryPoints = 300 + + // If negative points are possible during conquest. + allowNegativePoints = true + } + + roads { + // If players are allowed to claim next to roads + allowClaimsBesides = true + } + + // List of faction names that cannot be used. + disallowedFactionNames = [ + "EOTW", + "MOKU" + ] + + home { + // The time in seconds to teleport to faction home, -1 to disable, 0 for instant + teleportDelay { + NETHER = 30 + THE_END = -1 + NORMAL = 10 + } + + // The maximum height to set a faction home, use -1 to ignore this. + maxHeight = -1 + + // If faction homing in enemy territory should be allowed. + allowTeleportingInEnemyTerritory = true + } + + // Minimum amount of characters a faction name must be. + nameMinCharacters = 3 + + // Maximum amount of characters a faction name must be. + nameMaxCharacters = 15 + + // Maximum amount of members a faction can own. + maxMembers = 20 + + // Maximum amount of claims a faction can own. + maxClaims = 8 + + // Maximum amount of allies a faction can have. + maxAllies = 0 + + subclaim { + // The minimum characters a player can name a subclaim. + nameMinCharacters = 3 + + // The maximum characters a player can name a subclaim. + nameMaxCharacters = 16 + } + + dtr { + regenFreeze { + // The minutes for faction DTR regen freeze to + // end not including any multipliers, etc. + baseMinutes = 40 + + // How much longer the DTR freeze should be for factions with + // more members. Set to 0 to disable. + minutesPerMember = 2 + } + + // The minimum DTR a faction can have. + minimum = -50 + + // The maximum DTR a faction will regenerate to. + maximum = 6.5 + + // Time in milliseconds between a DTR update. + millisecondsBetweenUpdates = 45000 + + // The DTR again when DTR updates. + incrementBetweenUpdates = 0.1 + } + + relationColours { + // The nametag and chat colours to show for faction relations. + wilderness = "DARK_GREEN" + warzone = "RED" + teammate = "DARK_GREEN" + ally = "AQUA" + enemy = "RED" + road = "RED" + safezone = "GREEN" + archerTagged = "BLUE" + combatTag = "DARK_RED" + enderPearl = "LIGHT_PURPLE" + invincibility = "DARK_GREEN" + gapple = "DARK_PURPLE" + logout = "GREEN" + stuck = "GREEN" + teleport = "DARK_AQUA" + + } + + joinNewFactionDelaySeconds = 15 +} + +deathban { + // The regular deathban duration. + baseDurationMinutes = 60 + + // The seconds before kicking after showing the user + // the respawn screen from a deathban. + respawnScreenSecondsBeforeKick = 15 +} + +end { + // If the end should be opened. + open = true + + // The location of the spawn point when leaving end by End Portal. + exitLocation = "world,0.5,75,0.5,0,0" + + // If fire should be extinguished when leaving the end through an End Portal. + extinguishFireOnExit = true + + // If strength should be removed when entering the end through an End Portal. + removeStrengthOnEntrance = true +} + +eotw { + chatSymbolPrefix = " \u2605" + chatSymbolSuffix = "" + + // List of UUIDs that capped last maps EOTW. + lastMapCapperUuids = [ + ] +} + +// The maximum levels an enchantment can be. +enchantmentLimits = [ + "PROTECTION_ENVIRONMENTAL = 1", + "PROTECTION_FIRE = 3", + "SILK_TOUCH = 1", + "DURABILITY = 3", + "PROTECTION_EXPLOSIONS = 3", + "LOOT_BONUS_BLOCKS = 3", + "PROTECTION_PROJECTILE = 3", + "OXYGEN = 3", + "WATER_WORKER = 1", + "THORNS = 0", + "DAMAGE_ALL = 1", + "ARROW_KNOCKBACK = 1", + "KNOCKBACK = 0", + "FIRE_ASPECT = 0", + "LOOT_BONUS_MOBS = 3", + "LUCK = 3", + "ARROW_DAMAGE = 3", + "LURE = 3" +] + +// The maximum levels a potion can be brewed to. +potionLimits = [ + "STRENGTH = 0", + "INVISIBILITY = 1", + "REGEN = 0", + "WEAKNESS = 0", + "INSTANT_DAMAGE = 0", + "SLOWNESS = 1", + "POISON = 1" +] + +subclaimSigns { + // Protects against members that are not on the sign opening. + private = true + + // Protects against any non-officer opening. + captain = true + + // Protects against any non-leader opening. + leader = false + + // If subclaim protected objects should be protected from hopper + // items too, disabling this may increase performance. + hopperCheck = true +} + +whitelist { + // Changes the vanilla whitelist message. + message = "&cThe server is currently locked, try again soon." +} \ No newline at end of file diff --git a/src/config.yml b/src/config.yml new file mode 100644 index 0000000..e0055de --- /dev/null +++ b/src/config.yml @@ -0,0 +1,778 @@ +revive-settings: + gold: + use: "hcf.revive.gold" + prefix: "&6[GOLD] " + name: "GOLD" + minutes-cooldown: 30 + seconds-cooldown: 1800 + platinum: + use: "hcf.revive.platinum" + prefix: "&b[PLATINUM] " + name: "PLATINUM" + minutes-cooldown: 60 + seconds-cooldown: 3600 + +revive-messages: + successfully-revived: "&cYou have successfully revived '%target%'" + broadcast: "&c%prefix% &8%player% &7used his %rank% rank to revive &8%target%" + cooldown: "%prefix% &eYou still have cooldown &7(%cooldown%&7) &efor revive %name%!" +chat: + use-protocol-lib: true + spam-cooldown: 5 + disabled: + millis: 0 + slowed: + millis: 0 + slowed-delay: 15 + alliance: + prefix: "\xa7b(Ally-Chat) %player%: %message%" + faction: + prefix: "\xa72(Team-Chat) %player%: %message%" + public: + prefix-faction: "\xa76[%tag%\xa76] %player%\xa77: \xa7f%message%" + prefix-no-faction: "%player%\xa77: \xa7f%message%" +warp-manager: + warp-delay-millis: 2000 +auto-save: + enabled: true + time: "15min" + command: "save-all" + message: "&cSaving all data has finished." +anvil-spam-fixer: + enabled: true + violation: 3 + messages: + flag: "&c%PLAYER% &chas been flagged for anvil spamming &8(&c%VELOCITY%&fVL&8) (perm: hcf.anvilspam.alert)" +kitmap-gui: + enabled: true + title: "&6&lHCF &c[Map 1]" + id-animation: + - 7 + - 8 + - 0 + - 15 + - 12 +kitmap-selector: + enabled: true +border: + worldBorder: 3000 + netherBorder: 1000 + endBorder: 1500 +border-messages: + no-bucket-fill: "&cYou cannot fill buckets past the border." + no-bucket-empty: "&cYou cannot empty buckets past the border." + no-blocks-place: "&cYou cannot place blocks past the border." + no-blocks-break: "&cYou cannot break blocks past the border." + border-no-go: "&cYou cannot go past the border." + border-portal-no-go: "&cThis portals travel location was over the border. It has been moved inwards." +death-messages: + combat-logger: "&8(&cCombat-Logger&8) &e%logger%&4[%logger-kills%] &ehas been slain by %killer%&4[%killer-kills%]" + causes: + block-explosion: "&c%player%&4[%player-kills%] &ewas blown to death." + contact: "&c%player%&4[%player-kills%] &ewas slain by a, a, a &a&lCactus&e?" + drowning: "&c%player%&4[%player-kills%] &edrowned." + entity-attack: + player: "&c%player%&4[%player-kills%] &ewas slain by &c%killer%" + player-item: "&c%player%&4[%player-kills%] &ewas slain by &c%killer%&4[%killer-kills%] &eusing &c%killer-hand%" + player-no-item: "&c%player%&4[%player-kills%] &ewas slain by &c%killer%&4[%killer-kills%]" + entity-explosion: "&c%player%&4[%player-kills%] &edied in a explosion." + fall: "&c%player%&4[%player-kills%] &ehit the ground to hard." + falling-block: "&c%player%&4[%player-kills%] &edied to a falling block." + fire: "&c%player%&4[%player-kills%] &eforgot to bring a Fire Resistance potion." + fire-tick: "&c%player%&4[%player-kills%] &eforgot to bring a Fire Resistance potion.." + lava: "&c%player%&4[%player-kills%] &eforgot to bring a Fire Resistance potion." + lightning: "&c%player%&4[%player-kills%] &ewas struck by &fLightning&e." + magic: "&c%player%&4[%player-kills%] &edied to a magic." + melting: "&c%player%&4[%player-kills%] &edied." + poison: "&c%player%&4[%player-kills%] &edied to a poison." + projectile: + unknown: "&c%player%&4[%player-kills%] &edied." + bow-item: "&c%player%&4[%player-kills%] &ewas shot by &c%killer%&4[%killer-kills%]" + bow-item-distance: "&c%player%&4[%player-kills%] &ewas shot by &c%killer%&4[%killer-kills%] &eusing &c%killer-hand% &efrom &9&l%distance% blocks." + starvation: "&c%player%&4[%player-kills%] &eforgot to pack some lunch and starved to death." + suffocation: "&c%player%&4[%player-kills%] &esuffocated in a wall." + suicide: "&c%player%&4[%player-kills%] &ekilled himself." + thorns: "&c%player%&4[%player-kills%] &edied." + void: "&c%player%&4[%player-kills%] &efell into the void." + wither: "&c%player%&4[%player-kills%] &ewhitered away." + unknown: "&c%player%&4[%player-kills%] &edied." + custom: "&c%player%&4[%player-kills%] &edied." +skygear: + enabled: true + spawntoken: + cooldown: 120 + endportaltoken: + cooldown: 120 + coordinates: + x: 1500 + y: 75 + z: 1500 +throwable-cobwebs: + cooldown: 30 + despawn-after: 5 + vector-multiplier: 2 + cobweb-name: "&3ThrowableCobweb" +glowstone-mountain: + enabled: true + regeneration: 72000 + location: '[world,24.50070339453891,72.0,137.55239634209465]' +glowstone-mountain-messages: + regenerated: "&5Glowstone Mountain has been regenerated." + disabled: "&cGlowstone mountain is disabled." + set-disabled: "&cYou have disabled the Glowstone Mountain!" + set-enabled: "&aYou have enabled the Glowstone Mountain!" + set-location: "&aYou have set the location of Glowstone Mountain!" + faction-show-location: "&eLocation: set location in config" + reloaded: "&aYou have reloaded the config." +configuration: + server-name: "MC-Market" + teamspeak: "ts.mcmarket.com" + store: "store.buycraft.com" + website: "www.website.com" + starting-balance: 250 + famous-subscribers: 2000 + famous-videos: 2 + famous-views: 1000 + youtube-subscribers: 1000 + youtube-videos: 2 + youtube-views: 500 + splash-potion-velocity: 2.0 + use-dtc: false +deathmessages: + enabled: false + deathmessage-format: "%player%&4[%kills%&4]" +event-utilities: + timezone: "Europe/Ljubljana" + auto-run-scheduler: + enabled: true + time: "3h" + run-command: "event start %event%" + event-list: + - "Stronghold" + - "Palace" + - "Citadel" + - "Fury" + koth: + faction-color: "&9&l" + win-command: "key eventkey KOTH %key% %player% 2" + citadel: + faction-color: "&5&l" + win-command: "key eventkey CITADEL %key% %player% 2" + palace: + faction-color: "&e&l" + cap-time: "25min" + win-command: "key eventkey PALACE %key% %player% 2" + conquest: + faction-color: "&9&l" + win-command: "key eventkey CONQUEST %key% %player% 2" + fury: + faction-color: "&9&l" + switch-time: "1min" + cap-time: "30s" + required-points: 100 + point-loss-per-death: 10 + win-command: "key eventkey FURY %key% %player% 2" +faction-utilities: + elevators: + minecart: + enabled: true + combat-usage: false + sign: + enabled: true + enemy-claim-usage: false + combat-usage: false + end-portal-faction: + deathban: false + safezone: false + player-faction: + dtr-loss-per-death: 1.0 + sotw: + auto-inventory: false +killstreaks: + enabled: true + broadcast-message: "&c&l%player% &ehas reached kill streak of &c&l%killstreak% &eand received &c&l%item%" + items: + DontRemoveThis: + name: "DontRemove" + command: "dont remove this its an example" + kills: 100000 +deathban: + deathban1: + permission: 'deathban.1' + time: 30m + deathban2: + permission: 'deathban.2' + time: 60m + deathban3: + permission: 'deathban.3' + time: 90m + deathban4: + permission: 'deathban.4' + time: 120m + deathban5: + permission: 'deathban.5' + time: 140m + deathban6: + permission: 'deathban.6' + time: 160m +classes: + class-equiped: + - '&bClass: &l%class% &7-->&a Enabled' + - '&bClass Info: www.website.com/%class%' + class-un-equiped: + - '&bClass: &l%class% &7-->&c Disabled' + archer: + enabled: true + use-colorful-armor: true + name: "Archer" + damage-percentage: 20 + speed-cooldown: 60 + equipment: + helmet: LEATHER_HELMET + chestplate: LEATHER_CHESTPLATE + leggings: LEATHER_LEGGINGS + boots: LEATHER_BOOTS + bard: + enabled: true + name: "Bard" + max-energy: 100 + energy-per-second: 1.0 + teammate-nearby: 25 + buff-cooldown: 10 + buff-duration: 5 + held-item-message: true + effect-message: + - '&7&m--------------------------------' + - ' &e&lEffect: %effect%' + - ' &e&lCost: %energycost%' + - '&7&m--------------------------------' + equipment: + helmet: GOLD_HELMET + chestplate: GOLD_CHESTPLATE + leggings: GOLD_LEGGINGS + boots: GOLD_BOOTS + miner: + enabled: true + name: "Miner" + invisibility-y: 30 + equipment: + helmet: IRON_HELMET + chestplate: IRON_CHESTPLATE + leggings: IRON_LEGGINGS + boots: IRON_BOOTS + rogue: + enabled: true + name: "Rogue" + speed-cooldown: 1 + jump-cooldown: 1 + equipment: + helmet: CHAINMAIL_HELMET + chestplate: CHAINMAIL_CHESTPLATE + leggings: CHAINMAIL_LEGGINGS + boots: CHAINMAIL_BOOTS + ghost: + enabled: true + name: "Ghost" + mode-cooldown: 48 + equipment: + helmet: CHAINMAIL_HELMET + chestplate: DIAMOND_CHESTPLATE + leggings: CHAINMAIL_LEGGINGS + boots: DIAMOND_BOOTS +classes-messages: + archer: + cannot-tag-archers: "&eYou cannot archer tag other archers." + speed-cooldown: "&cYou cannot use Archer speed for another &c&l%cooldown%" + bard: + cannot-equip-class: "&cYou cannot equip Bard Class whilst PVP Protected." + energy-announcer: "&b&lBard energy is now at: &a%energy%" + buff-used: "&eYou have just used &aBard Buff ðat cost you &l%cost% &eof your Energy" + buff-cooldown: "&cYou cannot use this Bard buff for another %cooldown% seconds." + buff-in-safezone: "&cYou may not use bard buffs in safe-zones." + no-enough-energy: "&cYou need at least &l%cost% &cenergy to use this Bard buff, whilst you only have %energy%." + ghost: + damage-near: "&eGhoster has taken damage in stealth mode near you: &7(20x20)" + cooldown: "&cYou cannot use Ghost mode for another %cooldown% seconds." + normal-mode: "&eYou are now in &aNormal &emode." + stealth-mode: "&eYou are now in &7Stealth &emode." + power-mode: "&eYou are now in &cPower &emode &7&o(5 seconds)&e." + miner: + invisibility-added: "&eMiner &6invisibility &ehas been added." + invisibility-removed: "&eMiner &6invisibility &ehas been removed." + rogue: + backstabbed-you: "&c%player% &ehas backstabbed you." + you-backstabbed: "&eYou have backstabbed &c%player%&e." + speed-cooldown: "&cYou cannot use Rogue speed for another %cooldown%." + jump-cooldown: "&cYou cannot use Rogue jump for another %cooldown%." +staffmode: + enabled: true + scoreboard-lines: true + items: + teleportation: + item: COMPASS + amount: 1 + data: 0 + name: "&bTeleport Compass" + lore: + - "&7Right click block: Move through" + - "&7Left click: Move to block in line of sight" + slot: 0 + inspection: + item: BOOK + amount: 1 + data: 0 + name: "&bInspection Tool" + lore: + - "&7Right click to inspect player inventory" + slot: 1 + freeze: + item: ICE + amount: 1 + data: 0 + name: "&bFreeze Player" + lore: + - "&7Right click to freeze player" + slot: 4 + worldedit: + item: WOOD_AXE + amount: 1 + data: 0 + name: "&bWorldEdit Wand" + lore: + - "&7Use this to change blocks" + slot: 2 + xrayer-gui: + item: DIAMOND_PICKAXE + amount: 1 + data: 0 + name: "&bXrayer Gui" + lore: + - "&7Right click to open inventory with miners" + slot: 6 + random-teleportation: + item: RECORD_10 + amount: 1 + data: 0 + name: "&bRandom Teleport" + lore: + - "&7Right click to random teleport" + slot: 8 + staff-gui: + item: SKULL_ITEM + amount: 1 + data: 3 + name: "&bOnline Staff" + lore: + - "&7Right click to random teleport" + slot: 3 + vanish-enabled: + item: INK_SACK + amount: 1 + data: 10 + name: "&bVanished: &aTrue" + lore: + - "&7Right click to disable vanish" + slot: 7 + vanish-disabled: + item: INK_SACK + amount: 1 + data: 8 + name: "&bVanished: &cFalse" + lore: + - "&7Right click to enable vanish" + slot: 7 +scoreboard: + archer-timer: "Archer Mark" + archer-time: "10s" + archer-color: "&e&l" + combat-timer: "Spawn Tag" + combat-time: "30s" + combat-color: "&c&l" + enderpearl-timer: "Enderpearl" + enderpearl-time: "16s" + enderpearl-color: "&3&l" + gapple-timer: "Golden Apple" + gapple-time: "6h" + gapple-color: "&6&l" + apple-timer: "Apple" + apple-time: "30s" + apple-color: "&c&l" + warmup-timer: "Warmup" + warmup-color: "&a&l" + home-timer: "Home" + home-time: "10s" + home-color: "&9&l" + logout-timer: "Logout" + logout-time: "25s" + logout-color: "&4&l" + pvp-timer: "PvP Timer" + pvp-time: "1h" + pvp-color: "&a&l" + stuck-timer: "Stuck" + stuck-time: "3min" + stuck-color: "&4&l" + koth-color: "&9&l" + palace-color: "&6&l" + dtc-color: "&2&l" + focus-nametag-color: "&5&l" +scoreboard-lines: + bars: true + kitmap: + statistics: "&3&lStatistics" + balance: " &7\xbb &bBalance&7: &f%balance%" + kills: " &7\xbb &bKills&7: &f%kills%" + deaths: " &7\xbb &bDeaths&7: &f%deaths%" + killstreaks: " &7\xbb &bKillStreak&7: &f%killstreak%" + class-name: "&e&lClass&7: &c%class%" + stattrak: " &8\xbb &3&lStatTrak&7: &c%kills%" + cobwebs: " &8\xbb &6&lCobwebs&7: &c%cooldown%" + destroy-the-core: "&2&l%dtc-name%&7: &a%points%/%maxpoints%" + miner: + diamonds: " &6» &bDiamonds&7: &c%diamonds%" + cobble-enabled: " &6» &bCobble&7: &aTrue" + cobble-disabled: " &6» &bCobble&7: &cFalse" + invisibility-enabled: " &6» &bInvisible&7: &aTrue" + invisibility-disabled: " &6» &bInvisible&7: &cFalse" + bard: + buff-delay: "&a&lBuff Delay&7: &c%cooldown%" + bard-energy: "&b&lBard Energy&7: &c%energy%" + archer: + speed-cooldown: " &6» &eSpeed&7: &c%cooldown%" + rogue: + speed-cooldown: " &6» &eSpeed&7: &c%cooldown%" + jump-cooldown: " &6» &eJump&7: &c%cooldown%" + ghost: + normal-mode: "&aNormal" + stealth-mode: "&7Stealth" + power-mode: "&c&lPower" + active-mode: " &6\xbb &eMode&7: %mode%" + cooldown: " &6\xbb &eCooldown&7: &c%cooldown%" + staff-mode: + vanish-enabled: " &6%doublearrow% &eVanished&7: &aTrue" + vanish-disabled: " &6%doublearrow% &eVanished&7: &cFalse" + chat-mode-staff: " &6%doublearrow% &eChat&7: &aStaffChat" + chat-mode-global: " &6%doublearrow% &eChat&7: &cGlobalChat" + online: " &6%doublearrow% &eOnline&7: &c%online%" + ticks-per-second: " &6%doublearrow% &eTPS&7: &c%tps%" + eotw: + beginning: " &8» &cEOTW begins in&7: &c%time%" + cappable: " &8» &cCappable in&7: &c%time%" + sotw: + title: "&a&lStart of the World" + time-left: " &8» &c%time%" + fury: + title: "&6&lFury Event &7(%fury%)" + cap-time: "&e%formattedtime%" + switch-time: "&e%switchtime%" + leaderboard: "&6%count%. &e%faction%&7: &e%points% %difference%" +cmd-messages: + no-permission: "&cYou don't have access to this command." + join-message: + - '&7&m%line%' + - '&eWelcome to %title%' + - " &6\xbb &eFactions Size: &7%factionsinfo%" + - " &6\xbb &eMap Kit: &7Protection: %protection% / Sharpness: %sharpness%" + - " &6\xbb &eTeamspeak: &7%teamspeak%" + - " &6\xbb &eWebsite: &7%website%" + - '&7&m%line%' + - '&m' + cobble-disabled: "&7You have disabled cobble picking." + cobble-enabled: "&7You have enabled cobble picking." + coordinates: + - '&7&m--------------------------------' + - ' &e&lUse config.yml to edit coordinations' + - '&7&m--------------------------------' + focus-no-yourself: "&7You can't focus yourself!" + focus-no-faction: "&7You are not in a team!" + focus-target-no-faction: "&7Target is not in a team!" + focus-player-not-online: "&cThat player is not online." + focused-target: "&b&l%target% &7has been focused by &b&l%player%" + hidestaff-show: "&aYou will now be able to see the Staff." + hidestaff-hide: "&cYou will now not be able to see the Staff." + unfocused-target: "&b&l%player% &7has unfocused %target%." + logout-started: "&cYou are &4&lLoging out &cin 30 seconds.." + logout-already-active: "&cYour &4&lLogout &ctimer is already active." + mobdrops-enabled: "&7You have enabled mobdrops picking." + mobdrops-disabled: "&7You have disabled mobdrops picking." + playtime: "&6%target% &ehas been playing for &6%time% ðis map." + staffmode-enabled: "&eYou have enabled &6StaffMode" + staffmode-disabled: "&eYou have disabled &6StaffMode" + staffrevive-target-not-deathbanned: "&c%target% is not deathbanned" + staffrevive-target-revived: "&c%target% &ehas been revived." + request-cooldown: "&cYou still have cooldown %time% for using request" + request-message: "&7[REQUEST] &6&l%player% &chas requested help: &6&l%message%" + report-cooldown: "&cYou still have cooldown for %time%" + report-no-reason: "&cPlease specify reason." + report-message: "&c&lREPORT > &6%reporter% &chas reported &6%hacker% &cfor &6%reason%" + alert-message: "&c&lALERT > %message%" + feed-message: "&eYou have fed yourself" + flight-enabled: "&eYou have enabled your flight." + flight-disabled: "&eYou have disabled your flight." + freeze-no-yourself: "&cYou cannot freeze yourself" + freeze-no-staffmember: "&cYou cannot freeze staffmember." + freeze-player-not-found: "&cPlayer named %target% was not found." + freeze-message: + - "&8&m%line%" + - "" + - "" + - "&6You have been &cFROZEN." + - "&6Join our &cteamspeak, you have 3 minutes." + - "" + - "" + - "&8&m%line%" + invsee-player-not-found: "&cPlayer not found." + invsee-error: "&cERROR: You cannot modify inventory of player that are same or higher ranks than you." + list-message: "&cThere is currently %onlineplayers% online players out of %maxplayers%" + lff-message: + - '&7&m--------------------------------' + - '&m' + - '&6%player% &eis looking to join &6&lFACTION' + - '&eYou can also use placeholder %playerdisplayname%!' + - '&7&m--------------------------------' + removeperm-message: "&aSuccessfully removed %target%'s permissions!" + reset-reclaim-message: "&cYou have succesfully reset %target%'s reclaim settings." + reclaim-already: "&cYou have already reclaimed your donator perks!" + reclaim-no-rank: "&cYou do not have anything to reclaim!" + revive-broadcast: "&7 » &c&l%player% &eused their Diamond rank to revive %target%" + revive2-broadcast: "&7 » &c&l%player% &eused their Gold rank to revive %target%" + rename-message: "&aSuccessfully renamed item to: %name%" + panic-message: + - "&8&m----------------" + - "" + - "&4&l%player% &chas requested Panic Assistance!" + - "" + - "&8&m----------------" + spawn-teleport-message: "&aYou have been teleported to Spawn." + spawner-received: "&7You have received &c%spawner% spawner." + teleport-top-message: "&cYou have been teleported to the top." + vanish-enabled: "&7You have enabled your vanish mode." + vanish-disabled: "&7You have disabled your vanish mode." + lives-check-deathban: "&c%target% is not deathbanned." + lives-clear-deathbans: "&aAll deathbans have been successfully wipped." + lives-revive-not-deathbanned: "&c%target% is not deathbanned." + lives-revive-kitmap-on: "&cYou cannot revive players during KitMap" + lives-revive-eotw-on: "&cYou cannot revive players during End of the World" + lives-revive-enemy: "&cYou have used one life to revive:&r %target%" + lives-revive-teammate: "&cYou have used one life to revive:&r %target%" + lives-set-error: "&c%argument% is not a number." + lives-set-message: "&cYou have set %target%'s lives to %amount%" + bed-bombing-portal: "&cYou may not bedbomb near portal" + book-deenchant: "&eYou have reversed book's form." + crowbar-error: "&eYou can only use Crowbar in overworld." + crowbar-spawner-error: "This Crowbar has no more Spawner uses." + crowbar-endportal-error: "This Crowbar has no more Endportal uses." + deathban-eotw: "&cThanks for playing on our Map 1" + deathban-kick: "&cDeathbanned for %remaining% (%reason%)" + deathban-active: "&cYou have died because %reason% at %location% (%remaining%)" + deathban-active-with-lives: "&cYou have died because %reason% at %location% (%remaining%) You have %lives% lives, reconnect in %livesdelay%" + deathban-used-life: "You have used life to bypass deathban, you have now %lives% lives." + safezone-enderpearl-error: "&cYou may not pearl into the Safezones, your pearl has been refunded." + safezone-attack-error: "&cYou cannot attack players in Safezone" + safezone-out-attack-error: "&cYou cannot attack players that are in Safezone" + staff-connected: "&a&lStaff Online: &f%player%" + staff-disconnected: "&a&lStaff Offline: &f%player%" + subclaim-already-placed: "&cThere is already subclaim on this block: %block%" + subclaim-player-error: "&cSubclaim requires at least one name inserted." + subclaim-leader-error: "&cOnly leader can create LEADER subclaims." + sotw-start-error: "%argument% &cis not valid duration" + sotw-already-active: "&cSOTW is already active, /sotw cancel to end it." + sotw-started: "&cYou have started SOTW for the %time%" + sotw-start: + - "&aStart of the world has started &7(%time%)" + sotw-end: + - "&cStart of the world has ended. &4&lGOOD LUCK TO EVERYONE!" + void-fix-message: "&aYou were saved from falling in void in Overworld." + eotw-started: "&4&LEOTW &chas started." + eotw-claim-error: "&cYou cannot claim during EOTW." +faction-messages: + faction-show: + header: + - ' %faction% &7(%faction-online%/%faction-online-max%) &8- &aHome: &c%home% &7[%status%]' + allies: + - ' &eAllies: %allies%' + leader: + - ' &eLeader: %leader%' + coleaders: + - ' &eCo-Leaders: %co-leaders%' + captains: + - ' &eCaptains: %captains%' + members: + - ' &eMembers: %members%' + use-announcement: false + announcement: + - ' &eAnnouncement: &c%announcement%' + balance: + - ' &eBalance: &c%balance% &eKills: &c%factionkills%' + use-lives: false + lives: + - ' &eLives: &c%lives%' + koth-captures: + - ' &eKoth Captures: &c%koths%' + conquest-captures: + - ' &eConquest Captures: &c%conquests%' + citadel-captures: + - ' &eCitadel Captures: &c%citadels%' + fury-captures: + - ' &eFury Captures: &c%furies%' + palace-captures: + - ' &ePalace Captures: &c%palaces%' + use-founded: false + founded: + - ' &eFounded at: &c%founded%' + dtr: + - ' &eDeaths Until Raidable: [%dtr%/%maxdtr%]' + regen: + - ' &eTime Until Regen: &c%regen%' + faction-member-format: "%color%%name%&e[&a%kills%&e]" + ally-format: "%ally% &e[%ally-online%/%ally-online-max%]" + factionless-prefix: "*" + entering: '&eNow entering: %tofaction%&7(%deathbantofaction%&7)' + leaving: '&eNow leaving: %fromfaction%&7(%deathbanfromfaction%&7)' + created: "&eTeam %faction% &ehas been created by %player%" + disbanded: "&eTeam %faction% &ehas been disbanded by %player%" + renamed: "&eTeam %faction% &ehas been renamed to %factionnewname%" + member-online: "&a&lMember Online: &7%player%" + member-offline: "&c&lMember Offline: &7%player%" + use-default-help: true + custom-help: + - '&6&m--------------------------------------------------' + - '&9&lTeam Help' + - '&7&m--------------------------------------------------' + - '&9General commands' + - '&e/f create &7- Create a new faction' + - '&e/f join &7- Join to faction' + - '&e/f leave &7- Leave your current faction' + - '&e/f home &7- Teleport to your faction home' + - '&e/f d &7- Give money to your faction' + - '&m' + - '&9Information commands' + - '&e/f who &7- Display faction information' + - '&e/f map &7- Show nearby claims' + - '&e/f seechunk &7- Show chunk' + - '&e/f list &7- Show list of factions online' + - '&e/f top &7- Get top factions' + - '&m' + - '&9Moderator commands' + - '&e/f invite &7- Invite player to your faction' + - '&e/f deinvite &7- Revoke player invitation' + - '&e/f showinvites &7- List all pending invites' + - '&e/f kick &7- Kick player from faction' + - '&e/f title <#> &7Set title to player' + - '&e/f announce &7- Announce message to your faction' + - '&e/f claim &7- Start claim for your faction' + - '&e/f claimline <#> &7- Claim <#> line for your faction' + - '&e/f autoclaim &7- Start autoclam for your faction' + - '&e/f sethome &7- Sethome for your faction' + - '&e/f w &7- Take money from your faction' + - '&m' + - '&9Leader commands' + - '&e/f mod &7- Promote/Demote members/moderators' + - '&e/f unclaim &7- Unclaim land' + - '&e/f unclaimall &7- Unclaim all your lands' + - '&e/f tag &7- Rename your faction' + - '&e/f disband &7- Disband your faction' + - '&7&m--------------------------------------------------' + - '&6&m--------------------------------------------------' + warzone: + block-place-build-radius: 300 + requires-both-quadrants: false +kit-messages: + use-default-help: false + custom-help: + - '' + - '' + - '&3&lYou can edit this' + - '&c&lIN CONFIG!' +koth-messages: + controlling: "&cYou are now controlling &4%koth%" + controlling-lost: "&cYou are no longer controlling &4%koth%" + control-lost: "&8[&4&LKOTH&8] &4%player% &chas lost control of &4%koth% &c(%remaining%)" + someone-controlling: "&8[&4&LKOTH&8] &cSomeone is controlling &4%koth% &c(%remaining%)" +conquest-messages: + faction-required: "&cYou must be in faction to contest Conquest." + conquest-started: "&8[&3&lCONQUEST&8] &3%conquest% &9can now be contested." + attempting-control: "&8[&3&lCONQUEST&8] &9Attempting to control %conquest% &7(%remaining%)" + player-knocked: "&8[&3&lCONQUEST&8] &3%player% &9was knocked off %conquest%" + gained-points: "&8[&3&lCONQUEST&8] &3%faction% &9has gained 1 point for capturing %conquest% &7(%points%/%maxpoints%)" + lost-points: "&8[&3&lCONQUEST&8] &3%faction% &9has lost %deathpoints% because %player% died &7(%points%/%maxpoints%)" +citadel-messages: + controlling: "&dYou are now controlling &5%citadel%" + controlling-lost: "&dYou are no longer controlling &5%citadel%" + control-lost: "&8[&5&lCitadel&8] &5%player% &dhas lost control of &5%citadel% &d(%remaining%)" + someone-controlling: "&8[&5&lCitadel&8] &dSomeone is controlling 5%citadel% &d(%remaining%)" +palace-messages: + controlling: "&eYou are now controlling &6%palace%" + controlling-lost: "&eYou are no longer controlling &6%palace%" + control-lost: "&8[&6&lPalace&8] &6%player% &ehas lost control of &6%palace% &e(%remaining%)" + someone-controlling: "&8[&6&lPalace&8] &eSomeone is controlling &6%palace% &e(%remaining%)" +fury-messages: + faction-required: "&cYou must be in faction to contest Fury." + fury-started: "&6&lFURY &8> &6%fury% &ecan now be contested." + capzone-switch: "&6&lFURY &8> &eCapzone has been switched. &6%capzone% &eis new capzone." + attempting-control: "&6&lFURY &8> &eAttempting to control %fury% &7(%remaining%)" + player-knocked: "&6&lFURY &8> &e%player% &6was knocked off %fury%" + gained-points: "&6&lFURY &8> &6%faction% &ehas gained 1 point for capturing %fury% &7(%points%/%maxpoints%)" + lost-points: "&6&lFURY &8> &e%faction% &6has lost %deathpoints% because %player% died &7(%points%/%maxpoints%)" +miscellaneous-messages: + vanish-place-error: "&cYou cannot place blocks while you are vanished." + vanish-break-error: "&cYou cannot break blocks while you are vanished." + vanish-drop-item-error: "&cYou cannot drop items while you are in StaffMode." + wall-timer-notifier: "&cThis wall will prevent you from entering %claim% whilst you have your %timer% timer." +chest-configuration: + size: 9 + autosave: 10 + silentAutosave: false + clearOnDeath: false + dropOnDeath: false + permission-use-chest: "chest.use" + permission-others-chest: "chest.admin" + permission-bypass: "chest.bypass" + permission-clear-chest: "chest.clear" + permission-others-clear: "chest.admin" + permission-use-disposal: "disposal.use" + permission-savechest: "chest.savechest" + permission-savechests: "chest.savechests" + permission-use-workbench: "workbench.use" +chest-messages: + prefix: "&c[Chests]" + no-permission: "You don't have enough permissions." + no-safezone: "&cYou can only use chests in safezone." + gamemode-error: "&cYou cannot use chests in gamemode!" + cleared-chest: "&aSuccessfully clear your chest." +tablist: + player-info: "&ePlayer Info" + kill-counter: "&7Kills: " + death-counter: "&7Deaths: " + + location: "&eLocation" + + faction-info: "&eFaction Info" + dtr: "&eDTR: " + faction-online: "&eOnline: " + faction-balance: "&eBalance: $" + hq: "&eHQ: " + + next-koth: "&eNext KOTH" + none-scheduled: "&7None Scheduled" + + title: "&6&lMC-Market" + players-online: "&ePlayers Online" + faction-name-color: "&e" + + faction-list: "&eFaction List" + + end-portals: "&eEnd Portals:" + end-portals-coordinates: "&71000, 1000" + end-portals-quadrants: "&7in each quadrant" + + kit: "&eKit:" + kit-info: "&7Prot 1, Sharp 1" + + border: "&eBorder:" + border-info: "&73000" + + online-players: "&ePlayers Online:" + online-players-info: "&7%online-players%" + + citadel-cappers: "&eCitadel Cappers:" + citadel-cappers-info: "&7NoLimit" \ No newline at end of file diff --git a/src/event-schedules.txt b/src/event-schedules.txt new file mode 100644 index 0000000..92fb6ce --- /dev/null +++ b/src/event-schedules.txt @@ -0,0 +1,2 @@ +# year,month,day,hour,minute:eventName (24 hour clock) +#2017,08,25,03,30,PM:Pagoda This would run event named 'Pagoda' at 3:30AM on the 25th of August, 2017. diff --git a/src/faction-users.yml b/src/faction-users.yml new file mode 100644 index 0000000..bf82e98 --- /dev/null +++ b/src/faction-users.yml @@ -0,0 +1 @@ +users: {} diff --git a/src/factions.yml b/src/factions.yml new file mode 100644 index 0000000..10bc293 --- /dev/null +++ b/src/factions.yml @@ -0,0 +1 @@ +factions: {} diff --git a/src/items.csv b/src/items.csv new file mode 100644 index 0000000..56c277d --- /dev/null +++ b/src/items.csv @@ -0,0 +1,7449 @@ +#version: TeamCity +#If you change this file, it will not be automatically updated after the next release. +#item,id,metadata +stone,1,0 +sstone,1,0 +smoothstone,1,0 +rock,1,0 +grass,2,0 +greendirt,2,0 +greenearth,2,0 +greenland,2,0 +dirt,3,0 +earth,3,0 +land,3,0 +grasslessdirt,3,1 +grasslessearth,3,1 +grasslessland,3,1 +podzol,3,2 +cobblestone,4,0 +cstone,4,0 +cobble,4,0 +wood,5,0 +plank,5,0 +woodenplank,5,0 +woodplank,5,0 +wplank,5,0 +plankwooden,5,0 +plankwood,5,0 +plankw,5,0 +oakplank,5,0 +oakwoodenplank,5,0 +oakwoodplank,5,0 +oakwplank,5,0 +oakplankwooden,5,0 +oakplankwood,5,0 +oakplankw,5,0 +oplank,5,0 +owoodenplank,5,0 +owoodplank,5,0 +owplank,5,0 +oplankwooden,5,0 +oplankwood,5,0 +oplankw,5,0 +pineplank,5,1 +pinewoodenplank,5,1 +pinewoodplank,5,1 +pinewplank,5,1 +pineplankwooden,5,1 +pineplankwood,5,1 +pineplankw,5,1 +pplank,5,1 +pwoodenplank,5,1 +pwoodplank,5,1 +pwplank,5,1 +pplankwooden,5,1 +pplankwood,5,1 +pplankw,5,1 +darkplank,5,1 +darkwoodenplank,5,1 +darkwoodplank,5,1 +darkwplank,5,1 +darkplankwooden,5,1 +darkplankwood,5,1 +darkplankw,5,1 +dplank,5,1 +dwoodenplank,5,1 +dwoodplank,5,1 +dwplank,5,1 +dplankwooden,5,1 +dplankwood,5,1 +dplankw,5,1 +spruceplank,5,1 +sprucewoodenplank,5,1 +sprucewoodplank,5,1 +sprucewplank,5,1 +spruceplankwooden,5,1 +spruceplankwood,5,1 +spruceplankw,5,1 +splank,5,1 +swoodenplank,5,1 +swoodplank,5,1 +swplank,5,1 +splankwooden,5,1 +splankwood,5,1 +splankw,5,1 +birchplank,5,2 +birchwoodenplank,5,2 +birchwoodplank,5,2 +birchwplank,5,2 +birchplankwooden,5,2 +birchplankwood,5,2 +birchplankw,5,2 +bplank,5,2 +bwoodenplank,5,2 +bwoodplank,5,2 +bwplank,5,2 +bplankwooden,5,2 +bplankwood,5,2 +bplankw,5,2 +lightplank,5,2 +lightwoodenplank,5,2 +lightwoodplank,5,2 +lightwplank,5,2 +lightplankwooden,5,2 +lightplankwood,5,2 +lightplankw,5,2 +lplank,5,2 +lwoodenplank,5,2 +lwoodplank,5,2 +lwplank,5,2 +lplankwooden,5,2 +lplankwood,5,2 +lplankw,5,2 +whiteplank,5,2 +whitewoodenplank,5,2 +whitewoodplank,5,2 +whitewplank,5,2 +whiteplankwooden,5,2 +whiteplankwood,5,2 +whiteplankw,5,2 +wwoodenplank,5,2 +wwoodplank,5,2 +wwplank,5,2 +wplankwooden,5,2 +wplankwood,5,2 +wplankw,5,2 +jungleplank,5,3 +junglewoodenplank,5,3 +junglewoodplank,5,3 +junglewplank,5,3 +jungleplankwooden,5,3 +jungleplankwood,5,3 +jungleplankw,5,3 +jplank,5,3 +jwoodenplank,5,3 +jwoodplank,5,3 +jwplank,5,3 +jplankwooden,5,3 +jplankwood,5,3 +jplankw,5,3 +forestplank,5,3 +forestwoodenplank,5,3 +forestwoodplank,5,3 +forestwplank,5,3 +forestplankwooden,5,3 +forestplankwood,5,3 +forestplankw,5,3 +fplank,5,3 +fwoodenplank,5,3 +fwoodplank,5,3 +fwplank,5,3 +fplankwooden,5,3 +fplankwood,5,3 +fplankw,5,3 +acaciaplank,5,4 +acaciawoodenplank,5,4 +acaciawoodplank,5,4 +acaciawplank,5,4 +acaciaplankwooden,5,4 +acaciaplankwood,5,4 +acaciaplankw,5,4 +aplank,5,4 +awoodenplank,5,4 +awoodplank,5,4 +awplank,5,4 +aplankwooden,5,4 +aplankwood,5,4 +aplankw,5,4 +darkoakplank,5,5 +darkoakwoodenplank,5,5 +darkoakwoodplank,5,5 +darkoakwplank,5,5 +darkoakplankwooden,5,5 +darkoakplankwood,5,5 +darkoakplankw,5,5 +doakplank,5,5 +doakwoodenplank,5,5 +doakwoodplank,5,5 +doakwplank,5,5 +doakplankwooden,5,5 +doakplankwood,5,5 +doakplankw,5,5 +doplank,5,5 +dowoodenplank,5,5 +dowoodplank,5,5 +dowplank,5,5 +doplankwooden,5,5 +doplankwood,5,5 +doplankw,5,5 +sapling,6,0 +treesapling,6,0 +logsapling,6,0 +trunksapling,6,0 +woodsapling,6,0 +oaktreesapling,6,0 +oaklogsapling,6,0 +oaktrunksapling,6,0 +oakwoodsapling,6,0 +osapling,6,0 +otreesapling,6,0 +ologsapling,6,0 +otrunksapling,6,0 +owoodsapling,6,0 +darksapling,6,1 +darktreesapling,6,1 +darklogsapling,6,1 +darktrunksapling,6,1 +darkwoodsapling,6,1 +sprucesapling,6,1 +sprucetreesapling,6,1 +sprucelogsapling,6,1 +sprucetrunksapling,6,1 +sprucewoodsapling,6,1 +pinesapling,6,1 +pinetreesapling,6,1 +pinelogsapling,6,1 +pinetrunksapling,6,1 +pinewoodsapling,6,1 +dsapling,6,1 +dtreesapling,6,1 +dlogsapling,6,1 +dtrunksapling,6,1 +dwoodsapling,6,1 +ssapling,6,1 +streesapling,6,1 +slogsapling,6,1 +strunksapling,6,1 +swoodsapling,6,1 +psapling,6,1 +ptreesapling,6,1 +plogsapling,6,1 +ptrunksapling,6,1 +pwoodsapling,6,1 +birchsapling,6,2 +birchtreesapling,6,2 +birchlogsapling,6,2 +birchtrunksapling,6,2 +birchwoodsapling,6,2 +lightsapling,6,2 +lighttreesapling,6,2 +lightlogsapling,6,2 +lighttrunksapling,6,2 +lightwoodsapling,6,2 +whitesapling,6,2 +whitetreesapling,6,2 +whitelogsapling,6,2 +whitetrunksapling,6,2 +whitewoodsapling,6,2 +bsapling,6,2 +btreesapling,6,2 +blogsapling,6,2 +btrunksapling,6,2 +bwoodsapling,6,2 +lsapling,6,2 +ltreesapling,6,2 +llogsapling,6,2 +ltrunksapling,6,2 +lwoodsapling,6,2 +wsapling,6,2 +wtreesapling,6,2 +wlogsapling,6,2 +wtrunksapling,6,2 +wwoodsapling,6,2 +junglesapling,6,3 +jungletreesapling,6,3 +junglelogsapling,6,3 +jungletrunksapling,6,3 +junglewoodsapling,6,3 +forestsapling,6,3 +foresttreesapling,6,3 +forestlogsapling,6,3 +foresttrunksapling,6,3 +forestwoodsapling,6,3 +jsapling,6,3 +jtreesapling,6,3 +jlogsapling,6,3 +jtrunksapling,6,3 +jwoodsapling,6,3 +fsapling,6,3 +ftreesapling,6,3 +flogsapling,6,3 +ftrunksapling,6,3 +fwoodsapling,6,3 +acaciasapling,6,4 +acaciatreesapling,6,4 +acacialogsapling,6,4 +acaciatrunksapling,6,4 +acaciawoodsapling,6,4 +asapling,6,4 +atreesapling,6,4 +alogsapling,6,4 +atrunksapling,6,4 +awoodsapling,6,4 +darkoaksapling,6,5 +darkoaktreesapling,6,5 +darkoaklogsapling,6,5 +darkoaktrunksapling,6,5 +darkoakwoodsapling,6,5 +doaksapling,6,5 +doaktreesapling,6,5 +doaklogsapling,6,5 +doaktrunksapling,6,5 +dosapling,6,5 +dowoodsapling,6,5 +dotreesapling,6,5 +dologsapling,6,5 +dotrunksapling,6,5 +bedrock,7,0 +oprock,7,0 +opblock,7,0 +adminblock,7,0 +adminrock,7,0 +adminium,7,0 +water,8,0 +stationarywater,9,0 +stillwater,9,0 +swater,9,0 +lava,10,0 +stationarylava,11,0 +stilllava,11,0 +slava,11,0 +sand,12,0 +redsand,12,1 +rsand,12,1 +gravel,13,0 +goldore,14,0 +oregold,14,0 +gore,14,0 +oreg,14,0 +ogold,14,0 +goldo,14,0 +ironore,15,0 +oreiron,15,0 +irono,15,0 +oiron,15,0 +steelore,15,0 +oresteel,15,0 +steelo,15,0 +osteel,15,0 +iore,15,0 +orei,15,0 +sore,15,0 +ores,15,0 +coalore,16,0 +orecoal,16,0 +coalo,16,0 +ocoal,16,0 +core,16,0 +tree,17,0 +log,17,0 +trunk,17,0 +oak,17,0 +oaktree,17,0 +oaklog,17,0 +oaktrunk,17,0 +oakwood,17,0 +otree,17,0 +olog,17,0 +otrunk,17,0 +owood,17,0 +pine,17,1 +pinetree,17,1 +pinelog,17,1 +pinetrunk,17,1 +pinewood,17,1 +darktree,17,1 +darklog,17,1 +darktrunk,17,1 +darkwood,17,1 +spruce,17,1 +sprucetree,17,1 +sprucelog,17,1 +sprucetrunk,17,1 +sprucewood,17,1 +dtree,17,1 +dlog,17,1 +dtrunk,17,1 +dwood,17,1 +stree,17,1 +slog,17,1 +strunk,17,1 +swood,17,1 +ptree,17,1 +plog,17,1 +ptrunk,17,1 +pwood,17,1 +birch,17,2 +birchtree,17,2 +birchlog,17,2 +birchtrunk,17,2 +birchwood,17,2 +whitetree,17,2 +whitelog,17,2 +whitetrunk,17,2 +whitewood,17,2 +lighttree,17,2 +lightlog,17,2 +lighttrunk,17,2 +lightwood,17,2 +btree,17,2 +blog,17,2 +btrunk,17,2 +bwood,17,2 +wtree,17,2 +wlog,17,2 +wtrunk,17,2 +wwood,17,2 +ltree,17,2 +llog,17,2 +ltrunk,17,2 +lwood,17,2 +jungletree,17,3 +junglelog,17,3 +jungletrunk,17,3 +junglewood,17,3 +jungle,17,3 +forest,17,3 +foresttree,17,3 +forestlog,17,3 +foresttrunk,17,3 +forestwood,17,3 +jtree,17,3 +jlog,17,3 +jtrunk,17,3 +jwood,17,3 +ftree,17,3 +flog,17,3 +ftrunk,17,3 +fwood,17,3 +leaves,18,0 +leaf,18,0 +treeleaves,18,0 +logleaves,18,0 +trunkleaves,18,0 +woodleaves,18,0 +oakleaves,18,0 +oakleaf,18,0 +oleaves,18,0 +oleaf,18,0 +oaktreeleaves,18,0 +oaklogleaves,18,0 +oaktrunkleaves,18,0 +oakwoodleaves,18,0 +otreeleaves,18,0 +ologleaves,18,0 +otrunkleaves,18,0 +owoodleaves,18,0 +treeleaf,18,0 +logleaf,18,0 +trunkleaf,18,0 +woodleaf,18,0 +oaktreeleaf,18,0 +oaklogleaf,18,0 +oaktrunkleaf,18,0 +oakwoodleaf,18,0 +otreeleaf,18,0 +ologleaf,18,0 +otrunkleaf,18,0 +owoodleaf,18,0 +pineleaves,18,1 +pineleaf,18,1 +pleaves,18,1 +pleaf,18,1 +pinetreeleaves,18,1 +pinelogleaves,18,1 +pinetrunkleaves,18,1 +pinewoodleaves,18,1 +ptreeleaves,18,1 +plogleaves,18,1 +ptrunkleaves,18,1 +pwoodleaves,18,1 +spruceleaves,18,1 +spruceleaf,18,1 +sleaves,18,1 +sleaf,18,1 +sprucetreeleaves,18,1 +sprucelogleaves,18,1 +sprucetrunkleaves,18,1 +sprucewoodleaves,18,1 +streeleaves,18,1 +slogleaves,18,1 +strunkleaves,18,1 +swoodleaves,18,1 +darkleaves,18,1 +darkleaf,18,1 +dleaves,18,1 +dleaf,18,1 +darktreeleaves,18,1 +darklogleaves,18,1 +darktrunkleaves,18,1 +darkwoodleaves,18,1 +dtreeleaves,18,1 +dlogleaves,18,1 +dtrunkleaves,18,1 +dwoodleaves,18,1 +sprucetreeleaf,18,1 +sprucelogleaf,18,1 +sprucetrunkleaf,18,1 +sprucewoodleaf,18,1 +streeleaf,18,1 +slogleaf,18,1 +strunkleaf,18,1 +swoodleaf,18,1 +pinetreeleaf,18,1 +pinelogleaf,18,1 +pinetrunkleaf,18,1 +pinewoodleaf,18,1 +ptreeleaf,18,1 +plogleaf,18,1 +ptrunkleaf,18,1 +pwoodleaf,18,1 +darktreeleaf,18,1 +darklogleaf,18,1 +darktrunkleaf,18,1 +darkwoodleaf,18,1 +dtreeleaf,18,1 +dlogleaf,18,1 +dtrunkleaf,18,1 +dwoodleaf,18,1 +birchleaves,18,2 +birchleaf,18,2 +bleaves,18,2 +bleaf,18,2 +birchtreeleaves,18,2 +birchlogleaves,18,2 +birchtrunkleaves,18,2 +birchwoodleaves,18,2 +btreeleaves,18,2 +blogleaves,18,2 +btrunkleaves,18,2 +bwoodleaves,18,2 +lightleaves,18,2 +lightleaf,18,2 +lleaves,18,2 +lleaf,18,2 +lighttreeleaves,18,2 +lightlogleaves,18,2 +lighttrunkleaves,18,2 +lightwoodleaves,18,2 +ltreeleaves,18,2 +llogleaves,18,2 +ltrunkleaves,18,2 +lwoodleaves,18,2 +whiteleaves,18,2 +whiteleaf,18,2 +wleaves,18,2 +wleaf,18,2 +whitetreeleaves,18,2 +whitelogleaves,18,2 +whitetrunkleaves,18,2 +whitewoodleaves,18,2 +wtreeleaves,18,2 +wlogleaves,18,2 +wtrunkleaves,18,2 +wwoodleaves,18,2 +birchtreeleaf,18,2 +birchlogleaf,18,2 +birchtrunkleaf,18,2 +birchwoodleaf,18,2 +btreeleaf,18,2 +blogleaf,18,2 +btrunkleaf,18,2 +bwoodleaf,18,2 +lighttreeleaf,18,2 +lightlogleaf,18,2 +lighttrunkleaf,18,2 +lightwoodleaf,18,2 +ltreeleaf,18,2 +llogleaf,18,2 +ltrunkleaf,18,2 +lwoodleaf,18,2 +whitetreeleaf,18,2 +whitelogleaf,18,2 +whitetrunkleaf,18,2 +whitewoodleaf,18,2 +wtreeleaf,18,2 +wlogleaf,18,2 +wtrunkleaf,18,2 +wwoodleaf,18,2 +jungleleaves,18,3 +jungleleaf,18,3 +jleaves,18,3 +jleaf,18,3 +jungletreeleaves,18,3 +junglelogleaves,18,3 +jungletrunkleaves,18,3 +junglewoodleaves,18,3 +jtreeleaves,18,3 +jlogleaves,18,3 +jtrunkleaves,18,3 +jwoodleaves,18,3 +forestleaves,18,3 +forestleaf,18,3 +fleaves,18,3 +fleaf,18,3 +foresttreeleaves,18,3 +forestlogleaves,18,3 +foresttrunkleaves,18,3 +forestwoodleaves,18,3 +ftreeleaves,18,3 +flogleaves,18,3 +ftrunkleaves,18,3 +fwoodleaves,18,3 +jungletreeleaf,18,3 +junglelogleaf,18,3 +jungletrunkleaf,18,3 +junglewoodleaf,18,3 +jtreeleaf,18,3 +jlogleaf,18,3 +jtrunkleaf,18,3 +jwoodleaf,18,3 +foresttreeleaf,18,3 +forestlogleaf,18,3 +foresttrunkleaf,18,3 +forestwoodleaf,18,3 +ftreeleaf,18,3 +flogleaf,18,3 +ftrunkleaf,18,3 +fwoodleaf,18,3 +sponge,19,0 +glass,20,0 +blockglass,20,0 +glassblock,20,0 +lapislazuliore,21,0 +lapislazulio,21,0 +orelapislazuli,21,0 +olapislazuli,21,0 +lapisore,21,0 +lapiso,21,0 +orelapis,21,0 +olapis,21,0 +lore,21,0 +orel,21,0 +lapislazuliblock,22,0 +blocklapislazuli,22,0 +lapisblock,22,0 +blocklapis,22,0 +lblock,22,0 +blockl,22,0 +dispenser,23,0 +dispense,23,0 +sandstone,24,0 +sastone,24,0 +creepersandstone,24,1 +creepersastone,24,1 +creepsandstone,24,1 +creepsastone,24,1 +csandstone,24,1 +csastone,24,1 +hieroglyphicsandstone,24,1 +hieroglyphicsastone,24,1 +hieroglyphsandstone,24,1 +hieroglyphsastone,24,1 +hsandstone,24,1 +hsastone,24,1 +pyramidsandstone,24,1 +pyramidsastone,24,1 +psandstone,24,1 +psastone,24,1 +chiseledsandstone,24,1 +chiseledsastone,24,1 +chiselsandstone,24,1 +chiselsastone,24,1 +smoothsandstone,24,2 +smoothsastone,24,2 +ssandstone,24,2 +smsastone,24,2 +ssastone,24,2 +noteblock,25,0 +musicblock,25,0 +nblock,25,0 +mblock,25,0 +poweredtrack,27,0 +poweredrails,27,0 +poweredrail,27,0 +boostertrack,27,0 +boosterrails,27,0 +boosterrail,27,0 +powertrack,27,0 +powerrails,27,0 +powerrail,27,0 +boosttrack,27,0 +boostrails,27,0 +boostrail,27,0 +ptrack,27,0 +prails,27,0 +prail,27,0 +btrack,27,0 +brails,27,0 +brail,27,0 +detectortrack,28,0 +detectorrails,28,0 +detectorrail,28,0 +detectingtrack,28,0 +detectingrails,28,0 +detectingrail,28,0 +detecttrack,28,0 +detectrails,28,0 +detectrail,28,0 +dtrack,28,0 +drails,28,0 +drail,28,0 +stickypistonbase,29,0 +stickypiston,29,0 +stickpistonbase,29,0 +stickpiston,29,0 +stickyp,29,0 +spistonbase,29,0 +spiston,29,0 +pistonstickybase,29,0 +pistonsticky,29,0 +pistonstickbase,29,0 +pistonstick,29,0 +pistonsbase,29,0 +pistons,29,0 +psticky,29,0 +pstick,29,0 +spiderweb,30,0 +cobweb,30,0 +sweb,30,0 +cweb,30,0 +web,30,0 +longgrass,31,1 +tallgrass,31,1 +wildgrass,31,1 +grasslong,31,1 +grasstall,31,1 +grasswild,31,1 +lgrass,31,1 +tgrass,31,1 +wgrass,31,1 +fern,31,2 +bush,31,2 +deadshrub,32,0 +dshrub,32,0 +deadbush,32,0 +dbush,32,0 +deadsapling,32,0 +piston,33,0 +pistonbase,33,0 +pistonblock,33,0 +whitewool,35,0 +whitecloth,35,0 +whitecotton,35,0 +wcloth,35,0 +wwool,35,0 +wcotton,35,0 +cloth,35,0 +wool,35,0 +cotton,35,0 +orangewool,35,1 +orangecloth,35,1 +orangecotton,35,1 +ocloth,35,1 +owool,35,1 +ocotton,35,1 +magentawool,35,2 +magentacloth,35,2 +magentacotton,35,2 +mcloth,35,2 +mwool,35,2 +mcotton,35,2 +lightbluewool,35,3 +lightbluecloth,35,3 +lightbluecotton,35,3 +lbluecloth,35,3 +lbluewool,35,3 +lbluecotton,35,3 +lightblucloth,35,3 +lightbluwool,35,3 +lightblucotton,35,3 +lblucloth,35,3 +lbluwool,35,3 +lblucotton,35,3 +lbcloth,35,3 +lbwool,35,3 +lbcotton,35,3 +yellowwool,35,4 +yellowcloth,35,4 +yellowcotton,35,4 +ycloth,35,4 +ywool,35,4 +ycotton,35,4 +lightgreenwool,35,5 +lightgreencloth,35,5 +lightgreencotton,35,5 +lgreencloth,35,5 +lgreenwool,35,5 +lgreencotton,35,5 +lightgrecloth,35,5 +lightgrewool,35,5 +lightgrecotton,35,5 +lgrecloth,35,5 +lgrewool,35,5 +lgrecotton,35,5 +limecloth,35,5 +limewool,35,5 +limecotton,35,5 +lcloth,35,5 +lwool,35,5 +lcotton,35,5 +pinkwool,35,6 +pinkcloth,35,6 +pinkcotton,35,6 +picloth,35,6 +piwool,35,6 +picotton,35,6 +darkgraywool,35,7 +darkgraycloth,35,7 +darkgraycotton,35,7 +darkgreywool,35,7 +darkgreycloth,35,7 +darkgreycotton,35,7 +dgraycloth,35,7 +dgraywool,35,7 +dgraycotton,35,7 +dgreycloth,35,7 +dgreywool,35,7 +dgreycotton,35,7 +darkgracloth,35,7 +darkgrawool,35,7 +darkgracotton,35,7 +dgracloth,35,7 +dgrawool,35,7 +dgracotton,35,7 +graycloth,35,7 +graywool,35,7 +graycotton,35,7 +greycloth,35,7 +greywool,35,7 +greycotton,35,7 +gracloth,35,7 +grawool,35,7 +gracotton,35,7 +lightgraywool,35,8 +lightgraycloth,35,8 +lightgraycotton,35,8 +lgraycloth,35,8 +lgraywool,35,8 +lgraycotton,35,8 +lightgreywool,35,8 +lightgreycloth,35,8 +lightgreycotton,35,8 +lgreycloth,35,8 +lgreywool,35,8 +lgreycotton,35,8 +lightgracloth,35,8 +lightgrawool,35,8 +lightgracotton,35,8 +lgracloth,35,8 +lgrawool,35,8 +lgracotton,35,8 +silvercloth,35,8 +silverwool,35,8 +silvercotton,35,8 +sicloth,35,8 +siawool,35,8 +siacotton,35,8 +cyanwool,35,9 +cyancloth,35,9 +cyancotton,35,9 +ccloth,35,9 +cwool,35,9 +ccotton,35,9 +purplewool,35,10 +purplecloth,35,10 +purplecotton,35,10 +pucloth,35,10 +puwool,35,10 +pucotton,35,10 +bluewool,35,11 +bluecloth,35,11 +bluecotton,35,11 +blucloth,35,11 +bluwool,35,11 +blucotton,35,11 +brownwool,35,12 +browncloth,35,12 +browncotton,35,12 +brocloth,35,12 +browool,35,12 +brocotton,35,12 +darkgreenwool,35,13 +darkgreencloth,35,13 +darkgreencotton,35,13 +dgreencloth,35,13 +dgreenwool,35,13 +dgreencotton,35,13 +greencloth,35,13 +greenwool,35,13 +greencotton,35,13 +darkgrecloth,35,13 +darkgrewool,35,13 +darkgrecotton,35,13 +dgrecloth,35,13 +dgrewool,35,13 +dgrecotton,35,13 +grecloth,35,13 +grewool,35,13 +grecotton,35,13 +redwool,35,14 +redcloth,35,14 +redcotton,35,14 +rcloth,35,14 +rwool,35,14 +rcotton,35,14 +blackwool,35,15 +blackcloth,35,15 +blackcotton,35,15 +blacloth,35,15 +blawool,35,15 +blacotton,35,15 +dandelion,37,0 +yellowdandelion,37,0 +ydandelion,37,0 +yellowflower,37,0 +yflower,37,0 +flower,37,0 +rose,38,0 +redrose,38,0 +rrose,38,0 +redflower,38,0 +rflower,38,0 +poppy,38,0 +redpoppy,38,0 +blueorchid,38,1 +cyanorchid,38,1 +lightblueorchid,38,1 +lblueorchid,38,1 +orchid,38,1 +allium,38,2 +magentaallium,38,2 +azurebluet,38,3 +whiteazurebluet,38,3 +abluet,38,3 +azureb,38,3 +houstonia,38,3 +redtulip,38,4 +tulipred,38,4 +rtulip,38,4 +tulipr,38,4 +orangetulip,38,5 +tuliporange,38,5 +otulip,38,5 +tulipo,38,5 +whitetulip,38,6 +tulipwhite,38,6 +wtulip,38,6 +tulipw,38,6 +pinktulip,38,7 +tulippink,38,7 +ptulip,38,7 +tulipp,38,7 +oxeye,38,8 +daisy,38,8 +oxeyedaisy,38,8 +daisyoxeye,38,8 +moondaisy,38,8 +daisymoon,38,8 +lightgrayoxeye,38,8 +lgrayoxeye,38,8 +lightgreyoxeye,38,8 +lgreyoxeye,38,8 +brownmushroom,39,0 +brownshroom,39,0 +brownmush,39,0 +bmushroom,39,0 +bshroom,39,0 +bmush,39,0 +redmushroom,40,0 +redshroom,40,0 +redmush,40,0 +rmushroom,40,0 +rshroom,40,0 +rmush,40,0 +goldblock,41,0 +blockgold,41,0 +gblock,41,0 +blockg,41,0 +ironblock,42,0 +steelblock,42,0 +blockiron,42,0 +blocksteel,42,0 +iblock,42,0 +stblock,42,0 +blocki,42,0 +blockst,42,0 +stonedoublestep,43,0 +stonedstep,43,0 +sdoublestep,43,0 +sdstep,43,0 +doublestonestep,43,0 +dstonestep,43,0 +doublesstep,43,0 +doublestep,43,0 +dstep,43,0 +stonedoubleslab,43,0 +stonedslab,43,0 +sdoubleslab,43,0 +sdslab,43,0 +doublestoneslab,43,0 +dstoneslab,43,0 +doublesslab,43,0 +doubleslab,43,0 +dslab,43,0 +stonedoublehalfblock,43,0 +stonedhalfblock,43,0 +sdoublehalfblock,43,0 +sdhalfblock,43,0 +doublestonehalfblock,43,0 +dstonehalfblock,43,0 +doubleshalfblock,43,0 +doublehalfblock,43,0 +dhalfblock,43,0 +sandstonedoublestep,43,1 +sandstonedstep,43,1 +sstonedoublestep,43,1 +sstonedstep,43,1 +ssdoublestep,43,1 +ssdstep,43,1 +doublesandstonestep,43,1 +dsandstonestep,43,1 +doublesstonestep,43,1 +dsstonestep,43,1 +doublessstep,43,1 +dsstep,43,1 +sandstonedoubleslab,43,1 +sandstonedslab,43,1 +sstonedoubleslab,43,1 +sstonedslab,43,1 +ssdoubleslab,43,1 +ssdslab,43,1 +doublesandstoneslab,43,1 +dsandstoneslab,43,1 +doublesstoneslab,43,1 +dsstoneslab,43,1 +doublessslab,43,1 +dsslab,43,1 +sandstonedoublehalfblock,43,1 +sandstonedhalfblock,43,1 +sstonedoublehalfblock,43,1 +sstonedhalfblock,43,1 +ssdoublehalfblock,43,1 +ssdhalfblock,43,1 +doublesandstonehalfblock,43,1 +dsandstonehalfblock,43,1 +doublesstonehalfblock,43,1 +dsstonehalfblock,43,1 +doublesshalfblock,43,1 +dsshalfblock,43,1 +plankstonedoublestep,43,2 +woodenstonedoublestep,43,2 +woodenstonedstep,43,2 +woodstonedoublestep,43,2 +woodstonedstep,43,2 +wstonedoublestep,43,2 +wstonedstep,43,2 +doublewoodenstonestep,43,2 +dwoodenstonestep,43,2 +doublewoodstonestep,43,2 +dwoodstonestep,43,2 +doublewstonestep,43,2 +dwstonestep,43,2 +woodenstonedoubleslab,43,2 +woodenstonedslab,43,2 +woodstonedoubleslab,43,2 +woodstonedslab,43,2 +wstonedoubleslab,43,2 +wstonedslab,43,2 +doublewoodenstoneslab,43,2 +dwoodenstoneslab,43,2 +doublewoodstoneslab,43,2 +dwoodstoneslab,43,2 +doublewstoneslab,43,2 +dwstoneslab,43,2 +woodenstonedoublehalfblock,43,2 +woodenstonedhalfblock,43,2 +woodstonedoublehalfblock,43,2 +woodstonedhalfblock,43,2 +wstonedoublehalfblock,43,2 +wstonedhalfblock,43,2 +doublewoodenstonehalfblock,43,2 +dwoodenstonehalfblock,43,2 +doublewoodstonehalfblock,43,2 +dwoodstonehalfblock,43,2 +doublewstonehalfblock,43,2 +dwstonehalfblock,43,2 +cobblestonedoublestep,43,3 +cobblestonedstep,43,3 +cobbledoublestep,43,3 +cobbledstep,43,3 +cstonedoublestep,43,3 +cstonedstep,43,3 +csdoublestep,43,3 +csdstep,43,3 +doublecobblestonestep,43,3 +dcobblestonestep,43,3 +doublecobblestep,43,3 +dcobblestep,43,3 +doublecstonestep,43,3 +dcstonestep,43,3 +doublecsstep,43,3 +dcsstep,43,3 +cobblestonedoubleslab,43,3 +cobblestonedslab,43,3 +cobbledoubleslab,43,3 +cobbledslab,43,3 +cstonedoubleslab,43,3 +cstonedslab,43,3 +csdoubleslab,43,3 +csdslab,43,3 +doublecobblestoneslab,43,3 +dcobblestoneslab,43,3 +doublecobbleslab,43,3 +dcobbleslab,43,3 +doublecstoneslab,43,3 +dcstoneslab,43,3 +doublecsslab,43,3 +dcsslab,43,3 +cobblestonedoublehalfblock,43,3 +cobblestonedhalfblock,43,3 +cobbledoublehalfblock,43,3 +cobbledhalfblock,43,3 +cstonedoublehalfblock,43,3 +cstonedhalfblock,43,3 +csdoublehalfblock,43,3 +csdhalfblock,43,3 +doublecobblestonehalfblock,43,3 +dcobblestonehalfblock,43,3 +doublecobblehalfblock,43,3 +dcobblehalfblock,43,3 +doublecstonehalfblock,43,3 +dcstonehalfblock,43,3 +doublecshalfblock,43,3 +dcshalfblock,43,3 +brickdoublestep,43,4 +brickdstep,43,4 +bdoublestep,43,4 +bdstep,43,4 +brickdoubleslab,43,4 +brickdslab,43,4 +bdoubleslab,43,4 +bdslab,43,4 +doublebrickstep,43,4 +dbrickstep,43,4 +doublebstep,43,4 +dbstep,43,4 +doublebrickslab,43,4 +dbrickslab,43,4 +doublebslab,43,4 +dbslab,43,4 +brickdoublehalfblock,43,4 +brickdhalfblock,43,4 +bdoublehalfblock,43,4 +bdhalfblock,43,4 +doublebrickhalfblock,43,4 +dbrickhalfblock,43,4 +doublebhalfblock,43,4 +dbhalfblock,43,4 +stonebrickdoublestep,43,5 +stonebrickdstep,43,5 +stonebdoublestep,43,5 +stonebdstep,43,5 +sbrickdoublestep,43,5 +sbrickdstep,43,5 +sbdoublestep,43,5 +sbdstep,43,5 +stonebrickdoubleslab,43,5 +stonebrickdslab,43,5 +stonebdoubleslab,43,5 +stonebdslab,43,5 +sbrickdoubleslab,43,5 +sbrickdslab,43,5 +sbdoubleslab,43,5 +sbdslab,43,5 +doublestonebrickstep,43,5 +dstonebrickstep,43,5 +doublestonebstep,43,5 +dstonebstep,43,5 +doublesbrickstep,43,5 +dsbrickstep,43,5 +doublesbstep,43,5 +dsbstep,43,5 +doublestonebrickslab,43,5 +dstonebrickslab,43,5 +doublestonebslab,43,5 +dstonebslab,43,5 +doublesbrickslab,43,5 +dsbrickdslab,43,5 +doublesbslab,43,5 +dsbslab,43,5 +stonebrickdoublehalfblock,43,5 +stonebrickdhalfblock,43,5 +stonebdoublehalfblock,43,5 +stonebdhalfblock,43,5 +sbrickdoublehalfblock,43,5 +sbrickdhalfblock,43,5 +sbdoublehalfblock,43,5 +sbdhalfblock,43,5 +doublestonebrickhalfblock,43,5 +dstonebrickhalfblock,43,5 +doublestonebhalfblock,43,5 +dstonebhalfblock,43,5 +doublesbrickhalfblock,43,5 +dsbrickhalfblock,43,5 +doublesbhalfblock,43,5 +dsbhalfblock,43,5 +netherbrickdoubleslab,43,6 +hellbrickdoubleslab,43,6 +nbrickdoubleslab,43,6 +hbrickdoubleslab,43,6 +netherdoubleslab,43,6 +helldoubleslab,43,6 +nbdoubleslab,43,6 +hbdoubleslab,43,6 +hdoubleslab,43,6 +ndoubleslab,43,6 +netherbrickdoublestep,43,6 +hellbrickdoublestep,43,6 +nbrickdoublestep,43,6 +hbrickdoublestep,43,6 +netherdoublestep,43,6 +helldoublestep,43,6 +nbdoublestep,43,6 +hbdoublestep,43,6 +ndoublestep,43,6 +hdoublestep,43,6 +netherbrickdoublehalfblock,43,6 +hellbrickdoublehalfblock,43,6 +nbrickdoublehalfblock,43,6 +hbrickdoublehalfblock,43,6 +netherdoublehalfblock,43,6 +helldoublehalfblock,43,6 +nbdoublehalfblock,43,6 +hbdoublehalfblock,43,6 +ndoublehalfblock,43,6 +hdoublehalfblock,43,6 +netherbrickdslab,43,6 +hellbrickdslab,43,6 +nbrickdslab,43,6 +hbrickdslab,43,6 +netherdslab,43,6 +helldslab,43,6 +nbdslab,43,6 +hbdslab,43,6 +hdslab,43,6 +ndslab,43,6 +netherbrickdstep,43,6 +hellbrickdstep,43,6 +nbrickdstep,43,6 +hbrickdstep,43,6 +netherdstep,43,6 +helldstep,43,6 +nbdstep,43,6 +hbdstep,43,6 +ndstep,43,6 +hdstep,43,6 +netherbrickdhalfblock,43,6 +hellbrickdhalfblock,43,6 +nbrickdhalfblock,43,6 +hbrickdhalfblock,43,6 +netherdhalfblock,43,6 +helldhalfblock,43,6 +nbdhalfblock,43,6 +hbdhalfblock,43,6 +ndhalfblock,43,6 +hdhalfblock,43,6 +doublenetherbrickslab,43,6 +doublehellbrickslab,43,6 +doublenbrickslab,43,6 +doublehbrickslab,43,6 +doublenetherslab,43,6 +doublehellslab,43,6 +doublenbslab,43,6 +doublehbslab,43,6 +doublehslab,43,6 +doublenslab,43,6 +doublenetherbrickstep,43,6 +doublehellbrickstep,43,6 +doublenbrickstep,43,6 +doublehbrickstep,43,6 +doublenetherstep,43,6 +doublehellstep,43,6 +doublenbstep,43,6 +doublehbstep,43,6 +doublenstep,43,6 +doublehstep,43,6 +doublenetherbrickhalfblock,43,6 +doublehellbrickhalfblock,43,6 +doublenbrickhalfblock,43,6 +doublehbrickhalfblock,43,6 +doublenetherhalfblock,43,6 +doublehellhalfblock,43,6 +doublenbhalfblock,43,6 +doublehbhalfblock,43,6 +doublenhalfblock,43,6 +doublehhalfblock,43,6 +dnetherbrickslab,43,6 +dhellbrickslab,43,6 +dnbrickslab,43,6 +dhbrickslab,43,6 +dnetherslab,43,6 +dhellslab,43,6 +dnbslab,43,6 +dhbslab,43,6 +dhslab,43,6 +dnslab,43,6 +dnetherbrickstep,43,6 +dhellbrickstep,43,6 +dnbrickstep,43,6 +dhbrickstep,43,6 +dnetherstep,43,6 +dhellstep,43,6 +dnbstep,43,6 +dhbstep,43,6 +dnstep,43,6 +dhstep,43,6 +dnetherbrickhalfblock,43,6 +dhellbrickhalfblock,43,6 +dnbrickhalfblock,43,6 +dhbrickhalfblock,43,6 +dnetherhalfblock,43,6 +dhellhalfblock,43,6 +dnbhalfblock,43,6 +dhbhalfblock,43,6 +dnhalfblock,43,6 +dhhalfblock,43,6 +netherquartzdoublestep,43,7 +hellquartzdoublestep,43,7 +deathquartzdoublestep,43,7 +nquartzdoublestep,43,7 +hquartzdoublestep,43,7 +dquartzdoublestep,43,7 +quartzdoublestep,43,7 +nqdoublestep,43,7 +hqdoublestep,43,7 +dqdoublestep,43,7 +qdoublestep,43,7 +netherquartzdoubleslab,43,7 +hellquartzdoubleslab,43,7 +deathquartzdoubleslab,43,7 +nquartzdoubleslab,43,7 +hquartzdoubleslab,43,7 +dquartzdoubleslab,43,7 +quartzdoubleslab,43,7 +nqdoubleslab,43,7 +hqdoubleslab,43,7 +dqdoubleslab,43,7 +qdoubleslab,43,7 +netherquartzdoublehalfblock,43,7 +hellquartzdoublehalfblock,43,7 +deathquartzdoublehalfblock,43,7 +nquartzdoublehalfblock,43,7 +hquartzdoublehalfblock,43,7 +dquartzdoublehalfblock,43,7 +quartzdoublehalfblock,43,7 +nqdoublehalfblock,43,7 +hqdoublehalfblock,43,7 +dqdoublehalfblock,43,7 +qdoublehalfblock,43,7 +netherquartzdslab,43,7 +hellquartzdslab,43,7 +deathquartzdslab,43,7 +nquartzdslab,43,7 +hquartzdslab,43,7 +dquartzdslab,43,7 +quartzdslab,43,7 +nqdslab,43,7 +hqdslab,43,7 +dqdslab,43,7 +qdslab,43,7 +netherquartzdstep,43,7 +hellquartzdstep,43,7 +deathquartzdstep,43,7 +nquartzdstep,43,7 +hquartzdstep,43,7 +dquartzdstep,43,7 +quartzdstep,43,7 +nqdstep,43,7 +hqdstep,43,7 +dqdstep,43,7 +qdstep,43,7 +netherquartzdhalfblock,43,7 +hellquartzdhalfblock,43,7 +deathquartzdhalfblock,43,7 +nquartzdhalfblock,43,7 +hquartzdhalfblock,43,7 +dquartzdhalfblock,43,7 +quartzdhalfblock,43,7 +nqdhalfblock,43,7 +hqdhalfblock,43,7 +dqdhalfblock,43,7 +qdhalfblock,43,7 +doublenetherquartzslab,43,7 +doublehellquartzslab,43,7 +doubledeathquartzslab,43,7 +doublenquartzslab,43,7 +doublehquartzslab,43,7 +doubledquartzslab,43,7 +doublequartzslab,43,7 +doublenqslab,43,7 +doublehqslab,43,7 +doubledqslab,43,7 +doubleqslab,43,7 +doublenetherquartzstep,43,7 +doublehellquartzstep,43,7 +doubledeathquartzstep,43,7 +doublenquartzstep,43,7 +doublehquartzstep,43,7 +doubledquartzstep,43,7 +doublequartzstep,43,7 +doublenqstep,43,7 +doublehqstep,43,7 +doubledqstep,43,7 +doubleqstep,43,7 +doublenetherquartzhalfblock,43,7 +doublehellquartzhalfblock,43,7 +doubledeathquartzhalfblock,43,7 +doublenquartzhalfblock,43,7 +doublehquartzhalfblock,43,7 +doubledquartzhalfblock,43,7 +doublequartzhalfblock,43,7 +doublenqhalfblock,43,7 +doublehqhalfblock,43,7 +doubledqhalfblock,43,7 +doubleqhalfblock,43,7 +dnetherquartzslab,43,7 +dhellquartzslab,43,7 +ddeathquartzslab,43,7 +dnquartzslab,43,7 +dhquartzslab,43,7 +ddquartzslab,43,7 +dnqslab,43,7 +dhqslab,43,7 +ddqslab,43,7 +dnetherquartzstep,43,7 +dhellquartzstep,43,7 +ddeathquartzstep,43,7 +dnquartzstep,43,7 +dhquartzstep,43,7 +ddquartzstep,43,7 +dnqstep,43,7 +dhqstep,43,7 +ddqstep,43,7 +dnetherquartzhalfblock,43,7 +dhellquartzhalfblock,43,7 +ddeathquartzhalfblock,43,7 +dnquartzhalfblock,43,7 +dhquartzhalfblock,43,7 +ddquartzhalfblock,43,7 +dnqhalfblock,43,7 +dhqhalfblock,43,7 +ddqhalfblock,43,7 +smoothstonedoubleslab,43,8 +smoothstonedoublestep,43,8 +smoothstonedoublehalfblock,43,8 +smoothstonedslab,43,8 +smoothstonedstep,43,8 +smoothstonedhalfblock,43,8 +doublesmoothstoneslab,43,8 +doublesmoothstonestep,43,8 +doublesmoothstonehalfblock,43,8 +dsmoothstoneslab,43,8 +dsmoothstonestep,43,8 +dsmoothstonehalfblock,43,8 +smoothsandstonedoubleslab,43,9 +ssandstonedoubleslab,43,9 +ssstonedoubleslab,43,9 +sssdoubleslab,43,9 +smoothsandstonedoublestep,43,9 +ssandstonedoublestep,43,9 +ssstonedoublestep,43,9 +sssdoublestep,43,9 +smoothsandstonedoublehalfblock,43,9 +ssandstonedoublehalfblock,43,9 +ssstonedoublehalfblock,43,9 +sssdoublehalfblock,43,9 +smoothsandstonedslab,43,9 +ssandstonedslab,43,9 +ssstonedslab,43,9 +sssdslab,43,9 +smoothsandstonedstep,43,9 +ssandstonedstep,43,9 +ssstonedstep,43,9 +sssdstep,43,9 +smoothsandstonedhalfblock,43,9 +ssandstonedhalfblock,43,9 +ssstonedhalfblock,43,9 +sssdhalfblock,43,9 +doublesmoothsandstoneslab,43,9 +doublessandstoneslab,43,9 +doublessstoneslab,43,9 +doublesssslab,43,9 +doublesmoothsandstonestep,43,9 +doublessandstonestep,43,9 +doublessstonestep,43,9 +doublesssstep,43,9 +doublesmoothsandstonehalfblock,43,9 +doublessandstonehalfblock,43,9 +doublessstonehalfblock,43,9 +doublessshalfblock,43,9 +dsmoothsandstoneslab,43,9 +dssandstoneslab,43,9 +dssstoneslab,43,9 +dsssslab,43,9 +dsmoothsandstonestep,43,9 +dssandstonestep,43,9 +dssstonestep,43,9 +dsssstep,43,9 +dsmoothsandstonehalfblock,43,9 +dssandstonehalfblock,43,9 +dssstonehalfblock,43,9 +dssshalfblock,43,9 +smoothstonestep,44,0 +stonestep,44,0 +sstep,44,0 +step,44,0 +smoothstoneslab,44,0 +stoneslab,44,0 +sslab,44,0 +slab,44,0 +smoothstonehalfblock,44,0 +stonehalfblock,44,0 +shalfblock,44,0 +halfblock,44,0 +sandstonestep,44,1 +sstonestep,44,1 +ssstep,44,1 +sandstoneslab,44,1 +sstoneslab,44,1 +ssslab,44,1 +sandstonehalfblock,44,1 +sstonehalfblock,44,1 +sshalfblock,44,1 +woodenstonestep,44,2 +woodstonestep,44,2 +wstonestep,44,2 +woodenstoneslab,44,2 +woodstoneslab,44,2 +wstoneslab,44,2 +woodenstonehalfblock,44,2 +woodstonehalfblock,44,2 +wstonehalfblock,44,2 +cobblestonestep,44,3 +cobblestep,44,3 +cstonestep,44,3 +csstep,44,3 +cobblestoneslab,44,3 +cobbleslab,44,3 +cstoneslab,44,3 +csslab,44,3 +cobblestonehalfblock,44,3 +cobblehalfblock,44,3 +cstonehalfblock,44,3 +cshalfblock,44,3 +brickstep,44,4 +bstep,44,4 +brickslab,44,4 +bslab,44,4 +brickhalfblock,44,4 +bhalfblock,44,4 +stonebrickstep,44,5 +stonebstep,44,5 +sbrickstep,44,5 +sbstep,44,5 +stonebrickslab,44,5 +stonebslab,44,5 +sbrickslab,44,5 +sbslab,44,5 +stonebrickhalfblock,44,5 +stonebhalfblock,44,5 +sbrickhalfblock,44,5 +sbhalfblock,44,5 +netherbrickslab,44,6 +hellbrickslab,44,6 +nbrickslab,44,6 +hbrickslab,44,6 +netherslab,44,6 +hellslab,44,6 +nbslab,44,6 +hbslab,44,6 +hslab,44,6 +nslab,44,6 +netherbrickstep,44,6 +hellbrickstep,44,6 +nbrickstep,44,6 +hbrickstep,44,6 +netherstep,44,6 +hellstep,44,6 +nbstep,44,6 +hbstep,44,6 +nstep,44,6 +hstep,44,6 +netherbrickhalfblock,44,6 +hellbrickhalfblock,44,6 +nbrickhalfblock,44,6 +hbrickhalfblock,44,6 +netherhalfblock,44,6 +hellhalfblock,44,6 +nbhalfblock,44,6 +hbhalfblock,44,6 +nhalfblock,44,6 +hhalfblock,44,6 +netherquartzstep,44,7 +hellquartzstep,44,7 +deathquartzstep,44,7 +nquartzstep,44,7 +hquartzstep,44,7 +dquartzstep,44,7 +quartzstep,44,7 +nqstep,44,7 +hqstep,44,7 +dqstep,44,7 +qstep,44,7 +netherquartzslab,44,7 +hellquartzslab,44,7 +deathquartzslab,44,7 +nquartzslab,44,7 +hquartzslab,44,7 +dquartzslab,44,7 +quartzslab,44,7 +nqslab,44,7 +hqslab,44,7 +dqslab,44,7 +qslab,44,7 +netherquartzhalfblock,44,7 +hellquartzhalfblock,44,7 +deathquartzhalfblock,44,7 +nquartzhalfblock,44,7 +hquartzhalfblock,44,7 +dquartzhalfblock,44,7 +quartzhalfblock,44,7 +nqhalfblock,44,7 +hqhalfblock,44,7 +dqhalfblock,44,7 +qhalfblock,44,7 +brickblock,45,0 +blockbrick,45,0 +bblock,45,0 +blockb,45,0 +tnt,46,0 +tntblock,46,0 +blocktnt,46,0 +bombblock,46,0 +blockbomb,46,0 +dynamiteblock,46,0 +blockdynamite,46,0 +bomb,46,0 +dynamite,46,0 +bookcase,47,0 +casebook,47,0 +bookshelf,47,0 +shelfbook,47,0 +bookblock,47,0 +blockbook,47,0 +mossycobblestone,48,0 +mosscobblestone,48,0 +mcobblestone,48,0 +mossycobble,48,0 +mosscobble,48,0 +mcobble,48,0 +mossstone,48,0 +mossystone,48,0 +mstone,48,0 +obsidian,49,0 +obsi,49,0 +obby,49,0 +torch,50,0 +burningstick,50,0 +burnstick,50,0 +fire,51,0 +flame,51,0 +flames,51,0 +mobspawner,52,0 +mobcage,52,0 +monsterspawner,52,0 +monstercage,52,0 +mspawner,52,0 +mcage,52,0 +spawner,52,0 +cage,52,0 +woodenstairs,53,0 +woodstairs,53,0 +wstairs,53,0 +woodenstair,53,0 +woodstair,53,0 +wstair,53,0 +chest,54,0 +container,54,0 +diamondore,56,0 +crystalore,56,0 +orediamond,56,0 +orecrystal,56,0 +dore,56,0 +ored,56,0 +diamondblock,57,0 +blockdiamond,57,0 +crystalblock,57,0 +blockcrystal,57,0 +dblock,57,0 +blockd,57,0 +workbench,58,0 +craftingbench,58,0 +crafterbench,58,0 +craftbench,58,0 +worktable,58,0 +craftingtable,58,0 +craftertable,58,0 +crafttable,58,0 +wbench,58,0 +cbench,58,0 +soil,60,0 +furnace,61,0 +litfurnace,62,0 +lfurnace,62,0 +burningfurnace,62,0 +burnfurnace,62,0 +bfurnace,62,0 +ladder,65,0 +minecarttrack,66,0 +minecartrails,66,0 +minecartrail,66,0 +mcarttrack,66,0 +mcartrails,66,0 +mcartrail,66,0 +mctrack,66,0 +mcrails,66,0 +mcrail,66,0 +track,66,0 +rails,66,0 +rail,66,0 +cobblestonestairs,67,0 +cstonestairs,67,0 +stonestairs,67,0 +cobblestairs,67,0 +csstairs,67,0 +sstairs,67,0 +cstairs,67,0 +cobblestonestair,67,0 +cstonestair,67,0 +stonestair,67,0 +cobblestair,67,0 +csstair,67,0 +sstair,67,0 +cstair,67,0 +lever,69,0 +stonepressureplate,70,0 +stonepressplate,70,0 +stonepplate,70,0 +stoneplate,70,0 +spressureplate,70,0 +spressplate,70,0 +spplate,70,0 +splate,70,0 +smoothstonepressureplate,70,0 +smoothstonepressplate,70,0 +smoothstonepplate,70,0 +smoothstoneplate,70,0 +sstonepressureplate,70,0 +sstonepressplate,70,0 +sstonepplate,70,0 +sstoneplate,70,0 +woodenpressureplate,72,0 +woodenpressplate,72,0 +woodenpplate,72,0 +woodenplate,72,0 +woodpressureplate,72,0 +woodpressplate,72,0 +woodpplate,72,0 +woodplate,72,0 +wpressureplate,72,0 +wpressplate,72,0 +wpplate,72,0 +wplate,72,0 +redstoneore,73,0 +redsore,73,0 +redore,73,0 +rstoneore,73,0 +rsore,73,0 +rore,73,0 +oreredstone,73,0 +orereds,73,0 +orered,73,0 +orerstone,73,0 +orers,73,0 +orer,73,0 +redstonetorch,76,0 +rstonetorch,76,0 +redstorch,76,0 +redtorch,76,0 +rstorch,76,0 +stonebutton,77,0 +smoothstonebutton,77,0 +sstonebutton,77,0 +sbutton,77,0 +button,77,0 +snowcover,78,0 +snowcovering,78,0 +scover,78,0 +ice,79,0 +frozenwater,79,0 +waterfrozen,79,0 +freezewater,79,0 +waterfreeze,79,0 +snowblock,80,0 +blocksnow,80,0 +sblock,80,0 +blocks,80,0 +cactus,81,0 +cactuses,81,0 +cacti,81,0 +clayblock,82,0 +blockclay,82,0 +cblock,82,0 +blockc,82,0 +jukebox,84,0 +jbox,84,0 +woodenfence,85,0 +fence,85,0 +woodfence,85,0 +wfence,85,0 +fencewooden,85,0 +fencewood,85,0 +fencew,85,0 +pumpkin,86,0 +netherrack,87,0 +netherrock,87,0 +netherstone,87,0 +hellrack,87,0 +hellrock,87,0 +hellstone,87,0 +deathrack,87,0 +deathrock,87,0 +deathstone,87,0 +nrack,87,0 +nrock,87,0 +nstone,87,0 +hrack,87,0 +hrock,87,0 +hstone,87,0 +drack,87,0 +drock,87,0 +dstone,87,0 +soulsand,88,0 +slowsand,88,0 +slowmud,88,0 +ssand,88,0 +smud,88,0 +mud,88,0 +glowstone,89,0 +glowingstoneblock,89,0 +lightstoneblock,89,0 +glowstoneblock,89,0 +blockglowingstone,89,0 +blocklightstone,89,0 +blockglowstone,89,0 +glowingstone,89,0 +lightstone,89,0 +glowingblock,89,0 +lightblock,89,0 +glowblock,89,0 +lstone,89,0 +gstone,89,0 +portal,90,0 +jackolantern,91,0 +pumpkinlantern,91,0 +glowingpumpkin,91,0 +lightpumpkin,91,0 +jpumpkin,91,0 +plantren,91,0 +glowpumpkin,91,0 +gpumpkin,91,0 +lpumpkin,91,0 +lockedchest,95,0 +lockchest,95,0 +jokechest,95,0 +whiteglass,95,0 +whitesglass,95,0 +whitestainedglass,95,0 +wglass,95,0 +wsglass,95,0 +wstainedglass,95,0 +sglass,95,0 +stainedglass,95,0 +orangeglass,95,1 +orangesglass,95,1 +orangestainedglass,95,1 +oglass,95,1 +osglass,95,1 +ostainedglass,95,1 +magentaglass,95,2 +magentasglass,95,2 +magentastainedglass,95,2 +mglass,95,2 +msglass,95,2 +mstainedglass,95,2 +lightblueglass,95,3 +lightbluesglass,95,3 +lightbluestainedglass,95,3 +lblueglass,95,3 +lbluesglass,95,3 +lbluestainedglass,95,3 +lightbluglass,95,3 +lightblusglass,95,3 +lightblustainedglass,95,3 +lbluglass,95,3 +lblusglass,95,3 +lblustainedglass,95,3 +lbglass,95,3 +lbsglass,95,3 +lbstainedglass,95,3 +yellowglass,95,4 +yellowsglass,95,4 +yellowstainedglass,95,4 +yglass,95,4 +ysglass,95,4 +ystainedglass,95,4 +lightgreenglass,95,5 +lightgreensglass,95,5 +lightgreenstainedglass,95,5 +lgreenglass,95,5 +lgreensglass,95,5 +lgreenstainedglass,95,5 +lightgreglass,95,5 +lightgresglass,95,5 +lightgrestainedglass,95,5 +lgreglass,95,5 +lgresglass,95,5 +lgrestainedglass,95,5 +limeglass,95,5 +limesglass,95,5 +limestainedglass,95,5 +lglass,95,5 +lsglass,95,5 +lstainedglass,95,5 +pinkglass,95,6 +pinksglass,95,6 +pinkstainedglass,95,6 +piglass,95,6 +pisglass,95,6 +pistainedglass,95,6 +darkgrayglass,95,7 +darkgraysglass,95,7 +darkgraystainedglass,95,7 +dgrayglass,95,7 +dgraysglass,95,7 +dgraystainedglass,95,7 +darkgreyglass,95,7 +darkgreysglass,95,7 +darkgreystainedglass,95,7 +dgreyglass,95,7 +dgreysglass,95,7 +dgreystainedglass,95,7 +darkgraglass,95,7 +darkgrasglass,95,7 +darkgrastainedglass,95,7 +dgraglass,95,7 +dgrasglass,95,7 +dgrastainedglass,95,7 +grayglass,95,7 +graysglass,95,7 +graystainedglass,95,7 +greyglass,95,7 +greysglass,95,7 +greystainedglass,95,7 +graglass,95,7 +grasglass,95,7 +grastainedglass,95,7 +lightgrayglass,95,8 +lightgraysglass,95,8 +lightgraystainedglass,95,8 +lgrayglass,95,8 +lgraysglass,95,8 +lgraystainedglass,95,8 +lightgreyglass,95,8 +lightgreysglass,95,8 +lightgreystainedglass,95,8 +lgreyglass,95,8 +lgreysglass,95,8 +lgreystainedglass,95,8 +lightgraglass,95,8 +lightgrasglass,95,8 +lightgrastainedglass,95,8 +lgraglass,95,8 +lgrasglass,95,8 +lgrastainedglass,95,8 +silverglass,95,8 +silversglass,95,8 +silverstainedglass,95,8 +siglass,95,8 +siasglass,95,8 +siastainedglass,95,8 +cyanglass,95,9 +cyansglass,95,9 +cyanstainedglass,95,9 +cglass,95,9 +csglass,95,9 +cstainedglass,95,9 +purpleglass,95,10 +purplesglass,95,10 +purplestainedglass,95,10 +puglass,95,10 +pusglass,95,10 +pustainedglass,95,10 +blueglass,95,11 +bluesglass,95,11 +bluestainedglass,95,11 +bluglass,95,11 +blusglass,95,11 +blustainedglass,95,11 +brownglass,95,12 +brownsglass,95,12 +brownstainedglass,95,12 +broglass,95,12 +brosglass,95,12 +brostainedglass,95,12 +darkgreenglass,95,13 +darkgreensglass,95,13 +darkgreenstainedglass,95,13 +dgreenglass,95,13 +dgreensglass,95,13 +dgreenstainedglass,95,13 +greenglass,95,13 +greensglass,95,13 +greenstainedglass,95,13 +darkgreglass,95,13 +darkgresglass,95,13 +darkgrestainedglass,95,13 +dgreglass,95,13 +dgresglass,95,13 +dgrestainedglass,95,13 +greglass,95,13 +gresglass,95,13 +grestainedglass,95,13 +redglass,95,14 +redsglass,95,14 +redstainedglass,95,14 +rglass,95,14 +rsglass,95,14 +rstainedglass,95,14 +blackglass,95,15 +blacksglass,95,15 +blackstainedglass,95,15 +blaglass,95,15 +blasglass,95,15 +blastainedglass,95,15 +trapdoor,96,0 +doortrap,96,0 +hatch,96,0 +tdoor,96,0 +doort,96,0 +trapd,96,0 +dtrap,96,0 +silverfish,97,0 +silverfishsmoothstone,97,0 +silverfishsstone,97,0 +sfishsmoothstone,97,0 +sfishsstone,97,0 +fishsmoothstone,97,0 +fishsstone,97,0 +sfsmoothstone,97,0 +sfsstone,97,0 +trapsmoothstone,97,0 +trapsstone,97,0 +monsteregg,97,0 +monstereggsmoothstone,97,0 +monstereggsstone,97,0 +meggsmoothstone,97,0 +meggsstone,97,0 +mesmoothstone,97,0 +messtone,97,0 +silverfishcobblestone,97,1 +silverfishcstone,97,1 +sfishcobblestone,97,1 +sfishcstone,97,1 +fishcobblestone,97,1 +fishcstone,97,1 +sfcobblestone,97,1 +sfcstone,97,1 +trapcobblestone,97,1 +trapcstone,97,1 +monstereggcobblestone,97,1 +monstereggcstone,97,1 +meggcobblestone,97,1 +meggcstone,97,1 +mecobblestone,97,1 +mecstone,97,1 +silverfishstonebrick,97,2 +silverfishsbrick,97,2 +sfishstonebrick,97,2 +sfishsbrick,97,2 +fishstonebrick,97,2 +fishsbrick,97,2 +sfstonebrick,97,2 +sfsbrick,97,2 +trapstonebrick,97,2 +trapsbrick,97,2 +monstereggstonebrick,97,2 +monstereggsbrick,97,2 +meggstonebrick,97,2 +meggsbrick,97,2 +mestonebrick,97,2 +mesbrick,97,2 +silverfishmossystonebrick,97,3 +silverfishmossstonebrick,97,3 +silverfishmstonebrick,97,3 +silverfishmsbrick,97,3 +sfishmossystonebrick,97,3 +sfishmossstonebrick,97,3 +sfishmstonebrick,97,3 +sfishmsbrick,97,3 +fishmossystonebrick,97,3 +fishmossstonebrick,97,3 +fishmstonebrick,97,3 +fishmsbrick,97,3 +sfmossystonebrick,97,3 +sfmossstonebrick,97,3 +sfmstonebrick,97,3 +sfmsbrick,97,3 +trapmossystonebrick,97,3 +trapmossstonebrick,97,3 +trapmstonebrick,97,3 +trapmsbrick,97,3 +monstereggmossystonebrick,97,3 +monstereggmossstonebrick,97,3 +monstereggmstonebrick,97,3 +monstereggmsbrick,97,3 +meggmossystonebrick,97,3 +meggmossstonebrick,97,3 +meggmstonebrick,97,3 +meggmsbrick,97,3 +memossystonebrick,97,3 +memossstonebrick,97,3 +memstonebrick,97,3 +memsbrick,97,3 +silverfishcrackedstonebrick,97,4 +silverfishcrackstonebrick,97,4 +silverfishcrstonebrick,97,4 +silverfishcrsbrick,97,4 +sfishcrackedstonebrick,97,4 +sfishcrackstonebrick,97,4 +sfishcrstonebrick,97,4 +sfishcrsbrick,97,4 +fishcrackedstonebrick,97,4 +fishcrackstonebrick,97,4 +fishcrstonebrick,97,4 +fishcrsbrick,97,4 +sfcrackedstonebrick,97,4 +sfcrackstonebrick,97,4 +sfcrstonebrick,97,4 +sfcrsbrick,97,4 +trapcrackedstonebrick,97,4 +trapcrackstonebrick,97,4 +trapcrstonebrick,97,4 +trapcrsbrick,97,4 +monstereggcrackedstonebrick,97,4 +monstereggcrackstonebrick,97,4 +monstereggcrstonebrick,97,4 +monstereggcrsbrick,97,4 +meggcrackedstonebrick,97,4 +meggcrackstonebrick,97,4 +meggcrstonebrick,97,4 +meggcrsbrick,97,4 +mecrackedstonebrick,97,4 +mecrackstonebrick,97,4 +mecrstonebrick,97,4 +mecrsbrick,97,4 +silverfishcirclestonebrick,97,5 +silverfishcistonebrick,97,5 +silverfishcisbrick,97,5 +sfishcirclestonebrick,97,5 +sfishcistonebrick,97,5 +sfishcisbrick,97,5 +fishcirclestonebrick,97,5 +fishcistonebrick,97,5 +fishcisbrick,97,5 +sfcirclestonebrick,97,5 +sfcistonebrick,97,5 +sfcisbrick,97,5 +trapcirclestonebrick,97,5 +trapcistonebrick,97,5 +trapcisbrick,97,5 +monstereggcirclestonebrick,97,5 +monstereggcistonebrick,97,5 +monstereggcisbrick,97,5 +meggcirclestonebrick,97,5 +meggcistonebrick,97,5 +meggcisbrick,97,5 +mecirclestonebrick,97,5 +mecistonebrick,97,5 +mecisbrick,97,5 +stonebrick,98,0 +stonebricks,98,0 +stonebrickblock,98,0 +stonebb,98,0 +sbrick,98,0 +mossystonebrick,98,1 +mossystonebricks,98,1 +mossystonebrickblock,98,1 +mossystonebb,98,1 +mossstonebrick,98,1 +mossstonebricks,98,1 +mossstonebrickblock,98,1 +mossstonebb,98,1 +mstonebrick,98,1 +mstonebricks,98,1 +mstonebrickblock,98,1 +mstonebb,98,1 +mosssbrick,98,1 +mosssbricks,98,1 +mosssbrickblock,98,1 +mosssbb,98,1 +msbrick,98,1 +msbricks,98,1 +msbrickblock,98,1 +crackedstone,98,2 +crackedstonebrick,98,2 +crackedstonebricks,98,2 +crackedstonebrickblock,98,2 +crackedstonebb,98,2 +crackstonebrick,98,2 +crackstonebricks,98,2 +crackstonebrickblock,98,2 +crackstonebb,98,2 +crstonebrick,98,2 +crstonebricks,98,2 +crstonebrickblock,98,2 +crstonebb,98,2 +cracksbrick,98,2 +cracksbricks,98,2 +cracksbrickblock,98,2 +cracksbb,98,2 +crsbrick,98,2 +crsbricks,98,2 +crsbrickblock,98,2 +circlestone,98,3 +circlestonebrick,98,3 +circlestonebricks,98,3 +circlestonebrickblock,98,3 +circlestonebb,98,3 +cistonebrick,98,3 +cistonebricks,98,3 +cistonebrickblock,98,3 +cistonebb,98,3 +circlesbrick,98,3 +circlesbricks,98,3 +circlesbrickblock,98,3 +circlesbb,98,3 +cisbrick,98,3 +cisbricks,98,3 +cisbrickblock,98,3 +giantredmushroom,99,0 +hugeredmushroom,99,0 +bigredmushroom,99,0 +gredmushroom,99,0 +hredmushroom,99,0 +bredmushroom,99,0 +giantrmushroom,99,0 +hugermushroom,99,0 +bigrmushroom,99,0 +grmushroom,99,0 +hrmushroom,99,0 +brmushroom,99,0 +giantredmush,99,0 +hugeredmush,99,0 +bigredmush,99,0 +gredmush,99,0 +hredmush,99,0 +bredmush,99,0 +giantrmush,99,0 +hugermush,99,0 +bigrmush,99,0 +grmush,99,0 +hrmush,99,0 +brmush,99,0 +giantbrownmushroom,100,0 +hugebrownmushroom,100,0 +bigbrownmushroom,100,0 +gbrownmushroom,100,0 +hbrownmushroom,100,0 +bbrownmushroom,100,0 +giantbmushroom,100,0 +hugebmushroom,100,0 +bigbmushroom,100,0 +gbmushroom,100,0 +hbmushroom,100,0 +bbmushroom,100,0 +giantbrownmush,100,0 +hugebrownmush,100,0 +bigbrownmush,100,0 +gbrownmush,100,0 +hbrownmush,100,0 +bbrownmush,100,0 +giantbmush,100,0 +hugebmush,100,0 +bigbmush,100,0 +gbmush,100,0 +hbmush,100,0 +bbmush,100,0 +ironbars,101,0 +ironbarsb,101,0 +ironbarsblock,101,0 +ironfence,101,0 +metalbars,101,0 +metalbarsb,101,0 +metalbarsblock,101,0 +metalfence,101,0 +jailbars,101,0 +jailbarsb,101,0 +jailbarsblock,101,0 +jailfence,101,0 +mbars,101,0 +mbarsb,101,0 +mbarsblock,101,0 +mfence,101,0 +jbars,101,0 +jbarsb,101,0 +jbarsblock,101,0 +jfence,101,0 +ibars,101,0 +ibarsb,101,0 +ibarsblock,101,0 +ifence,101,0 +glasspane,102,0 +glassp,102,0 +paneglass,102,0 +pglass,102,0 +flatglass,102,0 +fglass,102,0 +skinnyglass,102,0 +glassflat,102,0 +glassf,102,0 +glassskinny,102,0 +glasss,102,0 +melon,103,0 +watermelon,103,0 +greenmelon,103,0 +melongreen,103,0 +melonblock,103,0 +watermelonblock,103,0 +greenmelonblock,103,0 +vines,106,0 +vine,106,0 +greenvines,106,0 +greenvine,106,0 +gardenvines,106,0 +gardenvine,106,0 +vinesgreen,106,0 +vinegreen,106,0 +vinesgarden,106,0 +vinegarden,106,0 +vinesg,106,0 +vineg,106,0 +gvines,106,0 +gvine,106,0 +woodgate,107,0 +woodenfencegate,107,0 +wfencegate,107,0 +woodfencegate,107,0 +woodengate,107,0 +wgate,107,0 +gate,107,0 +gardengate,107,0 +ggate,107,0 +fencegate,107,0 +fgate,107,0 +brickstairs,108,0 +redbrickstairs,108,0 +redbstairs,108,0 +rbrickstairs,108,0 +bstairs,108,0 +redstairs,108,0 +brickstair,108,0 +redbrickstair,108,0 +redbstair,108,0 +rbrickstair,108,0 +bstair,108,0 +redstair,108,0 +stonebrickstairs,109,0 +stonebstairs,109,0 +sbstairs,109,0 +cementbrickstairs,109,0 +cementstairs,109,0 +cementbstairs,109,0 +cbstairs,109,0 +greybrickstairs,109,0 +greybstairs,109,0 +greystairs,109,0 +mycelium,110,0 +purplegrass,110,0 +pinkgrass,110,0 +mycel,110,0 +swampgrass,110,0 +sgrass,110,0 +mushroomgrass,110,0 +mushgrass,110,0 +lilypad,111,0 +waterlily,111,0 +lily,111,0 +swamppad,111,0 +lpad,111,0 +wlily,111,0 +netherbrickblock,112,0 +hellbrickblock,112,0 +deathbrickblock,112,0 +nbrickblock,112,0 +hbrickblock,112,0 +dbrickblock,112,0 +netherbblock,112,0 +hellbblock,112,0 +deathbblock,112,0 +nbblock,112,0 +hbblock,112,0 +dbblock,112,0 +netherbrickfence,113,0 +hellbrickfence,113,0 +nbrickfence,113,0 +hbrickfence,113,0 +netherbfence,113,0 +hellbfence,113,0 +netherfence,113,0 +hellfence,113,0 +nbfence,113,0 +hbfence,113,0 +nfence,113,0 +hfence,113,0 +netherbrickstairs,114,0 +hellbrickstairs,114,0 +nbrickstairs,114,0 +hbrickstairs,114,0 +netherbstairs,114,0 +hellbstairs,114,0 +netherstairs,114,0 +hellstairs,114,0 +nbstairs,114,0 +hbstairs,114,0 +nstairs,114,0 +hstairs,114,0 +netherbrickstair,114,0 +hellbrickstair,114,0 +nbrickstair,114,0 +hbrickstair,114,0 +netherbstair,114,0 +hellbstair,114,0 +netherstair,114,0 +hellstair,114,0 +nbstair,114,0 +hbstair,114,0 +nstair,114,0 +hstair,114,0 +enchantmenttable,116,0 +enchantingtable,116,0 +enchanttable,116,0 +etable,116,0 +magicaltable,116,0 +magictable,116,0 +mtable,116,0 +enchantmentdesk,116,0 +enchantingdesk,116,0 +enchantdesk,116,0 +edesk,116,0 +magicaldesk,116,0 +magicdesk,116,0 +mdesk,116,0 +booktable,116,0 +bookdesk,116,0 +btable,116,0 +bdesk,116,0 +enderportal,119,0 +endergoo,119,0 +endgoo,119,0 +endportal,119,0 +egoo,119,0 +eportal,119,0 +enderportalframe,120,0 +endportalframe,120,0 +endgooframe,120,0 +endergooframe,120,0 +egooframe,120,0 +eportalframe,120,0 +enderframe,120,0 +endframe,120,0 +enderstone,121,0 +endstone,121,0 +endrock,121,0 +enderrock,121,0 +erock,121,0 +estone,121,0 +enderdragonegg,122,0 +endegg,122,0 +dragonegg,122,0 +degg,122,0 +bossegg,122,0 +begg,122,0 +redstonelamp,123,0 +redlamp,123,0 +rslamp,123,0 +woodendoublestep,125,0 +woodendstep,125,0 +wooddoublestep,125,0 +wooddstep,125,0 +wdoublestep,125,0 +wdstep,125,0 +doublewoodenstep,125,0 +dwoodenstep,125,0 +doublewoodstep,125,0 +dwoodstep,125,0 +doublewstep,125,0 +dwstep,125,0 +woodendoubleslab,125,0 +woodendslab,125,0 +wooddoubleslab,125,0 +wooddslab,125,0 +wdoubleslab,125,0 +wdslab,125,0 +doublewoodenslab,125,0 +dwoodenslab,125,0 +doublewoodslab,125,0 +dwoodslab,125,0 +doublewslab,125,0 +dwslab,125,0 +woodendoublehalfblock,125,0 +woodendhalfblock,125,0 +wooddoublehalfblock,125,0 +wooddhalfblock,125,0 +wdoublehalfblock,125,0 +wdhalfblock,125,0 +doublewoodenhalfblock,125,0 +dwoodenhalfblock,125,0 +doublewoodhalfblock,125,0 +dwoodhalfblock,125,0 +doublewhalfblock,125,0 +dwhalfblock,125,0 +oakwoodendoublehalfblock,125,0 +oakwoodendhalfblock,125,0 +oakwooddoublehalfblock,125,0 +oakwooddhalfblock,125,0 +oakwdoublehalfblock,125,0 +oakwdhalfblock,125,0 +oakdoublewoodenhalfblock,125,0 +oakdwoodenhalfblock,125,0 +oakdoublewoodhalfblock,125,0 +oakdwoodhalfblock,125,0 +oakdoublewhalfblock,125,0 +oakdwhalfblock,125,0 +oakdoublehalfblock,125,0 +oakdhalfblock,125,0 +odhalfblock,125,0 +oakwoodendoublestep,125,0 +oakwoodendstep,125,0 +oakwooddoublestep,125,0 +oakwooddstep,125,0 +oakwdoublestep,125,0 +oakwdstep,125,0 +oakdoublewoodenstep,125,0 +oakdwoodenstep,125,0 +oakdoublewoodstep,125,0 +oakdwoodstep,125,0 +oakdoublewstep,125,0 +oakdwstep,125,0 +oakdoublestep,125,0 +oakdstep,125,0 +odstep,125,0 +oakwoodendoubleslab,125,0 +oakwoodendslab,125,0 +oakwooddoubleslab,125,0 +oakwooddslab,125,0 +oakwdoubleslab,125,0 +oakwdslab,125,0 +oakdoublewoodenslab,125,0 +oakdwoodenslab,125,0 +oakdoublewoodslab,125,0 +oakdwoodslab,125,0 +oakdoublewslab,125,0 +oakdwslab,125,0 +oakdoubleslab,125,0 +oakdslab,125,0 +odslab,125,0 +sprucewoodendoublestep,125,1 +sprucewoodendstep,125,1 +sprucewooddoublestep,125,1 +sprucewooddstep,125,1 +sprucewdoublestep,125,1 +sprucewdstep,125,1 +sprucedoublewoodenstep,125,1 +sprucedwoodenstep,125,1 +sprucedoublewoodstep,125,1 +sprucedwoodstep,125,1 +sprucedoublewstep,125,1 +sprucedwstep,125,1 +sprucedoublestep,125,1 +sprucedstep,125,1 +sprucewoodendoubleslab,125,1 +sprucewoodendslab,125,1 +sprucewooddoubleslab,125,1 +sprucewooddslab,125,1 +sprucewdoubleslab,125,1 +sprucewdslab,125,1 +sprucedoublewoodenslab,125,1 +sprucedwoodenslab,125,1 +sprucedoublewoodslab,125,1 +sprucedwoodslab,125,1 +sprucedoublewslab,125,1 +sprucedwslab,125,1 +sprucedoubleslab,125,1 +sprucedslab,125,1 +sprucewoodendoublehalfblock,125,1 +sprucewoodendhalfblock,125,1 +sprucewooddoublehalfblock,125,1 +sprucewooddhalfblock,125,1 +sprucewdoublehalfblock,125,1 +sprucewdhalfblock,125,1 +sprucedoublewoodenhalfblock,125,1 +sprucedwoodenhalfblock,125,1 +sprucedoublewoodhalfblock,125,1 +sprucedwoodhalfblock,125,1 +sprucedoublewhalfblock,125,1 +sprucedwhalfblock,125,1 +sprucedoublehalfblock,125,1 +sprucedhalfblock,125,1 +darkwoodendoublestep,125,1 +darkwoodendstep,125,1 +darkwooddoublestep,125,1 +darkwooddstep,125,1 +darkwdoublestep,125,1 +darkwdstep,125,1 +darkdoublewoodenstep,125,1 +darkdwoodenstep,125,1 +darkdoublewoodstep,125,1 +darkdwoodstep,125,1 +darkdoublewstep,125,1 +darkdwstep,125,1 +darkdoublestep,125,1 +darkdstep,125,1 +ddstep,125,1 +darkwoodendoubleslab,125,1 +darkwoodendslab,125,1 +darkwooddoubleslab,125,1 +darkwooddslab,125,1 +darkwdoubleslab,125,1 +darkwdslab,125,1 +darkdoublewoodenslab,125,1 +darkdwoodenslab,125,1 +darkdoublewoodslab,125,1 +darkdwoodslab,125,1 +darkdoublewslab,125,1 +darkdwslab,125,1 +darkdoubleslab,125,1 +darkdslab,125,1 +ddslab,125,1 +darkwoodendoublehalfblock,125,1 +darkwoodendhalfblock,125,1 +darkwooddoublehalfblock,125,1 +darkwooddhalfblock,125,1 +darkwdoublehalfblock,125,1 +darkwdhalfblock,125,1 +darkdoublewoodenhalfblock,125,1 +darkdwoodenhalfblock,125,1 +darkdoublewoodhalfblock,125,1 +darkdwoodhalfblock,125,1 +darkdoublewhalfblock,125,1 +darkdwhalfblock,125,1 +darkdoublehalfblock,125,1 +darkdhalfblock,125,1 +ddhalfblock,125,1 +birchwoodendoublestep,125,2 +birchwoodendstep,125,2 +birchwooddoublestep,125,2 +birchwooddstep,125,2 +birchwdoublestep,125,2 +birchwdstep,125,2 +birchdoublewoodenstep,125,2 +birchdwoodenstep,125,2 +birchdoublewoodstep,125,2 +birchdwoodstep,125,2 +birchdoublewstep,125,2 +birchdwstep,125,2 +birchdoublestep,125,2 +birchdstep,125,2 +birchwoodendoubleslab,125,2 +birchwoodendslab,125,2 +birchwooddoubleslab,125,2 +birchwooddslab,125,2 +birchwdoubleslab,125,2 +birchwdslab,125,2 +birchdoublewoodenslab,125,2 +birchdwoodenslab,125,2 +birchdoublewoodslab,125,2 +birchdwoodslab,125,2 +birchdoublewslab,125,2 +birchdwslab,125,2 +birchdoubleslab,125,2 +birchdslab,125,2 +birchwoodendoublehalfblock,125,2 +birchwoodendhalfblock,125,2 +birchwooddoublehalfblock,125,2 +birchwooddhalfblock,125,2 +birchwdoublehalfblock,125,2 +birchwdhalfblock,125,2 +birchdoublewoodenhalfblock,125,2 +birchdwoodenhalfblock,125,2 +birchdoublewoodhalfblock,125,2 +birchdwoodhalfblock,125,2 +birchdoublewhalfblock,125,2 +birchdwhalfblock,125,2 +birchdoublehalfblock,125,2 +birchdhalfblock,125,2 +lightwoodendoublehalfblock,125,2 +lightwoodendhalfblock,125,2 +lightwooddoublehalfblock,125,2 +lightwooddhalfblock,125,2 +lightwdoublehalfblock,125,2 +lightwdhalfblock,125,2 +lightdoublewoodenhalfblock,125,2 +lightdwoodenhalfblock,125,2 +lightdoublewoodhalfblock,125,2 +lightdwoodhalfblock,125,2 +lightdoublewhalfblock,125,2 +lightdwhalfblock,125,2 +lightdoublehalfblock,125,2 +lightdhalfblock,125,2 +ldhalfblock,125,2 +lightwoodendoublestep,125,2 +lightwoodendstep,125,2 +lightwooddoublestep,125,2 +lightwooddstep,125,2 +lightwdoublestep,125,2 +lightwdstep,125,2 +lightdoublewoodenstep,125,2 +lightdwoodenstep,125,2 +lightdoublewoodstep,125,2 +lightdwoodstep,125,2 +lightdoublewstep,125,2 +lightdwstep,125,2 +lightdoublestep,125,2 +lightdstep,125,2 +ldstep,125,2 +lightwoodendoubleslab,125,2 +lightwoodendslab,125,2 +lightwooddoubleslab,125,2 +lightwooddslab,125,2 +lightwdoubleslab,125,2 +lightwdslab,125,2 +lightdoublewoodenslab,125,2 +lightdwoodenslab,125,2 +lightdoublewoodslab,125,2 +lightdwoodslab,125,2 +lightdoublewslab,125,2 +lightdwslab,125,2 +lightdoubleslab,125,2 +lightdslab,125,2 +ldslab,125,2 +junglewoodendoublestep,125,3 +junglewoodendstep,125,3 +junglewooddoublestep,125,3 +junglewooddstep,125,3 +junglewdoublestep,125,3 +junglewdstep,125,3 +jungledoublewoodenstep,125,3 +jungledwoodenstep,125,3 +jungledoublewoodstep,125,3 +jungledwoodstep,125,3 +jungledoublewstep,125,3 +jungledwstep,125,3 +jungledoublestep,125,3 +jungledstep,125,3 +jdstep,125,3 +junglewoodendoubleslab,125,3 +junglewoodendslab,125,3 +junglewooddoubleslab,125,3 +junglewooddslab,125,3 +junglewdoubleslab,125,3 +junglewdslab,125,3 +jungledoublewoodenslab,125,3 +jungledwoodenslab,125,3 +jungledoublewoodslab,125,3 +jungledwoodslab,125,3 +jungledoublewslab,125,3 +jungledwslab,125,3 +jungledoubleslab,125,3 +jungledslab,125,3 +jdslab,125,3 +junglewoodendoublehalfblock,125,3 +junglewoodendhalfblock,125,3 +junglewooddoublehalfblock,125,3 +junglewooddhalfblock,125,3 +junglewdoublehalfblock,125,3 +junglewdhalfblock,125,3 +jungledoublewoodenhalfblock,125,3 +jungledwoodenhalfblock,125,3 +jungledoublewoodhalfblock,125,3 +jungledwoodhalfblock,125,3 +jungledoublewhalfblock,125,3 +jungledwhalfblock,125,3 +jungledoublehalfblock,125,3 +jungledhalfblock,125,3 +jdhalfblock,125,3 +forestwoodendoublehalfblock,125,3 +forestwoodendhalfblock,125,3 +forestwooddoublehalfblock,125,3 +forestwooddhalfblock,125,3 +forestwdoublehalfblock,125,3 +forestwdhalfblock,125,3 +forestdoublewoodenhalfblock,125,3 +forestdwoodenhalfblock,125,3 +forestdoublewoodhalfblock,125,3 +forestdwoodhalfblock,125,3 +forestdoublewhalfblock,125,3 +forestdwhalfblock,125,3 +forestdoublehalfblock,125,3 +forestdhalfblock,125,3 +fdhalfblock,125,3 +forestwoodendoublestep,125,3 +forestwoodendstep,125,3 +forestwooddoublestep,125,3 +forestwooddstep,125,3 +forestwdoublestep,125,3 +forestwdstep,125,3 +forestdoublewoodenstep,125,3 +forestdwoodenstep,125,3 +forestdoublewoodstep,125,3 +forestdwoodstep,125,3 +forestdoublewstep,125,3 +forestdwstep,125,3 +forestdoublestep,125,3 +forestdstep,125,3 +fdstep,125,3 +forestwoodendoubleslab,125,3 +forestwoodendslab,125,3 +forestwooddoubleslab,125,3 +forestwooddslab,125,3 +forestwdoubleslab,125,3 +forestwdslab,125,3 +forestdoublewoodenslab,125,3 +forestdwoodenslab,125,3 +forestdoublewoodslab,125,3 +forestdwoodslab,125,3 +forestdoublewslab,125,3 +forestdwslab,125,3 +forestdoubleslab,125,3 +forestdslab,125,3 +fdslab,125,3 +acaciawoodendoublestep,125,4 +acaciawoodendstep,125,4 +acaciawooddoublestep,125,4 +acaciawooddstep,125,4 +acaciawdoublestep,125,4 +acaciawdstep,125,4 +acaciadoublewoodenstep,125,4 +acaciadwoodenstep,125,4 +acaciadoublewoodstep,125,4 +acaciadwoodstep,125,4 +acaciadoublewstep,125,4 +acaciadwstep,125,4 +acaciadoublestep,125,4 +acaciadstep,125,4 +adstep,125,4 +acaciawoodendoubleslab,125,4 +acaciawoodendslab,125,4 +acaciawooddoubleslab,125,4 +acaciawooddslab,125,4 +acaciawdoubleslab,125,4 +acaciawdslab,125,4 +acaciadoublewoodenslab,125,4 +acaciadwoodenslab,125,4 +acaciadoublewoodslab,125,4 +acaciadwoodslab,125,4 +acaciadoublewslab,125,4 +acaciadwslab,125,4 +acaciadoubleslab,125,4 +acaciadslab,125,4 +adslab,125,4 +acaciawoodendoublehalfblock,125,4 +acaciawoodendhalfblock,125,4 +acaciawooddoublehalfblock,125,4 +acaciawooddhalfblock,125,4 +acaciawdoublehalfblock,125,4 +acaciawdhalfblock,125,4 +acaciadoublewoodenhalfblock,125,4 +acaciadwoodenhalfblock,125,4 +acaciadoublewoodhalfblock,125,4 +acaciadwoodhalfblock,125,4 +acaciadoublewhalfblock,125,4 +acaciadwhalfblock,125,4 +acaciadoublehalfblock,125,4 +acaciadhalfblock,125,4 +adhalfblock,125,4 +darkoakwoodendoublehalfblock,125,5 +darkoakwoodendhalfblock,125,5 +darkoakwooddoublehalfblock,125,5 +darkoakwooddhalfblock,125,5 +darkoakwdoublehalfblock,125,5 +darkoakwdhalfblock,125,5 +darkoakdoublewoodenhalfblock,125,5 +darkoakdwoodenhalfblock,125,5 +darkoakdoublewoodhalfblock,125,5 +darkoakdwoodhalfblock,125,5 +darkoakdoublewhalfblock,125,5 +darkoakdwhalfblock,125,5 +darkoakdoublehalfblock,125,5 +darkoakdhalfblock,125,5 +dodhalfblock,125,5 +darkoakwoodendoublestep,125,5 +darkoakwoodendstep,125,5 +darkoakwooddoublestep,125,5 +darkoakwooddstep,125,5 +darkoakwdoublestep,125,5 +darkoakwdstep,125,5 +darkoakdoublewoodenstep,125,5 +darkoakdwoodenstep,125,5 +darkoakdoublewoodstep,125,5 +darkoakdwoodstep,125,5 +darkoakdoublewstep,125,5 +darkoakdwstep,125,5 +darkoakdoublestep,125,5 +darkoakdstep,125,5 +dodstep,125,5 +darkoakwoodendoubleslab,125,5 +darkoakwoodendslab,125,5 +darkoakwooddoubleslab,125,5 +darkoakwooddslab,125,5 +darkoakwdoubleslab,125,5 +darkoakwdslab,125,5 +darkoakdoublewoodenslab,125,5 +darkoakdwoodenslab,125,5 +darkoakdoublewoodslab,125,5 +darkoakdwoodslab,125,5 +darkoakdoublewslab,125,5 +darkoakdwslab,125,5 +darkoakdoubleslab,125,5 +darkoakdslab,125,5 +dodslab,125,5 +woodenstep,126,0 +woodstep,126,0 +wstep,126,0 +woodenslab,126,0 +woodslab,126,0 +wslab,126,0 +woodenhalfblock,126,0 +woodhalfblock,126,0 +whalfblock,126,0 +oakwoodenstep,126,0 +oakwoodstep,126,0 +oakwstep,126,0 +oakstep,126,0 +ostep,126,0 +oakwoodenslab,126,0 +oakwoodslab,126,0 +oakwslab,126,0 +oakslab,126,0 +oslab,126,0 +oakwoodenhalfblock,126,0 +oakwoodhalfblock,126,0 +oakwhalfblock,126,0 +oakhalfblock,126,0 +ohalfblock,126,0 +sprucewoodenstep,126,1 +sprucewoodstep,126,1 +sprucewstep,126,1 +sprucestep,126,1 +sprucewoodenslab,126,1 +sprucewoodslab,126,1 +sprucewslab,126,1 +spruceslab,126,1 +sprucewoodenhalfblock,126,1 +sprucewoodhalfblock,126,1 +sprucewhalfblock,126,1 +sprucehalfblock,126,1 +darkwoodenstep,126,1 +darkwoodstep,126,1 +darkwstep,126,1 +darkstep,126,1 +darkwoodenslab,126,1 +darkwoodslab,126,1 +darkwslab,126,1 +darkslab,126,1 +darkwoodenhalfblock,126,1 +darkwoodhalfblock,126,1 +darkwhalfblock,126,1 +darkhalfblock,126,1 +birchwoodenstep,126,2 +birchwoodstep,126,2 +birchwstep,126,2 +birchstep,126,2 +birchwoodenslab,126,2 +birchwoodslab,126,2 +birchwslab,126,2 +birchslab,126,2 +birchwoodenhalfblock,126,2 +birchwoodhalfblock,126,2 +birchwhalfblock,126,2 +birchhalfblock,126,2 +lightwoodenstep,126,2 +lightwoodstep,126,2 +lightwstep,126,2 +lightstep,126,2 +lstep,126,2 +lightwoodenslab,126,2 +lightwoodslab,126,2 +lightwslab,126,2 +lightslab,126,2 +lslab,126,2 +lightwoodenhalfblock,126,2 +lightwoodhalfblock,126,2 +lightwhalfblock,126,2 +lighthalfblock,126,2 +lhalfblock,126,2 +junglewoodenstep,126,3 +junglewoodstep,126,3 +junglewstep,126,3 +junglestep,126,3 +jstep,126,3 +junglewoodenslab,126,3 +junglewoodslab,126,3 +junglewslab,126,3 +jungleslab,126,3 +jslab,126,3 +junglewoodenhalfblock,126,3 +junglewoodhalfblock,126,3 +junglewhalfblock,126,3 +junglehalfblock,126,3 +jhalfblock,126,3 +forestwoodenstep,126,3 +forestwoodstep,126,3 +forestwstep,126,3 +foreststep,126,3 +fstep,126,3 +forestwoodenslab,126,3 +forestwoodslab,126,3 +forestwslab,126,3 +forestslab,126,3 +fslab,126,3 +forestwoodenhalfblock,126,3 +forestwoodhalfblock,126,3 +forestwhalfblock,126,3 +foresthalfblock,126,3 +fhalfblock,126,3 +acaciawoodenstep,126,4 +acaciawoodstep,126,4 +acaciawstep,126,4 +acaciastep,126,4 +astep,126,4 +acaciawoodenslab,126,4 +acaciawoodslab,126,4 +acaciawslab,126,4 +acaciaslab,126,4 +aslab,126,4 +acaciawoodenhalfblock,126,4 +acaciawoodhalfblock,126,4 +acaciawhalfblock,126,4 +acaciahalfblock,126,4 +ahalfblock,126,4 +darkoakwoodenstep,126,5 +darkoakwoodstep,126,5 +darkoakwstep,126,5 +darkoakstep,126,5 +dostep,126,5 +darkoakwoodenslab,126,5 +darkoakwoodslab,126,5 +darkoakwslab,126,5 +darkoakslab,126,5 +doslab,126,5 +darkoakwoodenhalfblock,126,5 +darkoakwoodhalfblock,126,5 +darkoakwhalfblock,126,5 +darkoakhalfblock,126,5 +dohalfblock,126,5 +cocoaplant,127,0 +cocoplant,127,0 +cplant,127,0 +cocoafruit,127,0 +cocofruit,127,0 +cfruit,127,0 +cocoapod,127,0 +cocopod,127,0 +cpod,127,0 +sandstonestairs,128,0 +sandstairs,128,0 +sandsstairs,128,0 +sstonestairs,128,0 +ssstairs,128,0 +sandstair,128,0 +sandstonestair,128,0 +sandsstair,128,0 +sstonestair,128,0 +ssstair,128,0 +emeraldore,129,0 +eore,129,0 +oreemerald,129,0 +oree,129,0 +enderchest,130,0 +endchest,130,0 +echest,130,0 +chestender,130,0 +chestend,130,0 +cheste,130,0 +endercontainer,130,0 +endcontainer,130,0 +econtainer,130,0 +tripwirehook,131,0 +tripwire,131,0 +trip,131,0 +tripwirelever,131,0 +triphook,131,0 +emeraldblock,133,0 +blockemerald,133,0 +eblock,133,0 +blocke,133,0 +sprucewoodenstairs,134,0 +sprucewoodstairs,134,0 +sprucewstairs,134,0 +sprucestairs,134,0 +darkwoodenstairs,134,0 +darkwoodstairs,134,0 +darkwstairs,134,0 +darkstairs,134,0 +dstairs,134,0 +sprucewoodenstair,134,0 +sprucewoodstair,134,0 +sprucewstair,134,0 +sprucestair,134,0 +darkwoodenstair,134,0 +darkwoodstair,134,0 +darkwstair,134,0 +darkstair,134,0 +dstair,134,0 +birchwoodenstairs,135,0 +birchwoodstairs,135,0 +birchwstairs,135,0 +birchstairs,135,0 +lightwoodenstairs,135,0 +lightwoodstairs,135,0 +lightwstairs,135,0 +lightstairs,135,0 +lstairs,135,0 +birchwoodenstair,135,0 +birchwoodstair,135,0 +birchwstair,135,0 +birchstair,135,0 +lightwoodenstair,135,0 +lightwoodstair,135,0 +lightwstair,135,0 +lightstair,135,0 +lstair,135,0 +junglewoodenstairs,136,0 +junglewoodstairs,136,0 +junglewstairs,136,0 +junglestairs,136,0 +jstairs,136,0 +forestwoodenstairs,136,0 +forestwoodstairs,136,0 +forestwstairs,136,0 +foreststairs,136,0 +fstairs,136,0 +junglewoodenstair,136,0 +junglewoodstair,136,0 +junglewstair,136,0 +junglestair,136,0 +jstair,136,0 +forestwoodenstair,136,0 +forestwoodstair,136,0 +forestwstair,136,0 +foreststair,136,0 +fstair,136,0 +commandblock,137,0 +blockcommand,137,0 +cmdblock,137,0 +blockcmd,137,0 +macroblock,137,0 +blockmacro,137,0 +beacon,138,0 +beaconblock,138,0 +cobblestonewall,139,0 +cstonewall,139,0 +cobblewall,139,0 +cobblestonefence,139,0 +cstonefence,139,0 +cobblefence,139,0 +cswall,139,0 +csfence,139,0 +cwall,139,0 +cfence,139,0 +mosscobblestonewall,139,1 +mosscstonewall,139,1 +mosscobblewall,139,1 +mcobblestonewall,139,1 +mcstonewall,139,1 +mcobblewall,139,1 +mosscobblestonefence,139,1 +mosscstonefence,139,1 +mosscobblefence,139,1 +mcobblestonefence,139,1 +mcstonefence,139,1 +mcobblefence,139,1 +mcswall,139,0 +mcsfence,139,0 +mcwall,139,0 +mcfence,139,0 +plantedcarrot,141,0 +plantcarrot,141,0 +carrots,141,0 +growingcarrot,141,0 +potatoplant,142,0 +potatoes,142,0 +plantedpotato,142,0 +plantpotato,142,0 +growingpotato,142,0 +woodenbutton,143,0 +woodenplankbutton,143,0 +woodplankbutton,143,0 +wplankbutton,143,0 +plankbutton,143,0 +woodbutton,143,0 +wbutton,143,0 +anvil,145,0 +slightlydamagedanvil,145,1 +slightdamageanvil,145,1 +damagedanvil,145,1 +verydamagedanvil,145,2 +trapchest,146,0 +trappedchest,146,0 +chesttrapped,146,0 +chesttrap,146,0 +goldpressureplate,147,0 +weightedgoldpressureplate,147,0 +weightgoldpressureplate,147,0 +wgoldpressureplate,147,0 +weightedgoldpressplate,147,0 +weightgoldpressplate,147,0 +wgoldpressplate,147,0 +goldpressplate,147,0 +weightedgoldpplate,147,0 +weightgoldpplate,147,0 +wgoldpplate,147,0 +goldpplate,147,0 +weightedgoldplate,147,0 +weightgoldplate,147,0 +wgoldplate,147,0 +goldplate,147,0 +weightedgpressureplate,147,0 +weightgpressureplate,147,0 +wgpressureplate,147,0 +gpressureplate,147,0 +weightedgpressplate,147,0 +weightgpressplate,147,0 +wgpressplate,147,0 +gpressplate,147,0 +weightedgpplate,147,0 +weightgpplate,147,0 +wgpplate,147,0 +gpplate,147,0 +weightedgplate,147,0 +weightgplate,147,0 +wgplate,147,0 +gplate,147,0 +ironpressureplate,148,0 +weightedironpressureplate,148,0 +weightironpressureplate,148,0 +wironpressureplate,148,0 +weightedironpressplate,148,0 +weightironpressplate,148,0 +wironpressplate,148,0 +ironpressplate,148,0 +weightedironpplate,148,0 +weightironpplate,148,0 +wironpplate,148,0 +ironpplate,148,0 +weightedironplate,148,0 +weightironplate,148,0 +wironplate,148,0 +ironplate,148,0 +weightedipressureplate,148,0 +weightipressureplate,148,0 +wipressureplate,148,0 +ipressureplate,148,0 +weightedipressplate,148,0 +weightipressplate,148,0 +wipressplate,148,0 +ipressplate,148,0 +weightedipplate,148,0 +weightipplate,148,0 +wipplate,148,0 +ipplate,148,0 +weightediplate,148,0 +weightiplate,148,0 +wiplate,148,0 +iplate,148,0 +daylightsensor,151,0 +daylightsense,151,0 +lightsensor,151,0 +lightsense,151,0 +daysensor,151,0 +daysense,151,0 +timesensor,151,0 +timesense,151,0 +redstoneblock,152,0 +rstoneblock,152,0 +redsblock,152,0 +rsblock,152,0 +blockredstone,152,0 +blockrstone,152,0 +blockreds,152,0 +blockrs,152,0 +netherquartzore,153,0 +hellquartzore,153,0 +deathquartzore,153,0 +nquartzore,153,0 +hquartzore,153,0 +dquartzore,153,0 +quartzore,153,0 +netherqore,153,0 +hellqore,153,0 +deathqore,153,0 +nqore,153,0 +hqore,153,0 +dqore,153,0 +qore,153,0 +hopper,154,0 +chestpuller,154,0 +chestpull,154,0 +cheststorer,154,0 +cheststore,154,0 +itempuller,154,0 +itempull,154,0 +itemstorer,154,0 +itemstore,154,0 +quartzblock,155,0 +netherquartzblock,155,0 +nqblock,155,0 +qblock,155,0 +chiseledquartzblock,155,1 +chiselquartzblock,155,1 +cquartzblock,155,1 +cqblock,155,1 +pillarquartzblock,155,2 +pquartzblock,155,2 +pqblock,155,2 +quartzstairs,156,0 +qstairs,156,0 +quartzstair,156,0 +qstair,156,0 +activatorrails,157,0 +activaterails,157,0 +triggerrails,157,0 +arails,157,0 +trails,157,0 +activatorrail,157,0 +activaterail,157,0 +triggerrail,157,0 +arail,157,0 +trail,157,0 +activatortrack,157,0 +activatetrack,157,0 +triggertrack,157,0 +atrack,157,0 +ttrack,157,0 +dropper,158,0 +drop,158,0 +chestdispenser,158,0 +chestdispense,158,0 +chestdropper,158,0 +chestdrop,158,0 +whiteclay,159,0 +whitesclay,159,0 +whitestainedclay,159,0 +wclay,159,0 +wsclay,159,0 +wstainedclay,159,0 +sclay,159,0 +stainedclay,159,0 +orangeclay,159,1 +orangesclay,159,1 +orangestainedclay,159,1 +oclay,159,1 +osclay,159,1 +ostainedclay,159,1 +magentaclay,159,2 +magentasclay,159,2 +magentastainedclay,159,2 +mclay,159,2 +msclay,159,2 +mstainedclay,159,2 +lightblueclay,159,3 +lightbluesclay,159,3 +lightbluestainedclay,159,3 +lblueclay,159,3 +lbluesclay,159,3 +lbluestainedclay,159,3 +lightbluclay,159,3 +lightblusclay,159,3 +lightblustainedclay,159,3 +lbluclay,159,3 +lblusclay,159,3 +lblustainedclay,159,3 +lbclay,159,3 +lbsclay,159,3 +lbstainedclay,159,3 +yellowclay,159,4 +yellowsclay,159,4 +yellowstainedclay,159,4 +yclay,159,4 +ysclay,159,4 +ystainedclay,159,4 +lightgreenclay,159,5 +lightgreensclay,159,5 +lightgreenstainedclay,159,5 +lgreenclay,159,5 +lgreensclay,159,5 +lgreenstainedclay,159,5 +lightgreclay,159,5 +lightgresclay,159,5 +lightgrestainedclay,159,5 +lgreclay,159,5 +lgresclay,159,5 +lgrestainedclay,159,5 +limeclay,159,5 +limesclay,159,5 +limestainedclay,159,5 +lclay,159,5 +lsclay,159,5 +lstainedclay,159,5 +pinkclay,159,6 +pinksclay,159,6 +pinkstainedclay,159,6 +piclay,159,6 +pisclay,159,6 +pistainedclay,159,6 +darkgrayclay,159,7 +darkgraysclay,159,7 +darkgraystainedclay,159,7 +dgrayclay,159,7 +dgraysclay,159,7 +dgraystainedclay,159,7 +darkgreyclay,159,7 +darkgreeysclay,159,7 +darkgreystainedclay,159,7 +dgreyclay,159,7 +dgreysclay,159,7 +dgreystainedclay,159,7 +darkgraclay,159,7 +darkgrasclay,159,7 +darkgrastainedclay,159,7 +dgraclay,159,7 +dgrasclay,159,7 +dgrastainedclay,159,7 +grayclay,159,7 +graysclay,159,7 +graystainedclay,159,7 +greyclay,159,7 +greysclay,159,7 +greystainedclay,159,7 +graclay,159,7 +grasclay,159,7 +grastainedclay,159,7 +lightgrayclay,159,8 +lightgraysclay,159,8 +lightgraystainedclay,159,8 +lgrayclay,159,8 +lgraysclay,159,8 +lgraystainedclay,159,8 +lightgreyclay,159,8 +lightgreysclay,159,8 +lightgreystainedclay,159,8 +lgreyclay,159,8 +lgreysclay,159,8 +lgreystainedclay,159,8 +lightgraclay,159,8 +lightgrasclay,159,8 +lightgrastainedclay,159,8 +lgraclay,159,8 +lgrasclay,159,8 +lgrastainedclay,159,8 +silverclay,159,8 +silversclay,159,8 +silverstainedclay,159,8 +siclay,159,8 +siasclay,159,8 +siastainedclay,159,8 +cyanclay,159,9 +cyansclay,159,9 +cyanstainedclay,159,9 +cclay,159,9 +csclay,159,9 +cstainedclay,159,9 +purpleclay,159,10 +purplesclay,159,10 +purplestainedclay,159,10 +puclay,159,10 +pusclay,159,10 +pustainedclay,159,10 +blueclay,159,11 +bluesclay,159,11 +bluestainedclay,159,11 +bluclay,159,11 +blusclay,159,11 +blustainedclay,159,11 +brownclay,159,12 +brownsclay,159,12 +brownstainedclay,159,12 +broclay,159,12 +brosclay,159,12 +brostainedclay,159,12 +darkgreenclay,159,13 +darkgreensclay,159,13 +darkgreenstainedclay,159,13 +dgreenclay,159,13 +dgreensclay,159,13 +dgreenstainedclay,159,13 +greenclay,159,13 +greensclay,159,13 +greenstainedclay,159,13 +darkgreclay,159,13 +darkgresclay,159,13 +darkgrestainedclay,159,13 +dgreclay,159,13 +dgresclay,159,13 +dgrestainedclay,159,13 +greclay,159,13 +gresclay,159,13 +grestainedclay,159,13 +redclay,159,14 +redsclay,159,14 +redstainedclay,159,14 +rclay,159,14 +rsclay,159,14 +rstainedclay,159,14 +blackclay,159,15 +blacksclay,159,15 +blackstainedclay,159,15 +blaclay,159,15 +blasclay,159,15 +blastainedclay,159,15 +whiteglasspane,160,0 +whitesglasspane,160,0 +whitestainedglasspane,160,0 +wglasspane,160,0 +wsglasspane,160,0 +wstainedglasspane,160,0 +sglasspane,160,0 +stainedglasspane,160,0 +orangeglasspane,160,1 +orangesglasspane,160,1 +orangestainedglasspane,160,1 +oglasspane,160,1 +osglasspane,160,1 +ostainedglasspane,160,1 +magentaglasspane,160,2 +magentasglasspane,160,2 +magentastainedglasspane,160,2 +mglasspane,160,2 +msglasspane,160,2 +mstainedglasspane,160,2 +lightblueglasspane,160,3 +lightbluesglasspane,160,3 +lightbluestainedglasspane,160,3 +lblueglasspane,160,3 +lbluesglasspane,160,3 +lbluestainedglasspane,160,3 +lightbluglasspane,160,3 +lightblusglasspane,160,3 +lightblustainedglasspane,160,3 +lbluglasspane,160,3 +lblusglasspane,160,3 +lblustainedglasspane,160,3 +lbglasspane,160,3 +lbsglasspane,160,3 +lbstainedglasspane,160,3 +yellowglasspane,160,4 +yellowsglasspane,160,4 +yellowstainedglasspane,160,4 +yglasspane,160,4 +ysglasspane,160,4 +ystainedglasspane,160,4 +lightgreenglasspane,160,5 +lightgreensglasspane,160,5 +lightgreenstainedglasspane,160,5 +lgreenglasspane,160,5 +lgreensglasspane,160,5 +lgreenstainedglasspane,160,5 +lightgreglasspane,160,5 +lightgresglasspane,160,5 +lightgrestainedglasspane,160,5 +lgreglasspane,160,5 +lgresglasspane,160,5 +lgrestainedglasspane,160,5 +limeglasspane,160,5 +limesglasspane,160,5 +limestainedglasspane,160,5 +lglasspane,160,5 +lsglasspane,160,5 +lstainedglasspane,160,5 +pinkglasspane,160,6 +pinksglasspane,160,6 +pinkstainedglasspane,160,6 +piglasspane,160,6 +pisglasspane,160,6 +pistainedglasspane,160,6 +darkgrayglasspane,160,7 +darkgraysglasspane,160,7 +darkgraystainedglasspane,160,7 +dgrayglasspane,160,7 +dgraysglasspane,160,7 +dgraystainedglasspane,160,7 +darkgreyglasspane,160,7 +darkgreysglasspane,160,7 +darkgreystainedglasspane,160,7 +dgreyglasspane,160,7 +dgreysglasspane,160,7 +dgreystainedglasspane,160,7 +darkgraglasspane,160,7 +darkgrasglasspane,160,7 +darkgrastainedglasspane,160,7 +dgraglasspane,160,7 +dgrasglasspane,160,7 +dgrastainedglasspane,160,7 +grayglasspane,160,7 +graysglasspane,160,7 +graystainedglasspane,160,7 +greyglasspane,160,7 +greysglasspane,160,7 +greystainedglasspane,160,7 +graglasspane,160,7 +grasglasspane,160,7 +grastainedglasspane,160,7 +lightgrayglasspane,160,8 +lightgraysglasspane,160,8 +lightgraystainedglasspane,160,8 +lgrayglasspane,160,8 +lgraysglasspane,160,8 +lgraystainedglasspane,160,8 +lightgreyglasspane,160,8 +lightgreysglasspane,160,8 +lightgreystainedglasspane,160,8 +lgreyglasspane,160,8 +lgreysglasspane,160,8 +lgreystainedglasspane,160,8 +lightgraglasspane,160,8 +lightgrasglasspane,160,8 +lightgrastainedglasspane,160,8 +lgraglasspane,160,8 +lgrasglasspane,160,8 +lgrastainedglasspane,160,8 +silverglasspane,160,8 +silversglasspane,160,8 +silverstainedglasspane,160,8 +siglasspane,160,8 +siasglasspane,160,8 +siastainedglasspane,160,8 +cyanglasspane,160,9 +cyansglasspane,160,9 +cyanstainedglasspane,160,9 +cglasspane,160,9 +csglasspane,160,9 +cstainedglasspane,160,9 +purpleglasspane,160,10 +purplesglasspane,160,10 +purplestainedglasspane,160,10 +puglasspane,160,10 +pusglasspane,160,10 +pustainedglasspane,160,10 +blueglasspane,160,11 +bluesglasspane,160,11 +bluestainedglasspane,160,11 +bluglasspane,160,11 +blusglasspane,160,11 +blustainedglasspane,160,11 +brownglasspane,160,12 +brownsglasspane,160,12 +brownstainedglasspane,160,12 +broglasspane,160,12 +brosglasspane,160,12 +brostainedglasspane,160,12 +darkgreenglasspane,160,13 +darkgreensglasspane,160,13 +darkgreenstainedglasspane,160,13 +dgreenglasspane,160,13 +dgreensglasspane,160,13 +dgreenstainedglasspane,160,13 +greenglasspane,160,13 +greensglasspane,160,13 +greenstainedglasspane,160,13 +darkgreglasspane,160,13 +darkgresglasspane,160,13 +darkgrestainedglasspane,160,13 +dgreglasspane,160,13 +dgresglasspane,160,13 +dgrestainedglasspane,160,13 +greglasspane,160,13 +gresglasspane,160,13 +grestainedglasspane,160,13 +redglasspane,160,14 +redsglasspane,160,14 +redstainedglasspane,160,14 +rglasspane,160,14 +rsglasspane,160,14 +rstainedglasspane,160,14 +blackglasspane,160,15 +blacksglasspane,160,15 +blackstainedglasspane,160,15 +blaglasspane,160,15 +blasglasspane,160,15 +blastainedglasspane,160,15 +acacialeaves,161,0 +acaciatreeleaves,161,0 +acacialogleaves,161,0 +acaciatrunkleaves,161,0 +acaciawoodleaves,161,0 +aleaves,161,0 +atreeleaves,161,0 +alogleaves,161,0 +atrunkleaves,161,0 +awoodleaves,161,0 +acacialeave,161,0 +acaciatreeleave,161,0 +acacialogleave,161,0 +acaciatrunkleave,161,0 +acaciawoodleave,161,0 +aleave,161,0 +atreeleave,161,0 +alogleave,161,0 +atrunkleave,161,0 +awoodleave,161,0 +acaciatreeleaf,161,0 +acacialogleaf,161,0 +acaciatrunkleaf,161,0 +acaciawoodleaf,161,0 +aleaf,161,0 +atreeleaf,161,0 +alogleaf,161,0 +atrunkleaf,161,0 +awoodleaf,161,0 +darkoakleaves,161,1 +darkoaktreeleaves,161,1 +darkoaklogleaves,161,1 +darkoaktrunkleaves,161,1 +darkoakwoodleaves,161,1 +doakleaves,161,1 +doaktreeleaves,161,1 +doaklogleaves,161,1 +doaktrunkleaves,161,1 +doakwoodleaves,161,1 +doleaves,161,1 +dotreeleaves,161,1 +dologleaves,161,1 +dotrunkleaves,161,1 +dowoodleaves,161,1 +darkoakleave,161,1 +darkoaktreeleave,161,1 +darkoaklogleave,161,1 +darkoaktrunkleave,161,1 +darkoakwoodleave,161,1 +doakleave,161,1 +doaktreeleave,161,1 +doaklogleave,161,1 +doaktrunkleave,161,1 +doakwoodleave,161,1 +doleave,161,1 +dotreeleave,161,1 +dologleave,161,1 +dotrunkleave,161,1 +dowoodleave,161,1 +darkoaktreeleaf,161,1 +darkoaklogleaf,161,1 +darkoaktrunkleaf,161,1 +darkoakwoodleaf,161,1 +doakleaf,161,1 +doaktreeleaf,161,1 +doaklogleaf,161,1 +doaktrunkleaf,161,1 +doakwoodleaf,161,1 +doleaf,161,1 +dotreeleaf,161,1 +dologleaf,161,1 +dotrunkleaf,161,1 +dowoodleaf,161,1 +acacia,162,0 +acaciatree,162,0 +acacialog,162,0 +acaciatrunk,162,0 +acaciawood,162,0 +atree,162,0 +alog,162,0 +atrunk,162,0 +awood,162,0 +darkoak,162,1 +darkoaktree,162,1 +darkoaklog,162,1 +darkoaktrunk,162,1 +darkoakwood,162,1 +doak,162,1 +doaktree,162,1 +doaklog,162,1 +doaktrunk,162,1 +doakwood,162,1 +dotree,162,1 +dolog,162,1 +dotrunk,162,1 +dowood,162,1 +acaciawoodenstairs,163,0 +acaciawoodstairs,163,0 +acaciawstairs,163,0 +acaciastairs,163,0 +awoodenstairs,163,0 +awoodstairs,163,0 +awstairs,163,0 +astairs,163,0 +acaciawoodenstair,163,0 +acaciawoodstair,163,0 +acaciawstair,163,0 +acaciastair,163,0 +awoodenstair,163,0 +awoodstair,163,0 +awstair,163,0 +astair,163,0 +darkoakwoodenstairs,164,0 +darkoakwoodstairs,164,0 +darkoakwstairs,164,0 +darkoakstairs,164,0 +doakwoodenstairs,164,0 +doakwoodstairs,164,0 +doakwstairs,164,0 +doakstairs,164,0 +dowoodenstairs,164,0 +dowoodstairs,164,0 +dowstairs,164,0 +dostairs,164,0 +darkoakwoodenstair,164,0 +darkoakwoodstair,164,0 +darkoakwstair,164,0 +darkoakstair,164,0 +doakwoodenstair,164,0 +doakwoodstair,164,0 +doakwstair,164,0 +doakstair,164,0 +dowoodenstair,164,0 +dowoodstair,164,0 +dowstair,164,0 +dostair,164,0 +hay,170,0 +hayblock,170,0 +haybale,170,0 +baleofhay,170,0 +hayofbale,170,0 +whitecarpet,171,0 +whitefloor,171,0 +wcarpet,171,0 +wfloor,171,0 +carpet,171,0 +floor,171,0 +orangecarpet,171,1 +orangefloor,171,1 +ocarpet,171,1 +ofloor,171,1 +magentacarpet,171,2 +magentafloor,171,2 +mcarpet,171,2 +mfloor,171,2 +lightbluecarpet,171,3 +lightbluefloor,171,3 +lbluecarpet,171,3 +lbluefloor,171,3 +lbcarpet,171,3 +lbfloor,171,3 +lightblucarpet,171,3 +lightblufloor,171,3 +lblucarpet,171,3 +lblufloor,171,3 +yellowcarpet,171,4 +yellowfloor,171,4 +ycarpet,171,4 +yfloor,171,4 +lightgreencarpet,171,5 +lightgreenfloor,171,5 +lgreencarpet,171,5 +lgreenfloor,171,5 +lightgrecarpet,171,5 +lightgrefloor,171,5 +lgrecarpet,171,5 +lgrefloor,171,5 +limecarpet,171,5 +limefloor,171,5 +lcarpet,171,5 +lfloor,171,5 +pinkcarpet,171,6 +pinkfloor,171,6 +picarpet,171,6 +pifloor,171,6 +darkgraycarpet,171,7 +darkgrayfloor,171,7 +dgraycarpet,171,7 +dgrayfloor,171,7 +darkgreycarpet,171,7 +darkgreyfloor,171,7 +dgreycarpet,171,7 +dgreyfloor,171,7 +darkgracarpet,171,7 +darkgrafloor,171,7 +dgracarpet,171,7 +dgrafloor,171,7 +graycarpet,171,7 +grayfloor,171,7 +greycarpet,171,7 +greyfloor,171,7 +gracarpet,171,7 +grafloor,171,7 +lightgraycarpet,171,8 +lightgrayfloor,171,8 +lgraycarpet,171,8 +lgrayfloor,171,8 +lightgreycarpet,171,8 +lightgreyfloor,171,8 +lgreycarpet,171,8 +lgreyfloor,171,8 +lightgracarpet,171,8 +lightgrafloor,171,8 +lgracarpet,171,8 +lgrafloor,171,8 +silvercarpet,171,8 +silverfloor,171,8 +sicarpet,171,8 +siafloor,171,8 +cyancarpet,171,9 +cyanfloor,171,9 +ccarpet,171,9 +cfloor,171,9 +purplecarpet,171,10 +purplefloor,171,10 +pucarpet,171,10 +pufloor,171,10 +bluecarpet,171,11 +bluefloor,171,11 +blucarpet,171,11 +blufloor,171,11 +browncarpet,171,12 +brownfloor,171,12 +brocarpet,171,12 +brofloor,171,12 +darkgreencarpet,171,13 +darkgreenfloor,171,13 +dgreencarpet,171,13 +dgreenfloor,171,13 +greencarpet,171,13 +greenfloor,171,13 +darkgrecarpet,171,13 +darkgrefloor,171,13 +dgrecarpet,171,13 +dgrefloor,171,13 +grecarpet,171,13 +grefloor,171,13 +redcarpet,171,14 +redfloor,171,14 +rcarpet,171,14 +rfloor,171,14 +blackcarpet,171,15 +blackfloor,171,15 +blacarpet,171,15 +blafloor,171,15 +hardenedclay,172,0 +hardclay,172,0 +hclay,172,0 +coalblock,173,0 +blockcoal,173,0 +coblock,173,0 +blockco,173,0 +coalb,173,0 +bcoal,173,0 +packedice,174,0 +packice,174,0 +solidice,174,0 +sunflower,175,0 +yellowsunflower,175,0 +lilac,175,1 +magentalilac,175,1 +syringa,175,1 +longtallgrass,175,2 +extratallgrass,175,2 +doubletallgrass,175,2 +largetallgrass,175,2 +longtgrass,175,2 +extratgrass,175,2 +doubletgrass,175,2 +largetgrass,175,2 +ltgrass,175,2 +etgrass,175,2 +dtgrass,175,2 +bigfern,175,3 +largefern,175,3 +doublefern,175,3 +bfern,175,3 +lfern,175,3 +dfern,175,3 +rosebush,175,4 +redrosebush,175,4 +peony,175,5 +pinkpeony,175,5 +paeonia,175,5 +ironshovel,256,0 +ironspade,256,0 +ishovel,256,0 +ispade,256,0 +steelshovel,256,0 +steelspade,256,0 +ironpickaxe,257,0 +ironpick,257,0 +steelpickaxe,257,0 +steelpick,257,0 +ipickaxe,257,0 +ipick,257,0 +ironaxe,258,0 +iaxe,258,0 +steelaxe,258,0 +flintandsteel,259,0 +flintandiron,259,0 +flintandtinder,259,0 +flintnsteel,259,0 +flintniron,259,0 +flintntinder,259,0 +flintsteel,259,0 +flintiron,259,0 +flinttinder,259,0 +lighter,259,0 +apple,260,0 +normalapple,260,0 +redapple,260,0 +bow,261,0 +arrow,262,0 +coal,263,0 +charcoal,263,1 +ccoal,263,1 +diamond,264,0 +crystal,264,0 +ironingot,265,0 +ironbar,265,0 +ironi,265,0 +steelingot,265,0 +steelbar,265,0 +steeli,265,0 +iingot,265,0 +ibar,265,0 +ingotiron,265,0 +bariron,265,0 +iiron,265,0 +ingotsteel,265,0 +barsteel,265,0 +isteel,265,0 +ingoti,265,0 +bari,265,0 +goldingot,266,0 +goldbar,266,0 +goldi,266,0 +gingot,266,0 +gbar,266,0 +ingotgold,266,0 +bargold,266,0 +igold,266,0 +ingotg,266,0 +barg,266,0 +ironsword,267,0 +steelsword,267,0 +isword,267,0 +woodensword,268,0 +woodsword,268,0 +wsword,268,0 +woodenshovel,269,0 +woodenspade,269,0 +woodshovel,269,0 +woodspade,269,0 +wshovel,269,0 +wspade,269,0 +woodenpickaxe,270,0 +woodenpick,270,0 +woodpickaxe,270,0 +woodpick,270,0 +wpickaxe,270,0 +wpick,270,0 +woodenaxe,271,0 +woodaxe,271,0 +waxe,271,0 +stonesword,272,0 +cobblestonesword,272,0 +cstonesword,272,0 +cssword,272,0 +ssword,272,0 +stoneshovel,273,0 +cobblestoneshovel,273,0 +cobblestonespade,273,0 +cstoneshovel,273,0 +cstonespade,273,0 +stonespade,273,0 +csshovel,273,0 +csspade,273,0 +sshovel,273,0 +sspade,273,0 +stonepickaxe,274,0 +cobblestonepickaxe,274,0 +cobblestonepick,274,0 +cstonepickaxe,274,0 +cstonepick,274,0 +stonepick,274,0 +cspickaxe,274,0 +cspick,274,0 +spickaxe,274,0 +spick,274,0 +stoneaxe,275,0 +cobblestoneaxe,275,0 +cstoneaxe,275,0 +csaxe,275,0 +saxe,275,0 +diamondsword,276,0 +crystalsword,276,0 +dsword,276,0 +diamondshovel,277,0 +diamondspade,277,0 +crystalshovel,277,0 +crystalspade,277,0 +dshovel,277,0 +dspade,277,0 +diamondpickaxe,278,0 +diamondpick,278,0 +crystalpickaxe,278,0 +crystalpick,278,0 +dpickaxe,278,0 +dpick,278,0 +diamondaxe,279,0 +crystalaxe,279,0 +daxe,279,0 +stick,280,0 +twig,280,0 +branch,280,0 +bowl,281,0 +woodenbowl,281,0 +woodbowl,281,0 +mushroomsoup,282,0 +mrsoup,282,0 +soup,282,0 +goldsword,283,0 +gsword,283,0 +goldshovel,284,0 +goldspade,284,0 +gshovel,284,0 +gspade,284,0 +goldpickaxe,285,0 +goldpick,285,0 +gpickaxe,285,0 +gpick,285,0 +goldaxe,286,0 +gaxe,286,0 +string,287,0 +thread,287,0 +feather,288,0 +gunpowder,289,0 +sulfur,289,0 +woodenhoe,290,0 +woodhoe,290,0 +whoe,290,0 +stonehoe,291,0 +cobblestonehoe,291,0 +cstonehoe,291,0 +cshoe,291,0 +shoe,291,0 +ironhoe,292,0 +steelhoe,292,0 +ihoe,292,0 +diamondhoe,293,0 +crystalhoe,293,0 +dhoe,293,0 +goldhoe,294,0 +ghoe,294,0 +seeds,295,0 +seed,295,0 +wheat,296,0 +crops,296,0 +crop,296,0 +bread,297,0 +leatherhelmet,298,0 +leatherhelm,298,0 +leatherhat,298,0 +leathercoif,298,0 +lhelmet,298,0 +lhelm,298,0 +lhat,298,0 +lcoif,298,0 +leatherchestplate,299,0 +leatherplatebody,299,0 +leatherplate,299,0 +leathershirt,299,0 +leathertunic,299,0 +lchestplate,299,0 +lplatebody,299,0 +lplate,299,0 +lshirt,299,0 +ltunic,299,0 +leatherleggings,300,0 +leatherlegs,300,0 +leatherpants,300,0 +lleggings,300,0 +llegs,300,0 +lpants,300,0 +leatherboots,301,0 +leathershoes,301,0 +lboots,301,0 +lshoes,301,0 +chainmailhelmet,302,0 +chainmailhelm,302,0 +chainmailhat,302,0 +chainmailcoif,302,0 +chainmhelmet,302,0 +chainmhelm,302,0 +chainmhat,302,0 +chainmcoif,302,0 +cmailhelmet,302,0 +cmailhelm,302,0 +cmailhat,302,0 +cmailcoif,302,0 +chainhelmet,302,0 +chainhelm,302,0 +chainhat,302,0 +chaincoif,302,0 +cmhelmet,302,0 +cmhelm,302,0 +cmhat,302,0 +cmcoif,302,0 +chainmailchestplate,303,0 +chainmailplatebody,303,0 +chainmailplate,303,0 +chainmailshirt,303,0 +chainmailtunic,303,0 +chainmchestplate,303,0 +chainmplatebody,303,0 +chainmplate,303,0 +chainmshirt,303,0 +chainmtunic,303,0 +cmailchestplate,303,0 +cmailplatebody,303,0 +cmailplate,303,0 +cmailshirt,303,0 +cmailtunic,303,0 +chainchestplate,303,0 +chainplatebody,303,0 +chainplate,303,0 +chainshirt,303,0 +chaintunic,303,0 +cmchestplate,303,0 +cmplatebody,303,0 +cmplate,303,0 +cmshirt,303,0 +cmtunic,303,0 +chainmailleggings,304,0 +chainmaillegs,304,0 +chainmailpants,304,0 +chainmleggings,304,0 +chainmlegs,304,0 +chainmpants,304,0 +cmailleggings,304,0 +cmaillegs,304,0 +cmailpants,304,0 +chainleggings,304,0 +chainlegs,304,0 +chainpants,304,0 +cmleggings,304,0 +cmlegs,304,0 +cmpants,304,0 +chainmailboots,305,0 +chainmailshoes,305,0 +chainmboots,305,0 +chainmshoes,305,0 +cmailboots,305,0 +cmailshoes,305,0 +chainboots,305,0 +chainshoes,305,0 +cmboots,305,0 +cmshoes,305,0 +ironhelmet,306,0 +ironhelm,306,0 +ironhat,306,0 +ironcoif,306,0 +ihelmet,306,0 +ihelm,306,0 +ihat,306,0 +icoif,306,0 +steelhelmet,306,0 +steelhelm,306,0 +steelhat,306,0 +steelcoif,306,0 +shelmet,306,0 +shelm,306,0 +shat,306,0 +scoif,306,0 +ironchestplate,307,0 +ironplatebody,307,0 +ironshirt,307,0 +irontunic,307,0 +ichestplate,307,0 +iplatebody,307,0 +ishirt,307,0 +itunic,307,0 +steelchestplate,307,0 +steelplatebody,307,0 +steelplate,307,0 +steelshirt,307,0 +steeltunic,307,0 +schestplate,307,0 +splatebody,307,0 +sshirt,307,0 +stunic,307,0 +ironleggings,308,0 +ironlegs,308,0 +ironpants,308,0 +ileggings,308,0 +ilegs,308,0 +ipants,308,0 +steelleggings,308,0 +steellegs,308,0 +steelpants,308,0 +sleggings,308,0 +slegs,308,0 +spants,308,0 +ironboots,309,0 +ironshoes,309,0 +iboots,309,0 +ishoes,309,0 +steelboots,309,0 +steelshoes,309,0 +sboots,309,0 +sshoes,309,0 +diamondhelmet,310,0 +diamondhelm,310,0 +diamondhat,310,0 +diamondcoif,310,0 +dhelmet,310,0 +dhelm,310,0 +dhat,310,0 +dcoif,310,0 +crystalhelmet,310,0 +crystalhelm,310,0 +crystalhat,310,0 +crystalcoif,310,0 +chelmet,310,0 +chelm,310,0 +chat,310,0 +ccoif,310,0 +diamondchestplate,311,0 +diamondplatebody,311,0 +diamondplate,311,0 +diamondshirt,311,0 +diamondtunic,311,0 +dchestplate,311,0 +dplatebody,311,0 +dplate,311,0 +dshirt,311,0 +dtunic,311,0 +crystalchestplate,311,0 +crystalplatebody,311,0 +crystalplate,311,0 +crystalshirt,311,0 +crystaltunic,311,0 +cchestplate,311,0 +cplatebody,311,0 +cplate,311,0 +cshirt,311,0 +ctunic,311,0 +diamondleggings,312,0 +diamondlegs,312,0 +diamondpants,312,0 +dleggings,312,0 +dlegs,312,0 +dpants,312,0 +crystalleggings,312,0 +crystallegs,312,0 +crystalpants,312,0 +cleggings,312,0 +clegs,312,0 +cpants,312,0 +diamondboots,313,0 +diamondshoes,313,0 +dboots,313,0 +dshoes,313,0 +crystalboots,313,0 +crystalshoes,313,0 +cboots,313,0 +cshoes,313,0 +goldhelmet,314,0 +goldhelm,314,0 +goldhat,314,0 +goldcoif,314,0 +ghelmet,314,0 +ghelm,314,0 +ghat,314,0 +gcoif,314,0 +goldchestplate,315,0 +goldplatebody,315,0 +goldshirt,315,0 +goldtunic,315,0 +gchestplate,315,0 +gplatebody,315,0 +gplateplate,315,0 +gshirt,315,0 +gtunic,315,0 +goldleggings,316,0 +goldlegs,316,0 +goldpants,316,0 +gleggings,316,0 +glegs,316,0 +gpants,316,0 +goldboots,317,0 +goldshoes,317,0 +gboots,317,0 +gshoes,317,0 +flint,318,0 +pork,319,0 +porkchop,319,0 +rawpork,319,0 +rpork,319,0 +rawporkchop,319,0 +rporkchop,319,0 +cookedpork,320,0 +grilledpork,320,0 +grillpork,320,0 +gpork,320,0 +cookpork,320,0 +cpork,320,0 +grilledporkchop,320,0 +grillporkchop,320,0 +gporkchop,320,0 +cookedporkchop,320,0 +cookporkchop,320,0 +cporkchop,320,0 +bacon,320,0 +painting,321,0 +picture,321,0 +goldenapple,322,0 +goldapple,322,0 +gapple,322,0 +enchantedgoldenapple,322,1 +enchantedgoldapple,322,1 +enchantedgapple,322,1 +supergoldenapple,322,1 +supergoldapple,322,1 +supergapple,322,1 +magicalgoldenapple,322,1 +magicalgoldapple,322,1 +magicalgapple,322,1 +magicgoldenapple,322,1 +magicgoldapple,322,1 +magicgapple,322,1 +egoldenapple,322,1 +egoldapple,322,1 +egapple,322,1 +sgoldenapple,322,1 +sgoldapple,322,1 +sgapple,322,1 +mgoldenapple,322,1 +mgoldapple,322,1 +mgapple,322,1 +sign,323,0 +woodendoor,324,0 +wooddoor,324,0 +wdoor,324,0 +door,324,0 +bucket,325,0 +bukkit,325,0 +waterbucket,326,0 +waterbukkit,326,0 +wbucket,326,0 +wbukkit,326,0 +magmabucket,327,0 +magmabukkit,327,0 +lavabucket,327,0 +lavabukkit,327,0 +lbucket,327,0 +lbukkit,327,0 +minecart,328,0 +mcart,328,0 +cart,328,0 +saddle,329,0 +irondoor,330,0 +idoor,330,0 +steeldoor,330,0 +sdoor,330,0 +dooriron,330,0 +doori,330,0 +doorsteel,330,0 +doors,330,0 +redstonedust,331,0 +redstone,331,0 +rstonedust,331,0 +rstone,331,0 +redsdust,331,0 +reddust,331,0 +rsdust,331,0 +rdust,331,0 +snow,332,0 +snowball,332,0 +snball,332,0 +sball,332,0 +boat,333,0 +leather,334,0 +cowhide,334,0 +hide,334,0 +milkbucket,335,0 +milkbukkit,335,0 +mbucket,335,0 +mbukkit,335,0 +claybrick,336,0 +brick,336,0 +redbrick,336,0 +rbrick,336,0 +clayball,337,0 +cball,337,0 +clay,337,0 +reeds,338,0 +reed,338,0 +sugarcane,338,0 +scane,338,0 +bamboo,338,0 +paper,339,0 +papyrus,339,0 +book,340,0 +slimeball,341,0 +slball,341,0 +chestminecart,342,0 +storageminecart,342,0 +storagemcart,342,0 +chestmcart,342,0 +storagecart,342,0 +chestcart,342,0 +sminecart,342,0 +cminecart,342,0 +smcart,342,0 +cmcart,342,0 +scart,342,0 +ccart,342,0 +furnaceminecart,343,0 +engineminecart,343,0 +poweredminecart,343,0 +powerminecart,343,0 +enginemcart,343,0 +poweredmcart,343,0 +powermcart,343,0 +furnacemcart,343,0 +enginecart,343,0 +poweredcart,343,0 +powercart,343,0 +furnacecart,343,0 +eminecart,343,0 +pminecart,343,0 +fminecart,343,0 +emcart,343,0 +pmcart,343,0 +fmcart,343,0 +ecart,343,0 +pcart,343,0 +fcart,343,0 +egg,344,0 +compass,345,0 +fishingrod,346,0 +fishrod,346,0 +frod,346,0 +rod,346,0 +watch,347,0 +goldwatch,347,0 +goldclock,347,0 +gwatch,347,0 +gclock,347,0 +clock,347,0 +glowstonedust,348,0 +glowingstonedust,348,0 +lightstonedust,348,0 +lbdust,348,0 +gbdust,348,0 +lsdust,348,0 +gsdust,348,0 +rawfish,349,0 +rafish,349,0 +fish,349,0 +rawsalmonfish,349,1 +rasalmonfish,349,1 +salmonfish,349,1 +rawsalmon,349,1 +rasalmon,349,1 +salmon,349,1 +sfish,349,1 +fishs,349,1 +rawclownfish,349,2 +raclownfish,349,2 +clownfish,349,2 +rawnemo,349,2 +ranemo,349,2 +nemo,349,2 +nemofish,349,2 +fishnemo,349,2 +clfish,349,2 +fishcl,349,2 +nfish,349,2 +fishn,349,2 +rawpufferfish,349,3 +rapufferfish,349,3 +pufferfish,349,3 +pufffish,349,3 +fishpuff,349,3 +pfish,349,3 +fishp,349,3 +cookedfish,350,0 +cookfish,350,0 +cfish,350,0 +grilledfish,350,0 +grillfish,350,0 +gfish,350,0 +roastedfish,350,0 +roastfish,350,0 +rofish,350,0 +cookedsalmonfish,350,1 +cooksalmonfish,350,1 +csalmonfish,350,1 +grilledsalmonfish,350,1 +grillsalmonfish,350,1 +gsalmonfish,350,1 +roastedsalmonfish,350,1 +roastsalmonfish,350,1 +rosalmonfish,350,1 +cookedsalmon,350,1 +cooksalmon,350,1 +csalmon,350,1 +grilledsalmon,350,1 +grillsalmon,350,1 +gsalmon,350,1 +roastedsalmon,350,1 +roastsalmon,350,1 +rosalmon,350,1 +dye,351,0 +inksack,351,0 +inksac,351,0 +isack,351,0 +isac,351,0 +sack,351,0 +sac,351,0 +blackinksack,351,0 +blackinksac,351,0 +blackisack,351,0 +blackisac,351,0 +blacksack,351,0 +blacksac,351,0 +inksackblack,351,0 +inksacblack,351,0 +isackblack,351,0 +isacblack,351,0 +sackblack,351,0 +sacblack,351,0 +blackinksackcolour,351,0 +blackinksaccolour,351,0 +blackisackcolour,351,0 +blackisaccolour,351,0 +blacksackcolour,351,0 +blacksaccolour,351,0 +inksackblackcolour,351,0 +inksacblackcolour,351,0 +isackblackcolour,351,0 +isacclackcolour,351,0 +sackblackcolour,351,0 +sacblackcolour,351,0 +blackinksackcolor,351,0 +blackinksaccolor,351,0 +blackisackcolor,351,0 +blackisaccolor,351,0 +blacksackcolor,351,0 +blacksaccolor,351,0 +inksackblackcolor,351,0 +inksacblackcolor,351,0 +isackblackcolor,351,0 +isacblackcolor,351,0 +sackblackcolor,351,0 +sacblackcolor,351,0 +blackinksackdye,351,0 +blackinksacdye,351,0 +blackisackdye,351,0 +blackisacdye,351,0 +blacksackdye,351,0 +blacksacdye,351,0 +inksackblackdye,351,0 +inksacblackdye,351,0 +isackblackdye,351,0 +isacclackdye,351,0 +sackblackdye,351,0 +sacblackdye,351,0 +blackcolor,351,0 +blackdye,351,0 +rosered,351,1 +roseredcolor,351,1 +roseredcolour,351,1 +rosereddye,351,1 +redrosecolor,351,1 +redrosecolour,351,1 +redrosedye,351,1 +redr,351,1 +redrcolor,351,1 +redrcolour,351,1 +redrdye,351,1 +redcolor,351,1 +redcolour,351,1 +reddye,351,1 +cactusgreen,351,2 +greencactus,351,2 +cactusgreencolour,351,2 +greencactuscolour,351,2 +cactusgreencolor,351,2 +greencactuscolor,351,2 +cactusgreendye,351,2 +greencactusdye,351,2 +greencolour,351,2 +greencolor,351,2 +greendye,351,2 +cocoabeans,351,3 +cocoabean,351,3 +cocobeans,351,3 +cocobean,351,3 +cbeans,351,3 +cbean,351,3 +beans,351,3 +bean,351,3 +browncocoabeans,351,3 +browncocoabean,351,3 +browncocobeans,351,3 +browncocobean,351,3 +browncbeans,351,3 +browncbean,351,3 +brownbeans,351,3 +brownbean,351,3 +brownb,351,3 +cocoabeanscolour,351,3 +cocoabeancolour,351,3 +cocobeanscolour,351,3 +cocobeancolour,351,3 +cbeanscolour,351,3 +cbeancolour,351,3 +beanscolour,351,3 +beancolour,351,3 +browncocoabeanscolour,351,3 +browncocoabeancolour,351,3 +browncocobeanscolour,351,3 +browncocobeancolour,351,3 +browncbeanscolour,351,3 +browncbeancolour,351,3 +brownbeanscolour,351,3 +brownbeancolour,351,3 +brownbcolour,351,3 +cocoabeanscolor,351,3 +cocoabeancolor,351,3 +cocobeanscolor,351,3 +cocobeancolor,351,3 +cbeanscolor,351,3 +cbeancolor,351,3 +beanscolor,351,3 +beancolor,351,3 +browncocoabeanscolor,351,3 +browncocoabeancolor,351,3 +browncocobeanscolor,351,3 +browncocobeancolor,351,3 +browncbeanscolor,351,3 +browncbeancolor,351,3 +brownbeanscolor,351,3 +brownbeancolor,351,3 +brownbcolor,351,3 +cocoabeansdye,351,3 +cocoabeandye,351,3 +cocobeansdye,351,3 +cocobeandye,351,3 +cbeansdye,351,3 +cbeandye,351,3 +beansdye,351,3 +beandye,351,3 +browncocoabeansdye,351,3 +browncocoabeandye,351,3 +browncocobeansdye,351,3 +browncocobeandye,351,3 +browncbeansdye,351,3 +browncbeandye,351,3 +brownbeansdye,351,3 +brownbeandye,351,3 +brownbdye,351,3 +browncolour,351,3 +browncolor,351,3 +browndye,351,3 +lapislazuli,351,4 +bluelapislazuli,351,4 +bluelapisl,351,4 +bluelapis,351,4 +bluel,351,4 +lapislazuliblue,351,4 +lapislblue,351,4 +lapisblue,351,4 +lapisl,351,4 +lapis,351,4 +bluelapislazulicolour,351,4 +bluelapislcolour,351,4 +bluelapiscolour,351,4 +lapislazulibluecolour,351,4 +lapislbluecolour,351,4 +lapisbluecolour,351,4 +lapislazulicolour,351,4 +lapislcolour,351,4 +lapiscolour,351,4 +bluelapislazulicolor,351,4 +bluelapislcolor,351,4 +bluelapiscolor,351,4 +lapislazulibluecolor,351,4 +lapislbluecolor,351,4 +lapisbluecolor,351,4 +lapislazulicolor,351,4 +lapislcolor,351,4 +lapiscolor,351,4 +bluelapislazulidye,351,4 +bluelapisldye,351,4 +bluelapisdye,351,4 +lapislazulibluedye,351,4 +lapislbluedye,351,4 +lapisbluedye,351,4 +lapislazulidye,351,4 +lapisldye,351,4 +lapisdye,351,4 +bluecolour,351,4 +bluecolor,351,4 +bluedye,351,4 +purpledye,351,5 +purplecolour,351,5 +purplecolor,351,5 +cyandye,351,6 +cyancolour,351,6 +cyancolor,351,6 +lightgraydye,351,7 +lightgraycolour,351,7 +lightgraycolor,351,7 +lgraycolour,351,7 +lgraycolor,351,7 +lgraydye,351,7 +lightgreydye,351,7 +lightgreycolour,351,7 +lightgreycolor,351,7 +lgreycolour,351,7 +lgreycolor,351,7 +lgreydye,351,7 +silvercolour,351,7 +silvercolor,351,7 +silverdye,351,7 +darkgraydye,351,8 +darkgraycolour,351,8 +darkgraycolor,351,8 +dgraycolour,351,8 +dgraycolor,351,8 +dgraydye,351,8 +graycolour,351,8 +graycolor,351,8 +graydye,351,8 +darkgreydye,351,8 +darkgreycolour,351,8 +darkgreycolor,351,8 +dgreycolour,351,8 +dgreycolor,351,8 +dgreydye,351,8 +greycolour,351,8 +greycolor,351,8 +greydye,351,8 +pinkdye,351,9 +pinkcolour,351,9 +pinkcolor,351,9 +limedye,351,10 +limecolour,351,10 +limecolor,351,10 +dandelionyellow,351,11 +dandelionyellowcolour,351,11 +dandelionyellowcolor,351,11 +dandelionyellowdye,351,11 +yellowdandelioncolour,351,11 +yellowdandelioncolor,351,11 +yellowdandeliondye,351,11 +yellowd,351,11 +yellowdcolour,351,11 +yellowdcolor,351,11 +yellowddye,351,11 +dyellow,351,11 +dyellowcolour,351,11 +dyellowcolor,351,11 +dyellowdye,351,11 +yellowcolour,351,11 +yellowcolor,351,11 +yellowdye,351,11 +lightbluecolour,351,12 +lightbluecolor,351,12 +lightbluedye,351,12 +lbluecolour,351,12 +lbluecolor,351,12 +lbluedye,351,12 +magentacolour,351,13 +magentacolor,351,13 +magentadye,351,13 +orangecolour,351,14 +orangecolor,351,14 +orangedye,351,14 +bonemeal,351,15 +whitebonemeal,351,15 +whitebonemealcolour,351,15 +whitebonemealcolor,351,15 +whitebonemealdye,351,15 +bonemealwhite,351,15 +bonemealwhitecolour,351,15 +bonemealwhitecolor,351,15 +bonemealwhitedye,351,15 +whitebonem,351,15 +whitebonemcolour,351,15 +whitebonemcolor,351,15 +whitebonemdye,351,15 +bonemwhite,351,15 +bonemwhitecolour,351,15 +bonemwhitecolor,351,15 +bonemwhitedye,351,15 +bonemealcolour,351,15 +bonemealcolor,351,15 +bonemealdye,351,15 +bonem,351,15 +bonemcolour,351,15 +bonemcolor,351,15 +bonemdye,351,15 +whitecolour,351,15 +whitecolor,351,15 +whitedye,351,15 +bone,352,0 +sugar,353,0 +whitedust,353,0 +cake,354,0 +bed,355,0 +redstonerepeater,356,0 +redstonerepeat,356,0 +redstonedelayer,356,0 +redstonedelay,356,0 +redstonedioder,356,0 +redstonediode,356,0 +rstonerepeater,356,0 +rstonerepeat,356,0 +rstonedelayer,356,0 +rstonedelay,356,0 +rstonedioder,356,0 +rstonediode,356,0 +redsrepeater,356,0 +redsrepeat,356,0 +redsdelayer,356,0 +redsdelay,356,0 +redsdioder,356,0 +redsdiode,356,0 +rsrepeater,356,0 +rsrepeat,356,0 +rsdelayer,356,0 +rsdelay,356,0 +rsdioder,356,0 +rsdiode,356,0 +repeater,356,0 +repeat,356,0 +delayer,356,0 +delay,356,0 +dioder,356,0 +diode,356,0 +cookie,357,0 +chart,358,0 +map0,358,0 +map1,358,1 +map2,358,2 +map3,358,3 +map4,358,4 +map5,358,5 +map6,358,6 +map7,358,7 +map8,358,8 +map9,358,9 +map10,358,10 +map11,358,11 +map12,358,12 +map13,358,13 +map14,358,14 +map15,358,15 +shears,359,0 +shear,359,0 +sheers,359,0 +sheer,359,0 +woolcutters,359,0 +woolcutter,359,0 +cutterswool,359,0 +cutterwool,359,0 +melonslice,360,0 +mslice,360,0 +slicemelon,360,0 +watermelonslice,360,0 +greenmelonslice,360,0 +melongreenslice,360,0 +pumpkinseeds,361,0 +pseeds,361,0 +seedsp,361,0 +seedspumpkin,361,0 +pumpseeds,361,0 +seedspump,361,0 +melonseeds,362,0 +mseeds,362,0 +watermelonseeds,362,0 +greenmelonseeds,362,0 +gmelonseeds,362,0 +seedsmelon,362,0 +seedswatermelon,362,0 +rawbeef,363,0 +rawsteak,363,0 +uncookedbeef,363,0 +uncookedsteak,363,0 +cowmeat,363,0 +plainbeef,363,0 +beef,364,0 +steak,364,0 +cookedbeef,364,0 +grilledbeef,364,0 +cookedsteak,364,0 +grilledsteak,364,0 +cookedcowmeat,364,0 +rawchicken,365,0 +uncookedchicken,365,0 +plainchicken,365,0 +chickenplain,365,0 +chickenuncooked,365,0 +chickenraw,365,0 +cookedchicken,366,0 +grilledchicken,366,0 +toastedchicken,366,0 +gchicken,366,0 +bbqchicken,366,0 +friedchicken,366,0 +cchicken,366,0 +rottenflesh,367,0 +zombieflesh,367,0 +rottenmeat,367,0 +zombiemeat,367,0 +badflesh,367,0 +poisonflesh,367,0 +zombieremains,367,0 +enderpearl,368,0 +endpearl,368,0 +pearl,368,0 +epearl,368,0 +bluepearl,368,0 +endergem,368,0 +blazerod,369,0 +goldenrod,369,0 +goldrod,369,0 +blazestick,369,0 +goldstick,369,0 +brod,369,0 +grod,369,0 +bstick,369,0 +gstick,369,0 +ghasttear,370,0 +ghastdrop,370,0 +ghosttear,370,0 +ghostdrop,370,0 +gtear,370,0 +gdrop,370,0 +tear,370,0 +goldnugget,371,0 +gnugget,371,0 +goldpebble,371,0 +gpebble,371,0 +goldball,371,0 +gball,371,0 +netherstalk,372,0 +deathstalk,372,0 +hellstalk,372,0 +nstalk,372,0 +dstalk,372,0 +hstalk,372,0 +netherwarts,372,0 +netherwart,372,0 +netherplant,372,0 +nethercrop,372,0 +hellwarts,372,0 +hellwart,372,0 +hellplant,372,0 +hellcrop,372,0 +deathwarts,372,0 +deathwart,372,0 +deathplant,372,0 +deathcrop,372,0 +nwarts,372,0 +nwart,372,0 +ncrop,372,0 +nplant,372,0 +hwarts,372,0 +hwart,372,0 +hplant,372,0 +hcrop,372,0 +dwarts,372,0 +dwart,372,0 +dplant,372,0 +dcrop,372,0 +potion,373,0 +mixture,373,0 +potions,373,0 +waterbottle,373,0 +fullbottle,373,0 +watervase,373,0 +fullvase,373,0 +clearpotion,373,6 +clearpot,373,6 +clearextendedpotion,373,7 +clearexpotion,373,7 +clear2potion,373,7 +clearextendedpot,373,7 +clearexpot,373,7 +clear2pot,373,7 +diffusepotion,373,11 +diffusepot,373,11 +artlesspotion,373,13 +artlesspot,373,13 +thinpotion,373,14 +thinpot,373,14 +thinextendedpotion,373,15 +thinexpotion,373,15 +thin2potion,373,15 +thinextendedpot,373,15 +thinexpot,373,15 +thin2pot,373,15 +awkwardpotion,373,16 +awkwardpot,373,16 +bunglingpotion,373,22 +bunglingpot,373,22 +bunglingextendedpotion,373,23 +bunglingexpotion,373,23 +bungling2potion,373,23 +bunglingextendedpot,373,23 +bunglingexpot,373,23 +bungling2pot,373,23 +smoothpotion,373,27 +smoothpot,373,27 +suavepotion,373,29 +suavepot,373,29 +debonairpotion,373,30 +debonairpot,373,30 +debonairextendedpotion,373,31 +debonairexpotion,373,31 +debonair2potion,373,31 +debonairextendedpot,373,31 +debonairexpot,373,31 +debonair2pot,373,31 +thickpotion,373,32 +thickpot,373,32 +charmingpotion,373,38 +charmingpot,373,38 +charmingextendedpotion,373,39 +charmingexpotion,373,39 +charming2potion,373,39 +charmingextendedpot,373,39 +charmingexpot,373,39 +charming2pot,373,39 +refinedpotion,373,43 +refinedpot,373,43 +cordialpotion,373,45 +cordialpot,373,45 +sparklingpotion,373,46 +sparklingpot,373,46 +sparklingextendedpotion,373,47 +sparklingexpotion,373,47 +sparkling2potion,373,47 +sparklingextendedpot,373,47 +sparklingexpot,373,47 +sparkling2pot,373,47 +potentpotion,373,48 +potentpot,373,48 +rankpotion,373,54 +rankpot,373,54 +rankextendedpotion,373,55 +rankexpotion,373,55 +rank2potion,373,55 +rankextendedpot,373,55 +rankexpot,373,55 +rank2pot,373,55 +acridpotion,373,59 +acridpot,373,59 +grosspotion,373,61 +grosspot,373,61 +stinkypotion,373,62 +stinkypot,373,62 +stinkyextendedpotion,373,63 +stinkyexpotion,373,63 +stinky2potion,373,63 +stinkyextendedpot,373,63 +stinkyexpot,373,63 +stinky2pot,373,63 +mundaneextendedpotion,373,64 +mundaneexpotion,373,64 +mundane2potion,373,64 +mundaneextendedpot,373,64 +mundaneexpot,373,64 +mundane2pot,373,64 +mundanepotion,373,8192 +mundanepot,373,8192 +regenerationpotion,373,8193 +regeneratepotion,373,8193 +regenpotion,373,8193 +regenerationpot,373,8193 +regeneratepot,373,8193 +regenpot,373,8193 +rpot,373,8193 +swiftnesspotion,373,8194 +swiftpotion,373,8194 +speedpotion,373,8194 +swiftnesspot,373,8194 +swiftpot,373,8194 +speedpot,373,8194 +swpot,373,8194 +fireresistancepotion,373,8195 +fireresistpotion,373,8195 +firerespotion,373,8195 +fireresistancepot,373,8195 +fireresistpot,373,8195 +firerespot,373,8195 +fpot,373,8195 +poisonpotion,373,8196 +acidpotion,373,8196 +poisonpot,373,8196 +acidpot,373,8196 +ppot,373,8196 +healingpotion,373,8197 +healpotion,373,8197 +lifepotion,373,8197 +healingpot,373,8197 +healpot,373,8197 +lifepot,373,8197 +hpot,373,8197 +nightvisionpotion,373,8198 +nvisionpotion,373,8198 +nightvpotion,373,8198 +darkvisionpotion,373,8198 +dvisionpotion,373,8198 +darkvpotion,373,8198 +nightvisionpot,373,8198 +nvisionpot,373,8198 +nightvpot,373,8198 +darkvisionpot,373,8198 +dvisionpot,373,8198 +darkvpot,373,8198 +npot,373,8198 +weaknesspotion,373,8200 +weakpotion,373,8200 +weaknesspot,373,8200 +weakpot,373,8200 +wpot,373,8200 +strengthpotion,373,8201 +strongpotion,373,8201 +strpotion,373,8201 +strengthpot,373,8201 +strongpot,373,8201 +strpot,373,8201 +stpot,373,8201 +slownesspotion,373,8202 +slowpotion,373,8202 +slownesspot,373,8202 +slowpot,373,8202 +slpot,373,8202 +harmingpotion,373,8204 +damagepotion,373,8204 +dmgpotion,373,8204 +harmingpot,373,8204 +damagepot,373,8204 +dmgpot,373,8204 +dpot,373,8204 +waterbreathingpotion,373,8205 +waterbreathpotion,373,8205 +breathingpotion,373,8205 +breathpotion,373,8205 +waterbreathingpot,373,8205 +waterbreathpot,373,8205 +breathingpot,373,8205 +breathpot,373,8205 +wbpot,373,8205 +invisibilitypotion,373,8206 +invisiblepotion,373,8206 +invpotion,373,8206 +invisibilitypot,373,8206 +invisiblepot,373,8206 +invpot,373,8206 +ipot,373,8206 +regenerationleveliipotion,373,8225 +regenerateleveliipotion,373,8225 +regenleveliipotion,373,8225 +regenerationlevel2potion,373,8225 +regeneratelevel2potion,373,8225 +regenlevel2potion,373,8225 +regenerationiipotion,373,8225 +regenerateiipotion,373,8225 +regeniipotion,373,8225 +regenerationleveliipot,373,8225 +regenerateleveliipot,373,8225 +regenleveliipot,373,8225 +regenerationlevel2pot,373,8225 +regeneratelevel2pot,373,8225 +regenlevel2pot,373,8225 +regenerationiipot,373,8225 +regenerateiipot,373,8225 +regeniipot,373,8225 +r2pot,373,8225 +swiftnessleveliipotion,373,8226 +swiftleveliipotion,373,8226 +speedleveliipotion,373,8226 +swiftnesslevel2potion,373,8226 +swiftlevel2potion,373,8226 +speedlevel2potion,373,8226 +swiftnessiipotion,373,8226 +swiftiipotion,373,8226 +speediipotion,373,8226 +swiftnessleveliipot,373,8226 +swiftleveliipot,373,8226 +speedleveliipot,373,8226 +swiftnesslevel2pot,373,8226 +swiftlevel2pot,373,8226 +speedlevel2pot,373,8226 +swiftnessiipot,373,8226 +swiftiipot,373,8226 +speediipot,373,8226 +sw2pot,373,8226 +poisonleveliipotion,373,8228 +acidleveliipotion,373,8228 +poisonlevel2potion,373,8228 +acidlevel2potion,373,8228 +poisoniipotion,373,8228 +acidiipotion,373,8228 +poisonleveliipot,373,8228 +acidleveliipot,373,8228 +poisonlevel2pot,373,8228 +acidlevel2pot,373,8228 +poisoniipot,373,8228 +acidiipot,373,8228 +p2pot,373,8228 +healingleveliipotion,373,8229 +healleveliipotion,373,8229 +healinglevel2potion,373,8229 +heallevel2potion,373,8229 +healingiipotion,373,8229 +healiipotion,373,8229 +healingleveliipot,373,8229 +healleveliipot,373,8229 +healinglevel2pot,373,8229 +heallevel2pot,373,8229 +healingiipot,373,8229 +healiipot,373,8229 +h2pot,373,8229 +strengthleveliipotion,373,8233 +strongleveliipotion,373,8233 +strleveliipotion,373,8233 +strengthlevel2potion,373,8233 +stronglevel2potion,373,8233 +strlevel2potion,373,8233 +strengthiipotion,373,8233 +strongiipotion,373,8233 +striipotion,373,8233 +strengthleveliipot,373,8233 +strongleveliipot,373,8233 +strleveliipot,373,8233 +strengthlevel2pot,373,8233 +stronglevel2pot,373,8233 +strlevel2pot,373,8233 +strengthiipot,373,8233 +strongiipot,373,8233 +striipot,373,8233 +st2pot,373,8233 +harmingleveliipotion,373,8236 +damageleveliipotion,373,8236 +dmgleveliipotion,373,8236 +harminglevel2potion,373,8236 +damagelevel2potion,373,8236 +dmglevel2potion,373,8236 +harmingiipotion,373,8236 +damageiipotion,373,8236 +dmgiipotion,373,8236 +harmingleveliipot,373,8236 +damageleveliipot,373,8236 +dmgleveliipot,373,8236 +harminglevel2pot,373,8236 +damagelevel2pot,373,8236 +dmglevel2pot,373,8236 +harmingiipot,373,8236 +damageiipot,373,8236 +dmgiipot,373,8236 +d2pot,373,8236 +regenerationextendedpotion,373,8257 +regenerateextendedpotion,373,8257 +regenextendepotion,373,8257 +regenerationexpotion,373,8257 +regenerateexpotion,373,8257 +regenexpotion,373,8257 +regenerationextendedpot,373,8257 +regenerateextendedpot,373,8257 +regenextendepot,373,8257 +regenerationexpot,373,8257 +regenerateexpot,373,8257 +regenexpot,373,8257 +repot,373,8257 +swiftnessextendedpotion,373,8258 +swiftextendedpotion,373,8258 +speedextendedpotion,373,8258 +swiftnessexpotion,373,8258 +swiftexpotion,373,8258 +speedexpotion,373,8258 +swiftnessextendedpot,373,8258 +swiftextendedpot,373,8258 +speedextendedpot,373,8258 +swiftnessexpot,373,8258 +swiftexpot,373,8258 +speedexpot,373,8258 +swepot,373,8258 +fireresistanceextendedpotion,373,8259 +fireresistextendedpotion,373,8259 +fireresextendedpotion,373,8259 +fireresistanceexpotion,373,8259 +fireresistexpotion,373,8259 +fireresexpotion,373,8259 +fireresistanceextendedpot,373,8259 +fireresistextendedpot,373,8259 +fireresextendedpot,373,8259 +fireresistanceexpot,373,8259 +fireresistexpot,373,8259 +fireresexpot,373,8259 +fepot,373,8259 +poisonextendedpotion,373,8260 +acidextendedpotion,373,8260 +poisonexpotion,373,8260 +acidexpotion,373,8260 +poisonextendedpot,373,8260 +acidextendedpot,373,8260 +poisonexpot,373,8260 +acidexpot,373,8260 +pepot,373,8260 +nightvisionextendedpotion,373,8262 +nvisionextendedpotion,373,8262 +nightvextendedpotion,373,8262 +darkvisionextendedpotion,373,8262 +dvisionextendedpotion,373,8262 +darkvextendedpotion,373,8262 +nightvisionexpotion,373,8262 +nvisionexpotion,373,8262 +nightvexpotion,373,8262 +darkvisionexpotion,373,8262 +dvisionexpotion,373,8262 +darkvexpotion,373,8262 +nightvisionextendedpot,373,8262 +nvisionextendedpot,373,8262 +nightvextendedpot,373,8262 +darkvisionextendedpot,373,8262 +dvisionextendedpot,373,8262 +darkvextendedpot,373,8262 +nightvisionexpot,373,8262 +nvisionexpot,373,8262 +nightvexpot,373,8262 +darkvisionexpot,373,8262 +dvisionexpot,373,8262 +darkvexpot,373,8262 +nepot,373,8262 +weaknessextendedpotion,373,8264 +weakextendedpotion,373,8264 +weaknessexpotion,373,8264 +weakexpotion,373,8264 +weaknessextendedpot,373,8264 +weakextendedpot,373,8264 +weaknessexpot,373,8264 +weakexpot,373,8264 +wepot,373,8264 +strengthextendedpotion,373,8265 +strongextendedpotion,373,8265 +strextendedpotion,373,8265 +strengthexpotion,373,8265 +strongexpotion,373,8265 +strexpotion,373,8265 +strengthextendedpot,373,8265 +strongextendedpot,373,8265 +strextendedpot,373,8265 +strengthexpot,373,8265 +strongexpot,373,8265 +strexpot,373,8265 +stepot,373,8265 +slownessextendedpotion,373,8266 +slowextenedpotion,373,8266 +slownessexpotion,373,8266 +slowexpotion,373,8266 +slownessextendedpot,373,8266 +slowextenedpot,373,8266 +slownessexpot,373,8266 +slowexpot,373,8266 +slepot,373,8266 +waterbreathingextendedpotion,373,8269 +waterbreathextendedpotion,373,8269 +breathingextendedpotion,373,8269 +breathextendedpotion,373,8269 +waterbreathingextendedpot,373,8269 +waterbreathextendedpot,373,8269 +breathingextendedpot,373,8269 +breathextendedpot,373,8269 +waterbreathingexpotion,373,8269 +waterbreathexpotion,373,8269 +breathingexpotion,373,8269 +breathexpotion,373,8269 +waterbreathingexpot,373,8269 +waterbreathexpot,373,8269 +breathingexpot,373,8269 +breathexpot,373,8269 +wbepot,373,8269 +invisibilityextendedpotion,373,8270 +invisibleextendedpotion,373,8270 +invextendedpotion,373,8270 +invisibilityexpotion,373,8270 +invisibleexpotion,373,8270 +invexpotion,373,8270 +invisibilityextendedpot,373,8270 +invisibleextendedpot,373,8270 +invextendedpot,373,8270 +invisibilityexpot,373,8270 +invisibleexpot,373,8270 +invexpot,373,8270 +iepot,373,8270 +regenerationdualbitpotion,373,8289 +regeneratedualbitpotion,373,8289 +regendualbitpotion,373,8289 +regenerationdbpotion,373,8289 +regeneratedbpotion,373,8289 +regendbpotion,373,8289 +regenerationdualbitpot,373,8289 +regeneratedualbitpot,373,8289 +regendualbitpot,373,8289 +regenerationdbpot,373,8289 +regeneratedbpot,373,8289 +regendbpot,373,8289 +rdbpot,373,8289 +swiftnessdualbitpotion,373,8290 +swiftdualbitpotion,373,8290 +speeddualbitpotion,373,8290 +swiftnessdualbitpot,373,8290 +swiftdualbitpot,373,8290 +speeddualbitpot,373,8290 +swiftnessdbpotion,373,8290 +swiftdbpotion,373,8290 +speeddbpotion,373,8290 +swiftnessdbpot,373,8290 +swiftdbpot,373,8290 +speeddbpot,373,8290 +swdbpot,373,8290 +poisondualbitpotion,373,8292 +aciddualbitpotion,373,8292 +poisondualbitpot,373,8292 +aciddualbitpot,373,8292 +poisondbpotion,373,8292 +aciddbpotion,373,8292 +poisondbpot,373,8292 +aciddbpot,373,8292 +pdbpot,373,8292 +strengthdualbitpotion,373,8297 +strongdualbitpotion,373,8297 +strdualbitpotion,373,8297 +strengthdualbitpot,373,8297 +strongdualbitpot,373,8297 +strdualbitpot,373,8297 +strengthdbpotion,373,8297 +strongdbpotion,373,8297 +strdbpotion,373,8297 +strengthdbpot,373,8297 +strongdbpot,373,8297 +strdbpot,373,8297 +stdbpot,373,8297 +splashmundanepotion,373,16384 +splmundanepotion,373,16384 +splashregenerationpotion,373,16385 +splashregeneratepotion,373,16385 +splashregenpotion,373,16385 +splashregenerationpot,373,16385 +splashregeneratepot,373,16385 +splashregenpot,373,16385 +regenerationsplashpotion,373,16385 +regeneratesplashpotion,373,16385 +regensplashpotion,373,16385 +splregenerationpotion,373,16385 +splregeneratepotion,373,16385 +splregenpotion,373,16385 +splregenerationpot,373,16385 +splregeneratepot,373,16385 +splregenpot,373,16385 +sprpot,373,16385 +splashswiftnesspotion,373,16386 +splashswiftpotion,373,16386 +splashspeedpotion,373,16386 +splashswiftnesspot,373,16386 +splashswiftpot,373,16386 +splashspeedpot,373,16386 +splswiftnesspotion,373,16386 +splswiftpotion,373,16386 +splspeedpotion,373,16386 +splswiftnesspot,373,16386 +splswiftpot,373,16386 +splspeedpot,373,16386 +spswpot,373,16386 +splashfireresistancepotion,373,16387 +splashfireresistpotion,373,16387 +splashfirerespotion,373,16387 +splashfireresistancepot,373,16387 +splashfireresistpot,373,16387 +splashfirerespot,373,16387 +splfireresistancepotion,373,16387 +splfireresistpotion,373,16387 +splfirerespotion,373,16387 +splfireresistancepot,373,16387 +splfireresistpot,373,16387 +splfirerespot,373,16387 +spfpot,373,16387 +splashpoisonpotion,373,16388 +splashacidpotion,373,16388 +splashpoisonpot,373,16388 +splashacidpot,373,16388 +splpoisonpotion,373,16388 +splacidpotion,373,16388 +splpoisonpot,373,16388 +splacidpot,373,16388 +spppot,373,16388 +splashhealingpotion,373,16389 +splashhealpotion,373,16389 +splashlifepotion,373,16389 +splashhealingpot,373,16389 +splashhealpot,373,16389 +splashlifepot,373,16389 +splhealingpotion,373,16389 +splhealpotion,373,16389 +spllifepotion,373,16389 +splhealingpot,373,16389 +splhealpot,373,16389 +spllifepot,373,16389 +sphpot,373,16389 +splashclearpotion,373,16390 +splashclearpot,373,16390 +splclearpotion,373,16390 +splclearpot,373,16390 +splashnightvisionpotion,373,16390 +splashnvisionpotion,373,16390 +splashnightvpotion,373,16390 +splashdarkvisionpotion,373,16390 +splashdvisionpotion,373,16390 +splashdarkvpotion,373,16390 +splashnightvisionpot,373,16390 +splashnvisionpot,373,16390 +splashnightvpot,373,16390 +splashdarkvisionpot,373,16390 +splashdvisionpot,373,16390 +splashdarkvpot,373,16390 +splnightvisionpotion,373,16390 +splnvisionpotion,373,16390 +splnightvpotion,373,16390 +spldarkvisionpotion,373,16390 +spldvisionpotion,373,16390 +spldarkvpotion,373,16390 +splnightvisionpot,373,16390 +splnvisionpot,373,16390 +splnightvpot,373,16390 +spldarkvisionpot,373,16390 +spldvisionpot,373,16390 +spldarkvpot,373,16390 +spnpot,373,16390 +splashclearextendedpotion,373,16391 +splashclearexpotion,373,16391 +splashclear2potion,373,16391 +splashclearextendedpot,373,16391 +splashclearexpot,373,16391 +splashclear2pot,373,16391 +splclearextendedpotion,373,16391 +splclearexpotion,373,16391 +splclear2potion,373,16391 +splclearextendedpot,373,16391 +splclearexpot,373,16391 +splclear2pot,373,16391 +splashweaknesspotion,373,16392 +splashweakpotion,373,16392 +splashweaknesspot,373,16392 +splashweakpot,373,16392 +splweaknesspotion,373,16392 +splweakpotion,373,16392 +splweaknesspot,373,16392 +splweakpot,373,16392 +spwpot,373,16392 +splashstrengthpotion,373,16393 +splashstrongpotion,373,16393 +splashstrpotion,373,16393 +splashstrengthpot,373,16393 +splashstrongpot,373,16393 +splashstrpot,373,16393 +splstrengthpotion,373,16393 +splstrongpotion,373,16393 +splstrpotion,373,16393 +splstrengthpot,373,16393 +splstrongpot,373,16393 +splstrpot,373,16393 +spstpot,373,16393 +splashslownesspotion,373,16394 +splashslowpotion,373,16394 +splashslownesspot,373,16394 +splashslowpot,373,16394 +splslownesspotion,373,16394 +splslowpotion,373,16394 +splslownesspot,373,16394 +splslowpot,373,16394 +spslpot,373,16394 +splashdiffusepotion,373,16395 +splashdiffusepot,373,16395 +spldiffusepotion,373,16395 +spldiffusepot,373,16395 +splashharmingpotion,373,16396 +splashdamagepotion,373,16396 +splashdmgpotion,373,16396 +splashharmingpot,373,16396 +splashdamagepot,373,16396 +splashdmgpot,373,16396 +splharmingpotion,373,16396 +spldamagepotion,373,16396 +spldmgpotion,373,16396 +splharmingpot,373,16396 +spldamagepot,373,16396 +spldmgpot,373,16396 +spdpot,373,16396 +splashartlesspotion,373,16397 +splashartlesspot,373,16397 +splartlesspotion,373,16397 +splartlesspot,373,16397 +splashwaterbreathingpotion,373,16397 +splashwaterbreathpotion,373,16397 +splashbreathingpotion,373,16397 +splashbreathpotion,373,16397 +splashwaterbreathingpot,373,16397 +splashwaterbreathpot,373,16397 +splashbreathingpot,373,16397 +splashbreathpot,373,16397 +splwaterbreathingpotion,373,16397 +splwaterbreathpotion,373,16397 +splbreathingpotion,373,16397 +splbreathpotion,373,16397 +splwaterbreathingpot,373,16397 +splwaterbreathpot,373,16397 +splbreathingpot,373,16397 +splbreathpot,373,16397 +spwbpot,373,16397 +splashthinpotion,373,16398 +splashthinpot,373,16398 +splthinpotion,373,16398 +splthinpot,373,16398 +splashinvisibilitypotion,373,16398 +splashinvisiblepotion,373,16398 +splashinvpotion,373,16398 +splashinvisibilitypot,373,16398 +splashinvisiblepot,373,16398 +splashinvpot,373,16398 +splinvisibilitypotion,373,16398 +splinvisiblepotion,373,16398 +splinvpotion,373,16398 +splinvisibilitypot,373,16398 +splinvisiblepot,373,16398 +splinvpot,373,16398 +spipot,373,16398 +splashthinextendedpotion,373,16399 +splashthinexpotion,373,16399 +splashthin2potion,373,16399 +splashthinextendedpot,373,16399 +splashthinexpot,373,16399 +splashthin2pot,373,16399 +splthinextendedpotion,373,16399 +splthinexpotion,373,16399 +splthin2potion,373,16399 +splthinextendedpot,373,16399 +splthinexpot,373,16399 +splthin2pot,373,16399 +splashawkwardpotion,373,16400 +splashawkwardpot,373,16400 +splawkwardpotion,373,16400 +splawkwardpot,373,16400 +splashbunglingpotion,373,16406 +splashbunglingpot,373,16406 +splbunglingpotion,373,16406 +splbunglingpot,373,16406 +splashbunglingextendedpotion,373,16407 +splashbunglingexpotion,373,16407 +splashbungling2potion,373,16407 +splashbunglingextendedpot,373,16407 +splashbunglingexpot,373,16407 +splashbungling2pot,373,16407 +splbunglingextendedpotion,373,16407 +splbunglingexpotion,373,16407 +splbungling2potion,373,16407 +splbunglingextendedpot,373,16407 +splbunglingexpot,373,16407 +splbungling2pot,373,16407 +splashsmoothpotion,373,16411 +splashsmoothpot,373,16411 +splsmoothpotion,373,16411 +splsmoothpot,373,16411 +splashsuavepotion,373,16413 +splashsuavepot,373,16413 +splsuavepotion,373,16413 +splsuavepot,373,16413 +splashdebonairpotion,373,16414 +splashdebonairpot,373,16414 +spldebonairpotion,373,16414 +spldebonairpot,373,16414 +splashdebonairextendedpotion,373,16415 +splashdebonairexpotion,373,16415 +splashdebonair2potion,373,16415 +splashdebonairextendedpot,373,16415 +splashdebonairexpot,373,16415 +splashdebonair2pot,373,16415 +spldebonairextendedpotion,373,16415 +spldebonairexpotion,373,16415 +spldebonair2potion,373,16415 +spldebonairextendedpot,373,16415 +spldebonairexpot,373,16415 +spldebonair2pot,373,16415 +splashthickpotion,373,16416 +splashthickpot,373,16416 +splthickpotion,373,16416 +splthickpot,373,16416 +splashregenerationleveliipotion,373,16417 +splashregenerateleveliipotion,373,16417 +splashregenleveliipotion,373,16417 +splashregenerationlevel2potion,373,16417 +splashregeneratelevel2potion,373,16417 +splashregenlevel2potion,373,16417 +splashregenerationiipotion,373,16417 +splashregenerateiipotion,373,16417 +splashregeniipotion,373,16417 +splashregenerationleveliipot,373,16417 +splashregenerateleveliipot,373,16417 +splashregenleveliipot,373,16417 +splashregenerationlevel2pot,373,16417 +splashregeneratelevel2pot,373,16417 +splashregenlevel2pot,373,16417 +splashregenerationiipot,373,16417 +splashregenerateiipot,373,16417 +splashregeniipot,373,16417 +splregenerationleveliipotion,373,16417 +splregenerateleveliipotion,373,16417 +splregenleveliipotion,373,16417 +splregenerationlevel2potion,373,16417 +splregeneratelevel2potion,373,16417 +splregenlevel2potion,373,16417 +splregenerationiipotion,373,16417 +splregenerateiipotion,373,16417 +splregeniipotion,373,16417 +splregenerationleveliipot,373,16417 +splregenerateleveliipot,373,16417 +splregenleveliipot,373,16417 +splregenerationlevel2pot,373,16417 +splregeneratelevel2pot,373,16417 +splregenlevel2pot,373,16417 +splregenerationiipot,373,16417 +splregenerateiipot,373,16417 +splregeniipot,373,16417 +spr2pot,373,16417 +splashswiftnessleveliipotion,373,16418 +splashswiftleveliipotion,373,16418 +splashspeedleveliipotion,373,16418 +splashswiftnesslevel2potion,373,16418 +splashswiftlevel2potion,373,16418 +splashspeedlevel2potion,373,16418 +splashswiftnessiipotion,373,16418 +splashswiftiipotion,373,16418 +splashspeediipotion,373,16418 +splashswiftnessleveliipot,373,16418 +splashswiftleveliipot,373,16418 +splashspeedleveliipot,373,16418 +splashswiftnesslevel2pot,373,16418 +splashswiftlevel2pot,373,16418 +splashspeedlevel2pot,373,16418 +splashswiftnessiipot,373,16418 +splashswiftiipot,373,16418 +splashspeediipot,373,16418 +splswiftnessleveliipotion,373,16418 +splswiftleveliipotion,373,16418 +splspeedleveliipotion,373,16418 +splswiftnesslevel2potion,373,16418 +splswiftlevel2potion,373,16418 +splspeedlevel2potion,373,16418 +splswiftnessiipotion,373,16418 +splswiftiipotion,373,16418 +splspeediipotion,373,16418 +splswiftnessleveliipot,373,16418 +splswiftleveliipot,373,16418 +splspeedleveliipot,373,16418 +splswiftnesslevel2pot,373,16418 +splswiftlevel2pot,373,16418 +splspeedlevel2pot,373,16418 +splswiftnessiipot,373,16418 +splswiftiipot,373,16418 +splspeediipot,373,16418 +spsw2pot,373,16418 +splashpoisonleveliipotion,373,16420 +splashacidleveliipotion,373,16420 +splashpoisonlevel2potion,373,16420 +splashacidlevel2potion,373,16420 +splashpoisoniipotion,373,16420 +splashacidiipotion,373,16420 +splashpoisonleveliipot,373,16420 +splashacidleveliipot,373,16420 +splashpoisonlevel2pot,373,16420 +splashacidlevel2pot,373,16420 +splashpoisoniipot,373,16420 +splashacidiipot,373,16420 +splpoisonleveliipotion,373,16420 +splacidleveliipotion,373,16420 +splpoisonlevel2potion,373,16420 +splcidlevel2potion,373,16420 +splpoisoniipotion,373,16420 +splacidiipotion,373,16420 +splpoisonleveliipot,373,16420 +splacidleveliipot,373,16420 +splpoisonlevel2pot,373,16420 +splacidlevel2pot,373,16420 +splpoisoniipot,373,16420 +splacidiipot,373,16420 +spp2pot,373,16420 +splashhealingleveliipotion,373,16421 +splashhealleveliipotion,373,16421 +splashhealinglevel2potion,373,16421 +splashheallevel2potion,373,16421 +splashhealingiipotion,373,16421 +splashhealiipotion,373,16421 +splashhealingleveliipot,373,16421 +splashhealleveliipot,373,16421 +splashhealinglevel2pot,373,16421 +splashheallevel2pot,373,16421 +splashhealingiipot,373,16421 +splashhealiipot,373,16421 +splhealingleveliipotion,373,16421 +splhealleveliipotion,373,16421 +splhealinglevel2potion,373,16421 +splheallevel2potion,373,16421 +splhealingiipotion,373,16421 +splhealiipotion,373,16421 +splhealingleveliipot,373,16421 +splhealleveliipot,373,16421 +splhealinglevel2pot,373,16421 +splheallevel2pot,373,16421 +splhealingiipot,373,16421 +splhealiipot,373,16421 +sph2pot,373,16421 +splashcharmingpotion,373,16422 +splashcharmingpot,373,16422 +splcharmingpotion,373,16422 +splcharmingpot,373,16422 +splashcharmingextendedpotion,373,16423 +splashcharmingexpotion,373,16423 +splashcharming2potion,373,16423 +splashcharmingextendedpot,373,16423 +splashcharmingexpot,373,16423 +splashcharming2pot,373,16423 +splcharmingextendedpotion,373,16423 +splcharmingexpotion,373,16423 +splcharming2potion,373,16423 +splcharmingextendedpot,373,16423 +splcharmingexpot,373,16423 +splcharming2pot,373,16423 +splashstrengthleveliipotion,373,16425 +splashstrongleveliipotion,373,16425 +splashstrleveliipotion,373,16425 +splashstrengthlevel2potion,373,16425 +splashstronglevel2potion,373,16425 +splashstrlevel2potion,373,16425 +splashstrengthiipotion,373,16425 +splashstrongiipotion,373,16425 +splashstriipotion,373,16425 +splashstrengthleveliipot,373,16425 +splashstrongleveliipot,373,16425 +splashstrleveliipot,373,16425 +splashstrengthlevel2pot,373,16425 +splashstronglevel2pot,373,16425 +splashstrlevel2pot,373,16425 +splashstrengthiipot,373,16425 +splashstrongiipot,373,16425 +splashstriipot,373,16425 +splstrengthleveliipotion,373,16425 +splstrongleveliipotion,373,16425 +splstrleveliipotion,373,16425 +splstrengthlevel2potion,373,16425 +splstronglevel2potion,373,16425 +splstrlevel2potion,373,16425 +splstrengthiipotion,373,16425 +splstrongiipotion,373,16425 +splstriipotion,373,16425 +splstrengthleveliipot,373,16425 +splstrongleveliipot,373,16425 +splstrleveliipot,373,16425 +splstrengthlevel2pot,373,16425 +splstronglevel2pot,373,16425 +splstrlevel2pot,373,16425 +splstrengthiipot,373,16425 +splstrongiipot,373,16425 +splstriipot,373,16425 +spst2pot,373,16425 +splashrefinedpotion,373,16427 +splashrefinedpot,373,16427 +splrefinedpotion,373,16427 +splrefinedpot,373,16427 +splashharmingleveliipotion,373,16428 +splashdamageleveliipotion,373,16428 +splashdmgleveliipotion,373,16428 +splashharminglevel2potion,373,16428 +splashdamagelevel2potion,373,16428 +splashdmglevel2potion,373,16428 +splashharmingiipotion,373,16428 +splashdamageiipotion,373,16428 +splashdmgiipotion,373,16428 +splashharmingleveliipot,373,16428 +splashdamageleveliipot,373,16428 +splashdmgleveliipot,373,16428 +splashharminglevel2pot,373,16428 +splashdamagelevel2pot,373,16428 +splashdmglevel2pot,373,16428 +splashharmingiipot,373,16428 +splashdamageiipot,373,16428 +splashdmgiipot,373,16428 +splharmingleveliipotion,373,16428 +spldamageleveliipotion,373,16428 +spldmgleveliipotion,373,16428 +splharminglevel2potion,373,16428 +spldamagelevel2potion,373,16428 +spldmglevel2potion,373,16428 +splharmingiipotion,373,16428 +spldamageiipotion,373,16428 +spldmgiipotion,373,16428 +splharmingleveliipot,373,16428 +spldamageleveliipot,373,16428 +spldmgleveliipot,373,16428 +splharminglevel2pot,373,16428 +spldamagelevel2pot,373,16428 +spldmglevel2pot,373,16428 +splharmingiipot,373,16428 +spldamageiipot,373,16428 +spldmgiipot,373,16428 +spd2pot,373,16428 +splashcordialpotion,373,16429 +splashcordialpot,373,16429 +splcordialpotion,373,16429 +splcordialpot,373,16429 +splashsparklingpotion,373,16430 +splashsparklingpot,373,16430 +splsparklingpotion,373,16430 +splsparklingpot,373,16430 +splashsparklingextendedpotion,373,16431 +splashsparklingexpotion,373,16431 +splashsparkling2potion,373,16431 +splashsparklingextendedpot,373,16431 +splashsparklingexpot,373,16431 +splashsparkling2pot,373,16431 +splsparklingextendedpotion,373,16431 +splsparklingexpotion,373,16431 +splsparkling2potion,373,16431 +splsparklingextendedpot,373,16431 +splsparklingexpot,373,16431 +splsparkling2pot,373,16431 +splashpotentpotion,373,16432 +splashpotentpot,373,16432 +splpotentpotion,373,16432 +splpotentpot,373,16432 +splashrankpotion,373,16438 +splashrankpot,373,16438 +splrankpotion,373,16438 +splrankpot,373,16438 +splashrankextendedpotion,373,16439 +splashrankexpotion,373,16439 +splashrank2potion,373,16439 +splashrankextendedpot,373,16439 +splashrankexpot,373,16439 +splashrank2pot,373,16439 +splrankextendedpotion,373,16439 +splrankexpotion,373,16439 +splrank2potion,373,16439 +splrankextendedpot,373,16439 +splrankexpot,373,16439 +splrank2pot,373,16439 +splashacridpotion,373,16443 +splashacridpot,373,16443 +splacridpotion,373,16443 +splacridpot,373,16443 +splashgrosspotion,373,16445 +splashgrosspot,373,16445 +splgrosspotion,373,16445 +splgrosspot,373,16445 +splashstinkypotion,373,16446 +splashstinkypot,373,16446 +splstinkypotion,373,16446 +splstinkypot,373,16446 +splashstinkyextendedpotion,373,16447 +splashstinkyexpotion,373,16447 +splashstinky2potion,373,16447 +splashstinkyextendedpot,373,16447 +splashstinkyexpot,373,16447 +splashstinky2pot,373,16447 +splstinkyextendedpotion,373,16447 +splstinkyexpotion,373,16447 +splstinky2potion,373,16447 +splstinkyextendedpot,373,16447 +splstinkyexpot,373,16447 +splstinky2pot,373,16447 +splashmundaneextendedpotion,373,16448 +splashmundaneexpotion,373,16448 +splashmundane2potion,373,16448 +splashmundaneextendedpot,373,16448 +splashmundaneexpot,373,16448 +splashmundane2pot,373,16448 +splmundaneextendedpotion,373,16448 +splmundaneexpotion,373,16448 +splmundane2potion,373,16448 +splmundaneextendedpot,373,16448 +splmundaneexpot,373,16448 +splmundane2pot,373,16448 +splashregenerationextendedpotion,373,16449 +splashregenerateextendedpotion,373,16449 +splashregenextendepotion,373,16449 +splashregenerationexpotion,373,16449 +splashregenerateexpotion,373,16449 +splashregenexpotion,373,16449 +splashregenerationextendedpot,373,16449 +splashregenerateextendedpot,373,16449 +splashregenextendepot,373,16449 +splashregenerationexpot,373,16449 +splashregenerateexpot,373,16449 +splashregenexpot,373,16449 +splregenerationextendedpotion,373,16449 +splregenerateextendedpotion,373,16449 +splregenextendepotion,373,16449 +splregenerationexpotion,373,16449 +splregenerateexpotion,373,16449 +splregenexpotion,373,16449 +splregenerationextendedpot,373,16449 +splregenerateextendedpot,373,16449 +splregenextendepot,373,16449 +splregenerationexpot,373,16449 +splregenerateexpot,373,16449 +splregenexpot,373,16449 +sprepot,373,16449 +splashswiftnessextendedpotion,373,16450 +splashswiftextendedpotion,373,16450 +splashspeedextendedpotion,373,16450 +splashswiftnessexpotion,373,16450 +splashswiftexpotion,373,16450 +splashspeedexpotion,373,16450 +splashswiftnessextendedpot,373,16450 +splashswiftextendedpot,373,16450 +splashspeedextendedpot,373,16450 +splashswiftnessexpot,373,16450 +splashswiftexpot,373,16450 +splashspeedexpot,373,16450 +splswiftnessextendedpotion,373,16450 +splswiftextendedpotion,373,16450 +splspeedextendedpotion,373,16450 +splswiftnessexpotion,373,16450 +splswiftexpotion,373,16450 +splspeedexpotion,373,16450 +splswiftnessextendedpot,373,16450 +splswiftextendedpot,373,16450 +splspeedextendedpot,373,16450 +splswiftnessexpot,373,16450 +splswiftexpot,373,16450 +splspeedexpot,373,16450 +spswepot,373,16450 +splashfireresistanceextendedpotion,373,16451 +splashfireresistextendedpotion,373,16451 +splashfireresextendedpotion,373,16451 +splashfireresistanceexpotion,373,16451 +splashfireresistexpotion,373,16451 +splashfireresexpotion,373,16451 +splashfireresistanceextendedpot,373,16451 +splashfireresistextendedpot,373,16451 +splashfireresextendedpot,373,16451 +splashfireresistanceexpot,373,16451 +splashfireresistexpot,373,16451 +splashfireresexpot,373,16451 +splfireresistanceextendedpotion,373,16451 +splfireresistextendedpotion,373,16451 +splfireresextendedpotion,373,16451 +splfireresistanceexpotion,373,16451 +splfireresistexpotion,373,16451 +splfireresexpotion,373,16451 +splfireresistanceextendedpot,373,16451 +splfireresistextendedpot,373,16451 +splfireresextendedpot,373,16451 +splfireresistanceexpot,373,16451 +splfireresistexpot,373,16451 +splfireresexpot,373,16451 +spfepot,373,16451 +splashpoisonextendedpotion,373,16452 +splashacidextendedpotion,373,16452 +splashpoisonexpotion,373,16452 +splashacidexpotion,373,16452 +splashpoisonextendedpot,373,16452 +splashacidextendedpot,373,16452 +splashpoisonexpot,373,16452 +splashacidexpot,373,16452 +splpoisonextendedpotion,373,16452 +splacidextendedpotion,373,16452 +splpoisonexpotion,373,16452 +splacidexpotion,373,16452 +splpoisonextendedpot,373,16452 +splacidextendedpot,373,16452 +splpoisonexpot,373,16452 +splacidexpot,373,16452 +sppepot,373,16452 +splashnightvisionextendedpotion,373,16454 +splashnvisionextendedpotion,373,16454 +splashnightvextendedpotion,373,16454 +splashdarkvisionextendedpotion,373,16454 +splashdvisionextendedpotion,373,16454 +splashdarkvextendedpotion,373,16454 +splashnightvisionextendedpot,373,16454 +splashnvisionextendedpot,373,16454 +splashnightvextendedpot,373,16454 +splashdarkvisionextendedpot,373,16454 +splashdvisionextendedpot,373,16454 +splashdarkvextendedpot,373,16454 +splashnightvisionexpotion,373,16454 +splashnvisionexpotion,373,16454 +splashnightvexpotion,373,16454 +splashdarkvisionexpotion,373,16454 +splashdvisionexpotion,373,16454 +splashdarkvexpotion,373,16454 +splashnightvisionexpot,373,16454 +splashnvisionexpot,373,16454 +splashnightvexpot,373,16454 +splashdarkvisionexpot,373,16454 +splashdvisionexpot,373,16454 +splashdarkvexpot,373,16454 +splnightvisionextendedpotion,373,16454 +splnvisionextendedpotion,373,16454 +splnightvextendedpotion,373,16454 +spldarkvisionextendedpotion,373,16454 +spldvisionextendedpotion,373,16454 +spldarkvextendedpotion,373,16454 +splnightvisionextendedpot,373,16454 +splnvisionextendedpot,373,16454 +splnightvextendedpot,373,16454 +spldarkvisionextendedpot,373,16454 +spldvisionextendedpot,373,16454 +spldarkvextendedpot,373,16454 +splnightvisionexpotion,373,16454 +splnvisionexpotion,373,16454 +splnightvexpotion,373,16454 +spldarkvisionexpotion,373,16454 +spldvisionexpotion,373,16454 +spldarkvexpotion,373,16454 +splnightvisionexpot,373,16454 +splnvisionexpot,373,16454 +splnightvexpot,373,16454 +spldarkvisionexpot,373,16454 +spldvisionexpot,373,16454 +spldarkvexpot,373,16454 +spnepot,373,16454 +splashweaknessextendedpotion,373,16456 +splashweakextendedpotion,373,16456 +splashweaknessexpotion,373,16456 +splashweakexpotion,373,16456 +splashweaknessextendedpot,373,16456 +splashweakextendedpot,373,16456 +splashweaknessexpot,373,16456 +splashweakexpot,373,16456 +splweaknessextendedpotion,373,16456 +sphweakextendedpotion,373,16456 +splweaknessexpotion,373,16456 +splweakexpotion,373,16456 +splweaknessextendedpot,373,16456 +splweakextendedpot,373,16456 +splweaknessexpot,373,16456 +splweakexpot,373,16456 +spwepot,373,16456 +splashstrengthextendedpotion,373,16457 +splashstrongextendedpotion,373,16457 +splashstrextendedpotion,373,16457 +splashstrengthexpotion,373,16457 +splashstrongexpotion,373,16457 +splashstrexpotion,373,16457 +splashstrengthextendedpot,373,16457 +splashstrongextendedpot,373,16457 +splashstrextendedpot,373,16457 +splashstrengthexpot,373,16457 +splashstrongexpot,373,16457 +splashstrexpot,373,16457 +splstrengthextendedpotion,373,16457 +splstrongextendedpotion,373,16457 +splstrextendedpotion,373,16457 +splstrengthexpotion,373,16457 +splstrongexpotion,373,16457 +splstrexpotion,373,16457 +splstrengthextendedpot,373,16457 +splstrongextendedpot,373,16457 +splstrextendedpot,373,16457 +splstrengthexpot,373,16457 +splstrongexpot,373,16457 +splstrexpot,373,16457 +spstepot,373,16457 +splashslownessextendedpotion,373,16458 +splashslowextenedpotion,373,16458 +splashslownessexpotion,373,16458 +splashslowexpotion,373,16458 +splashslownessextendedpot,373,16458 +splashslowextenedpot,373,16458 +splashslownessexpot,373,16458 +splashslowexpot,373,16458 +splslownessextendedpotion,373,16458 +splslowextenedpotion,373,16458 +splslownessexpotion,373,16458 +splslowexpotion,373,16458 +splslownessextendedpot,373,16458 +splslowextenedpot,373,16458 +splslownessexpot,373,16458 +splslowexpot,373,16458 +spslepot,373,16458 +splashwaterbreathingextendedpotion,373,16461 +splashwaterbreathextendedpotion,373,16461 +splashbreathingextendedpotion,373,16461 +splashbreathextendedpotion,373,16461 +splashwaterbreathingextendedpot,373,16461 +splashwaterbreathextendedpot,373,16461 +splashbreathingextendedpot,373,16461 +splashbreathextendedpot,373,16461 +splwaterbreathingextendedpotion,373,16461 +splwaterbreathextendedpotion,373,16461 +splbreathingextendedpotion,373,16461 +splbreathextendedpotion,373,16461 +splwaterbreathingextendedpot,373,16461 +splwaterbreathextendedpot,373,16461 +splbreathingextendedpot,373,16461 +splbreathextendedpot,373,16461 +splashwaterbreathingexpotion,373,16461 +splashwaterbreathexpotion,373,16461 +splashbreathingexpotion,373,16461 +splashbreathexpotion,373,16461 +splashwaterbreathingexpot,373,16461 +splashwaterbreathexpot,373,16461 +splashbreathingexpot,373,16461 +splashbreathexpot,373,16461 +splwaterbreathingexpotion,373,16461 +splwaterbreathexpotion,373,16461 +splbreathingexpotion,373,16461 +splbreathexpotion,373,16461 +splwaterbreathingexpot,373,16461 +splwaterbreathexpot,373,16461 +splbreathingexpot,373,16461 +splbreathexpot,373,16461 +spwbepot,373,16461 +splashinvisibilityextendedpotion,373,16462 +splashinvisibleextendedpotion,373,16462 +splashinvextendedpotion,373,16462 +splashinvisibilityextendedpot,373,16462 +splashinvisibleextendedpot,373,16462 +splashinvextendedpot,373,16462 +splashinvisibilityexpotion,373,16462 +splashinvisibleexpotion,373,16462 +splashinvexpotion,373,16462 +splashinvisibilityexpot,373,16462 +splashinvisibleexpot,373,16462 +splashinvexpot,373,16462 +splinvisibilityextendedpotion,373,16462 +splinvisibleextendedpotion,373,16462 +splinvextendedpotion,373,16462 +splinvisibilityextendedpot,373,16462 +splinvisibleextendedpot,373,16462 +splinvextendedpot,373,16462 +splinvisibilityexpotion,373,16462 +splinvisibleexpotion,373,16462 +splinvexpotion,373,16462 +splinvisibilityexpot,373,16462 +splinvisibleexpot,373,16462 +splinvexpot,373,16462 +spiepot,373,16462 +splashregenerationdualbitpotion,373,16481 +splashregeneratedualbitpotion,373,16481 +splashregendualbitpotion,373,16481 +splashregenerationdualbitpot,373,16481 +splashregeneratedualbitpot,373,16481 +splashregendualbitpot,373,16481 +splregenerationdualbitpotion,373,16481 +splregeneratedualbitpotion,373,16481 +splregendualbitpotion,373,16481 +splregenerationdualbitpot,373,16481 +splregeneratedualbitpot,373,16481 +splregendualbitpot,373,16481 +splashregenerationdbpotion,373,16481 +splashregeneratedbpotion,373,16481 +splashregendbpotion,373,16481 +splashregenerationdbpot,373,16481 +splashregeneratedbpot,373,16481 +splashregendbpot,373,16481 +splregenerationdbpotion,373,16481 +splregeneratedbpotion,373,16481 +splregendbpotion,373,16481 +splregenerationdbpot,373,16481 +splregeneratedbpot,373,16481 +splregendbpot,373,16481 +sprdbpot,373,16481 +splashswiftnessdualbitpotion,373,16482 +splashswiftdualbitpotion,373,16482 +splashspeeddualbitpotion,373,16482 +splashswiftnessdualbitpot,373,16482 +splashswiftdualbitpot,373,16482 +splashspeeddualbitpot,373,16482 +splswiftnessdualbitpotion,373,16482 +splswiftdualbitpotion,373,16482 +splspeeddualbitpotion,373,16482 +splswiftnessdualbitpot,373,16482 +splswiftdualbitpot,373,16482 +splspeeddualbitpot,373,16482 +splashswiftnessdbpotion,373,16482 +splashswiftdbpotion,373,16482 +splashspeeddbpotion,373,16482 +splashswiftnessdbpot,373,16482 +splashswiftdbpot,373,16482 +splashspeeddbpot,373,16482 +splswiftnessdbpotion,373,16482 +splswiftdbpotion,373,16482 +splspeeddbpotion,373,16482 +splswiftnessdbpot,373,16482 +splswiftdbpot,373,16482 +splspeeddbpot,373,16482 +spswdbpot,373,16482 +splashpoisondualbitpotion,373,16484 +splashaciddualbitpotion,373,16484 +splashpoisondualbitpot,373,16484 +splashaciddualbitpot,373,16484 +splpoisondualbitpotion,373,16484 +splaciddualbitpotion,373,16484 +splpoisondualbitpot,373,16484 +splaciddualbitpot,373,16484 +splashpoisondbpotion,373,16484 +splashaciddbpotion,373,16484 +splashpoisondbpot,373,16484 +splashaciddbpot,373,16484 +splpoisondbpotion,373,16484 +splaciddbpotion,373,16484 +splpoisondbpot,373,16484 +splaciddbpot,373,16484 +sppdbpot,373,16484 +splashstrengthdualbitpotion,373,16489 +splashstrongdualbitpotion,373,16489 +splashstrdualbitpotion,373,16489 +splashstrengthdualbitpot,373,16489 +splashstrongdualbitpot,373,16489 +splashstrdualbitpot,373,16489 +splstrengthdualbitpotion,373,16489 +splstrongdualbitpotion,373,16489 +splstrdualbitpotion,373,16489 +splstrengthdualbitpot,373,16489 +splstrongdualbitpot,373,16489 +splstrdualbitpot,373,16489 +splashstrengthdbpotion,373,16489 +splashstrongdbpotion,373,16489 +splashstrdbpotion,373,16489 +splashstrengthdbpot,373,16489 +splashstrongdbpot,373,16489 +splashstrdbpot,373,16489 +splstrengthdbpotion,373,16489 +splstrongdbpotion,373,16489 +splstrdbpotion,373,16489 +splstrengthdbpot,373,16489 +splstrongdbpot,373,16489 +splstrdbpot,373,16489 +spstdbpot,373,16489 +glassbottle,374,0 +bottle,374,0 +gbottle,374,0 +gvase,374,0 +vase,374,0 +glassvase,374,0 +emptyglassbottle,374,0 +emptybottle,374,0 +emptygbottle,374,0 +emptygvase,374,0 +emptyvase,374,0 +emptyglassvase,374,0 +eglassbottle,374,0 +ebottle,374,0 +egbottle,374,0 +egvase,374,0 +evase,374,0 +eglassvase,374,0 +spidereye,375,0 +eyeofspider,375,0 +seye,375,0 +fermentedspidereye,376,0 +craftedspidereye,376,0 +fspidereye,376,0 +cspidereye,376,0 +fermentedeyeofspider,376,0 +craftedeyeofspider,376,0 +feyeofspider,376,0 +ceyeofspider,376,0 +fermentedseye,376,0 +craftedseye,376,0 +fseye,376,0 +cseye,376,0 +blazepowder,377,0 +blazedust,377,0 +goldpowder,377,0 +golddust,377,0 +gdust,377,0 +gpowder,377,0 +bpowder,377,0 +bdust,377,0 +magmacream,378,0 +goldcream,378,0 +blazecream,378,0 +mcream,378,0 +gcream,378,0 +bcream,378,0 +combinedcream,378,0 +ccream,378,0 +bstand,379,0 +pstand,379,0 +brewingstand,379,0 +potionstand,379,0 +cauldron,380,0 +steelcauldron,380,0 +ironcauldron,380,0 +icauldron,380,0 +scauldron,380,0 +potioncauldron,380,0 +pcauldron,380,0 +eyeofender,381,0 +endereye,381,0 +endeye,381,0 +evilendereye,381,0 +evileyeofender,381,0 +evilenderpearl,381,0 +eeye,381,0 +eofender,381,0 +glisteringmelon,382,0 +speckledmelon,382,0 +goldmelon,382,0 +sparklymelon,382,0 +shiningmelon,382,0 +gmelon,382,0 +smelon,382,0 +creeperegg,383,50 +eggcreeper,383,50 +skeletonegg,383,51 +eggskeleton,383,51 +spideregg,383,52 +eggspider,383,52 +giantegg,383,53 +egggiant,383,53 +zombieegg,383,54 +eggzombie,383,54 +slimeegg,383,55 +eggslime,383,55 +ghastegg,383,56 +eggghast,383,56 +zombiepigmanegg,383,57 +zpigmanegg,383,57 +pigmanegg,383,57 +zombiepmanegg,383,57 +zpmanegg,383,57 +zombiepigmegg,383,57 +zpigmegg,383,57 +zombiepigegg,383,57 +zpigegg,383,57 +zombiepmegg,383,57 +zombiepegg,383,57 +eggzombiepigman,383,57 +eggzpigman,383,57 +eggpigman,383,57 +eggzombiepman,383,57 +eggzpman,383,57 +eggzombiepigm,383,57 +eggzpigm,383,57 +eggzombiepig,383,57 +eggzpig,383,57 +eggzombiepm,383,57 +eggzombiep,383,57 +endermanegg,383,58 +eggenderman,383,58 +eggcavespider,383,59 +cavespideregg,383,59 +silverfishegg,383,60 +eggsilverfish,383,60 +blazeegg,383,61 +eggblaze,383,61 +lavaslimeegg,383,62 +lavacubeegg,383,62 +magmacubeegg,383,62 +magmaslimeegg,383,62 +egglavaslime,383,62 +egglavacube,383,62 +eggmagmacube,383,62 +eggmagmaslime,383,62 +bategg,383,65 +eggbat,383,65 +witchegg,383,66 +eggwitch,383,66 +pigegg,383,90 +eggpig,383,90 +sheepegg,383,91 +eggsheep,383,91 +cowegg,383,92 +eggcow,383,92 +chickenegg,383,93 +eggchicken,383,93 +squidegg,383,94 +eggsquid,383,94 +wolfegg,383,95 +eggwolf,383,95 +mooshroomegg,383,96 +mushroomcowegg,383,96 +eggmooshroom,383,96 +eggmushroomcow,383,96 +snowgolemegg,383,97 +sgolemegg,383,97 +eggsnowgolem,383,97 +eggsgolem,383,97 +ocelotegg,383,98 +eggocelot,383,98 +irongolemegg,383,99 +igolemegg,383,99 +eggirongolem,383,99 +eggigolem,383,99 +egghorse,383,100 +horseegg,383,100 +villageregg,383,120 +eggvillager,383,120 +bottleofenchanting,384,0 +enchantingbottle,384,0 +expbottle,384,0 +xpbottle,384,0 +bottleexp,384,0 +bottlexp,384,0 +enchantbottle,384,0 +bottleenchanting,384,0 +bottleenchant,384,0 +bottleoenchanting,384,0 +firecharge,385,0 +fireball,385,0 +grenade,385,0 +bookandquill,386,0 +booknquill,386,0 +bookandfeather,386,0 +booknfeather,386,0 +writeablebook,386,0 +writtenbook,387,0 +readablebook,387,0 +sealedbook,387,0 +diary,387,0 +ownedbook,387,0 +emerald,388,0 +itemframe,389,0 +pictureframe,389,0 +iframe,389,0 +pframe,389,0 +flowerpot,390,0 +pot,390,0 +carrot,391,0 +potato,392,0 +rawpotato,392,0 +bakedpotato,393,0 +roastedpotato,393,0 +cookedpotato,393,0 +bakepotato,393,0 +roastpotato,393,0 +cookpotato,393,0 +bpotato,393,0 +rpotato,393,0 +cpotato,393,0 +poisonouspotato,394,0 +poisonpotato,394,0 +ppotato,394,0 +emptymap,395,0 +map,395,0 +goldencarrot,396,0 +goldcarrot,396,0 +gcarrot,396,0 +head,397,0 +skull,397,0 +skeletonhead,397,0 +headskeleton,397,0 +skeletonskull,397,0 +skullskeleton,397,0 +witherhead,397,1 +witherskeletonhead,397,1 +wskeletionhead,397,1 +headwither,397,1 +headwitherskeleton,397,1 +headwskeletion,397,1 +witherskull,397,1 +witherskeletonskull,397,1 +wskeletionskull,397,1 +skullwither,397,1 +skullwitherskeleton,397,1 +skullwskeletion,397,1 +zombiehead,397,2 +headzombie,397,2 +zombieskull,397,2 +skullzombie,397,2 +playerhead,397,3 +humanhead,397,3 +stevehead,397,3 +headplayer,397,3 +headhuman,397,3 +headsteve,397,3 +playerskull,397,3 +humanskull,397,3 +steveskull,397,3 +skullplayer,397,3 +skullhuman,397,3 +skullsteve,397,3 +creeperhead,397,4 +headcreeper,397,4 +creeperskull,397,4 +skullcreeper,397,4 +carrotonastick,398,0 +carrotonstick,398,0 +netherstar,399,0 +hellstar,399,0 +nstar,399,0 +hstar,399,0 +star,399,0 +pumpkinpie,400,0 +pumpkincake,400,0 +ppie,400,0 +pcake,400,0 +pie,400,0 +fireworkrocket,401,0 +fireworkmissle,401,0 +firework,401,0 +fworkrocket,401,0 +fworkmissle,401,0 +fwork,401,0 +fwrocket,401,0 +fwmissle,401,0 +fireworkstar,402,0 +fworkstar,402,0 +fwstar,402,0 +fireworkball,402,0 +fworkball,402,0 +fwball,402,0 +fireworkpowder,402,0 +fworkpowder,402,0 +fwpowder,402,0 +fireworkcharge,402,0 +fworkcharge,402,0 +fwcharge,402,0 +enchantedbook,403,0 +enchantmentbook,403,0 +enchantingbook,403,0 +enchantbook,403,0 +magicalbook,403,0 +magicbook,403,0 +ebook,403,0 +mbook,403,0 +redstonecomparator,404,0 +redstonecomparer,404,0 +redstonecompare,404,0 +rstonecomparator,404,0 +rstonecomparer,404,0 +rstonecompare,404,0 +redscomparator,404,0 +redscomparer,404,0 +redscompare,404,0 +rscomparator,404,0 +rscomparer,404,0 +rscompare,404,0 +comparator,404,0 +comparer,404,0 +compare,404,0 +netherbrick,405,0 +nbrick,405,0 +hellbrick,405,0 +deathbrick,405,0 +dbrick,405,0 +hbrick,405,0 +netherquartz,406,0 +deathquartz,406,0 +hellquartz,406,0 +nquartz,406,0 +dquartz,406,0 +hquartz,406,0 +quartz,406,0 +tntminecart,407,0 +dynamiteminecart,407,0 +dynamitemcart,407,0 +dynamitecart,407,0 +bombminecart,407,0 +bombmcart,407,0 +bombcart,407,0 +tntmcart,407,0 +tntcart,407,0 +dminecart,407,0 +dmcart,407,0 +dcart,407,0 +bminecart,407,0 +bmcart,407,0 +bcart,407,0 +tminecart,407,0 +tmcart,407,0 +tcart,407,0 +hopperminecart,408,0 +hoppermcart,408,0 +hoppercart,408,0 +hopminecart,408,0 +hopmcart,408,0 +hopcart,408,0 +hminecart,408,0 +hmcart,408,0 +hcart,408,0 +ironhorsearmor,417,0 +ironharmor,417,0 +ironarmor,417,0 +ihorsearmor,417,0 +iharmor,417,0 +iarmor,417,0 +steelhorsearmor,417,0 +steelharmor,417,0 +steelarmor,417,0 +shorsearmor,417,0 +sharmor,417,0 +sarmor,417,0 +goldenhorsearmor,418,0 +goldenharmor,418,0 +goldenarmor,418,0 +goldhorsearmor,418,0 +goldharmor,418,0 +goldarmor,418,0 +ghorsearmor,418,0 +gharmor,418,0 +garmor,418,0 +diamondhorsearmor,419,0 +diamondharmor,419,0 +diamondarmor,419,0 +dhorsearmor,419,0 +dharmor,419,0 +darmor,419,0 +crystalhorsearmor,419,0 +crystalharmor,419,0 +crystalarmor,419,0 +chorsearmor,419,0 +charmor,419,0 +carmor,419,0 +lead,420,0 +leash,420,0 +rope,420,0 +nametag,421,0 +tag,421,0 +commandblockminecart,422,0 +cmdblockminecart,422,0 +cblockminecart,422,0 +commandminecart,422,0 +cmdminecart,422,0 +cbminecart,422,0 +commandblockcart,422,0 +cmdblockcart,422,0 +cblockcart,422,0 +commandcart,422,0 +cmdcart,422,0 +cbcart,422,0 +13disc,2256,0 +goldmusicrecord,2256,0 +goldmusicdisk,2256,0 +goldmusicdisc,2256,0 +goldmusiccd,2256,0 +13musicrecord,2256,0 +13musicdisk,2256,0 +13musicdisc,2256,0 +13musiccd,2256,0 +gomusicrecord,2256,0 +gomusicdisk,2256,0 +gomusicdisc,2256,0 +gomusiccd,2256,0 +goldmrecord,2256,0 +goldmdisk,2256,0 +goldmdisc,2256,0 +goldmcd,2256,0 +13mrecord,2256,0 +13mdisk,2256,0 +13mdisc,2256,0 +13mcd,2256,0 +gomrecord,2256,0 +gomdisk,2256,0 +gomdisc,2256,0 +gomcd,2256,0 +goldrecord,2256,0 +golddisk,2256,0 +golddisc,2256,0 +goldcd,2256,0 +13record,2256,0 +13disk,2256,0 +13cd,2256,0 +gorecord,2256,0 +godisk,2256,0 +godisc,2256,0 +gocd,2256,0 +record1,2256,0 +disk1,2256,0 +disc1,2256,0 +cd1,2256,0 +1record,2256,0 +1disk,2256,0 +1disc,2256,0 +1cd,2256,0 +catdisc,2257,0 +greenmusicrecord,2257,0 +greenmusicdisk,2257,0 +greenmusicdisc,2257,0 +greenmusiccd,2257,0 +catmusicrecord,2257,0 +catmusicdisk,2257,0 +catmusicdisc,2257,0 +catmusiccd,2257,0 +grmusicrecord,2257,0 +grmusicdisk,2257,0 +grmusicdisc,2257,0 +grmusiccd,2257,0 +greenmrecord,2257,0 +greenmdisk,2257,0 +greenmdisc,2257,0 +greenmcd,2257,0 +catmrecord,2257,0 +catmdisk,2257,0 +catmdisc,2257,0 +catmcd,2257,0 +grmrecord,2257,0 +grmdisk,2257,0 +grmdisc,2257,0 +grmcd,2257,0 +greenrecord,2257,0 +greendisk,2257,0 +greendisc,2257,0 +greencd,2257,0 +catrecord,2257,0 +catdisk,2257,0 +catcd,2257,0 +grrecord,2257,0 +grdisk,2257,0 +grdisc,2257,0 +grcd,2257,0 +record2,2257,0 +disk2,2257,0 +disc2,2257,0 +cd2,2257,0 +2record,2257,0 +2disk,2257,0 +2disc,2257,0 +2cd,2257,0 +blocksdisc,2258,0 +orangemusicrecord,2258,0 +orangemusicdisk,2258,0 +orangemusicdisc,2258,0 +orangemusiccd,2258,0 +blocksmusicrecord,2258,0 +blocksmusicdisk,2258,0 +blocksmusicdisc,2258,0 +blocksmusiccd,2258,0 +ormusicrecord,2258,0 +ormusicdisk,2258,0 +ormusicdisc,2258,0 +ormusiccd,2258,0 +orangemrecord,2258,0 +orangemdisk,2258,0 +orangemdisc,2258,0 +orangemcd,2258,0 +blocksmrecord,2258,0 +blocksmdisk,2258,0 +blocksmdisc,2258,0 +blocksmcd,2258,0 +ormrecord,2258,0 +ormdisk,2258,0 +ormdisc,2258,0 +ormcd,2258,0 +orangerecord,2258,0 +orangedisk,2258,0 +orangedisc,2258,0 +orangecd,2258,0 +blocksrecord,2258,0 +blocksdisk,2258,0 +blockscd,2258,0 +orrecord,2258,0 +ordisk,2258,0 +ordisc,2258,0 +orcd,2258,0 +record3,2258,0 +disk3,2258,0 +disc3,2258,0 +cd3,2258,0 +3record,2258,0 +3disk,2258,0 +3disc,2258,0 +3cd,2258,0 +chirpdisc,2259,0 +redmusicrecord,2259,0 +redmusicdisk,2259,0 +redmusicdisc,2259,0 +redmusiccd,2259,0 +chirpmusicrecord,2259,0 +chirpmusicdisk,2259,0 +chirpmusicdisc,2259,0 +chirpmusiccd,2259,0 +remusicrecord,2259,0 +remusicdisk,2259,0 +remusicdisc,2259,0 +remusiccd,2259,0 +redmrecord,2259,0 +redmdisk,2259,0 +redmdisc,2259,0 +redmcd,2259,0 +chirpmrecord,2259,0 +chirpmdisk,2259,0 +chirpmdisc,2259,0 +chirpmcd,2259,0 +remrecord,2259,0 +remdisk,2259,0 +remdisc,2259,0 +remcd,2259,0 +redrecord,2259,0 +reddisk,2259,0 +reddisc,2259,0 +redcd,2259,0 +chirprecord,2259,0 +chirpdisk,2259,0 +chirpcd,2259,0 +rerecord,2259,0 +redisk,2259,0 +redisc,2259,0 +recd,2259,0 +record4,2259,0 +disk4,2259,0 +disc4,2259,0 +cd4,2259,0 +4record,2259,0 +4disk,2259,0 +4disc,2259,0 +4cd,2259,0 +fardisc,2260,0 +lightgreenmusicrecord,2260,0 +lightgreenmusicdisk,2260,0 +lightgreenmusicdisc,2260,0 +lightgreenmusiccd,2260,0 +lgreenmusicrecord,2260,0 +lgreenmusicdisk,2260,0 +lgreenmusicdisc,2260,0 +lgreenmusiccd,2260,0 +lightgrmusicrecord,2260,0 +lightgrmusicdisk,2260,0 +lightgrmusicdisc,2260,0 +lightgrmusiccd,2260,0 +farmusicrecord,2260,0 +farmusicdisk,2260,0 +farmusicdisc,2260,0 +farmusiccd,2260,0 +lgrmusicrecord,2260,0 +lgrmusicdisk,2260,0 +lgrmusicdisc,2260,0 +lgrmusiccd,2260,0 +lightgreenmrecord,2260,0 +lightgreenmdisk,2260,0 +lightgreenmdisc,2260,0 +lightgreenmcd,2260,0 +lgreenmrecord,2260,0 +lgreenmdisk,2260,0 +lgreenmdisc,2260,0 +lgreenmcd,2260,0 +lightgrmrecord,2260,0 +lightgrmdisk,2260,0 +lightgrmdisc,2260,0 +lightgrmcd,2260,0 +farmrecord,2260,0 +farmdisk,2260,0 +farmdisc,2260,0 +farmcd,2260,0 +lgrmrecord,2260,0 +lgrmdisk,2260,0 +lgrmdisc,2260,0 +lgrmcd,2260,0 +lightgreenrecord,2260,0 +lightgreendisk,2260,0 +lightgreendisc,2260,0 +lightgreencd,2260,0 +lgreenrecord,2260,0 +lgreendisk,2260,0 +lgreendisc,2260,0 +lgreencd,2260,0 +lightgrrecord,2260,0 +lightgrdisk,2260,0 +lightgrdisc,2260,0 +lightgrcd,2260,0 +farrecord,2260,0 +fardisk,2260,0 +farcd,2260,0 +lgrrecord,2260,0 +lgrdisk,2260,0 +lgrdisc,2260,0 +lgrcd,2260,0 +record5,2260,0 +disk5,2260,0 +disc5,2260,0 +cd5,2260,0 +5record,2260,0 +5disk,2260,0 +5disc,2260,0 +5cd,2260,0 +malldisc,2261,0 +purplemusicrecord,2261,0 +purplemusicdisk,2261,0 +purplemusicdisc,2261,0 +purplemusiccd,2261,0 +mallmusicrecord,2261,0 +mallmusicdisk,2261,0 +mallmusicdisc,2261,0 +mallmusiccd,2261,0 +pumusicrecord,2261,0 +pumusicdisk,2261,0 +pumusicdisc,2261,0 +pumusiccd,2261,0 +purplemrecord,2261,0 +purplemdisk,2261,0 +purplemdisc,2261,0 +purplemcd,2261,0 +mallmrecord,2261,0 +mallmdisk,2261,0 +mallmdisc,2261,0 +mallmcd,2261,0 +pumrecord,2261,0 +pumdisk,2261,0 +pumdisc,2261,0 +pumcd,2261,0 +purplerecord,2261,0 +purpledisk,2261,0 +purpledisc,2261,0 +purplecd,2261,0 +mallrecord,2261,0 +malldisk,2261,0 +mallcd,2261,0 +purecord,2261,0 +pudisk,2261,0 +pudisc,2261,0 +pucd,2261,0 +record6,2261,0 +disk6,2261,0 +disc6,2261,0 +cd6,2261,0 +6record,2261,0 +6disk,2261,0 +6disc,2261,0 +6cd,2261,0 +mellohidisc,2262,0 +pinkmusicrecord,2262,0 +pinkmusicdisk,2262,0 +pinkmusicdisc,2262,0 +pinkmusiccd,2262,0 +mellohimusicrecord,2262,0 +mellohimusicdisk,2262,0 +mellohimusicdisc,2262,0 +mellohimusiccd,2262,0 +pimusicrecord,2262,0 +pimusicdisk,2262,0 +pimusicdisc,2262,0 +pimusiccd,2262,0 +pinkmrecord,2262,0 +pinkmdisk,2262,0 +pinkmdisc,2262,0 +pinkmcd,2262,0 +mellohimrecord,2262,0 +mellohimdisk,2262,0 +mellohimdisc,2262,0 +mellohimcd,2262,0 +pimrecord,2262,0 +pimdisk,2262,0 +pimdisc,2262,0 +pimcd,2262,0 +pinkrecord,2262,0 +pinkdisk,2262,0 +pinkdisc,2262,0 +pinkcd,2262,0 +mellohirecord,2262,0 +mellohidisk,2262,0 +mellohicd,2262,0 +pirecord,2262,0 +pidisk,2262,0 +pidisc,2262,0 +picd,2262,0 +record7,2262,0 +disk7,2262,0 +disc7,2262,0 +cd7,2262,0 +7record,2262,0 +7disk,2262,0 +7disc,2262,0 +7cd,2262,0 +staldisc,2263,0 +blackmusicrecord,2263,0 +blackmusicdisk,2263,0 +blackmusicdisc,2263,0 +blackmusiccd,2263,0 +stalmusicrecord,2263,0 +stalmusicdisk,2263,0 +stalmusicdisc,2263,0 +stalmusiccd,2263,0 +blmusicrecord,2263,0 +blmusicdisk,2263,0 +blmusicdisc,2263,0 +blmusiccd,2263,0 +blackmrecord,2263,0 +blackmdisk,2263,0 +blackmdisc,2263,0 +blackmcd,2263,0 +stalmrecord,2263,0 +stalmdisk,2263,0 +stalmdisc,2263,0 +stalmcd,2263,0 +blmrecord,2263,0 +blmdisk,2263,0 +blmdisc,2263,0 +blmcd,2263,0 +blackrecord,2263,0 +blackdisk,2263,0 +blackdisc,2263,0 +blackcd,2263,0 +stalrecord,2263,0 +staldisk,2263,0 +stalcd,2263,0 +blrecord,2263,0 +bldisk,2263,0 +bldisc,2263,0 +blcd,2263,0 +record8,2263,0 +disk8,2263,0 +disc8,2263,0 +cd8,2263,0 +8record,2263,0 +8disk,2263,0 +8disc,2263,0 +8cd,2263,0 +straddisc,2264,0 +whitemusicrecord,2264,0 +whitemusicdisk,2264,0 +whitemusicdisc,2264,0 +whitemusiccd,2264,0 +stradmusicrecord,2264,0 +stradmusicdisk,2264,0 +stradmusicdisc,2264,0 +stradmusiccd,2264,0 +whmusicrecord,2264,0 +whmusicdisk,2264,0 +whmusicdisc,2264,0 +whmusiccd,2264,0 +whitemrecord,2264,0 +whitemdisk,2264,0 +whitemdisc,2264,0 +whitemcd,2264,0 +stradmrecord,2264,0 +stradmdisk,2264,0 +stradmdisc,2264,0 +stradmcd,2264,0 +whmrecord,2264,0 +whmdisk,2264,0 +whmdisc,2264,0 +whmcd,2264,0 +whiterecord,2264,0 +whitedisk,2264,0 +whitedisc,2264,0 +whitecd,2264,0 +stradrecord,2264,0 +straddisk,2264,0 +stradcd,2264,0 +whrecord,2264,0 +whdisk,2264,0 +whdisc,2264,0 +whcd,2264,0 +record9,2264,0 +disk9,2264,0 +disc9,2264,0 +cd9,2264,0 +9record,2264,0 +9disk,2264,0 +9disc,2264,0 +9cd,2264,0 +warddisc,2265,0 +darkgreenmusicrecord,2265,0 +darkgreenmusicdisk,2265,0 +darkgreenmusicdisc,2265,0 +darkgreenmusiccd,2265,0 +dgreenmusicrecord,2265,0 +dgreenmusicdisk,2265,0 +dgreenmusicdisc,2265,0 +dgreenmusiccd,2265,0 +darkgrmusicrecord,2265,0 +darkgrmusicdisk,2265,0 +darkgrmusicdisc,2265,0 +darkgrmusiccd,2265,0 +wardmusicrecord,2265,0 +wardmusicdisk,2265,0 +wardmusicdisc,2265,0 +wardmusiccd,2265,0 +dgrmusicrecord,2265,0 +dgrmusicdisk,2265,0 +dgrmusicdisc,2265,0 +dgrmusiccd,2265,0 +darkgreenmrecord,2265,0 +darkgreenmdisk,2265,0 +darkgreenmdisc,2265,0 +darkgreenmcd,2265,0 +dgreenmrecord,2265,0 +dgreenmdisk,2265,0 +dgreenmdisc,2265,0 +dgreenmcd,2265,0 +darkgrmrecord,2265,0 +darkgrmdisk,2265,0 +darkgrmdisc,2265,0 +darkgrmcd,2265,0 +wardmrecord,2265,0 +wardmdisk,2265,0 +wardmdisc,2265,0 +wardmcd,2265,0 +dgrmrecord,2265,0 +dgrmdisk,2265,0 +dgrmdisc,2265,0 +dgrmcd,2265,0 +darkgreenrecord,2265,0 +darkgreendisk,2265,0 +darkgreendisc,2265,0 +darkgreencd,2265,0 +dgreenrecord,2265,0 +dgreendisk,2265,0 +dgreendisc,2265,0 +dgreencd,2265,0 +darkgrrecord,2265,0 +darkgrdisk,2265,0 +darkgrdisc,2265,0 +darkgrcd,2265,0 +wardrecord,2265,0 +warddisk,2265,0 +wardcd,2265,0 +dgrrecord,2265,0 +dgrdisk,2265,0 +dgrdisc,2265,0 +dgrcd,2265,0 +record10,2265,0 +disk10,2265,0 +disc10,2265,0 +cd10,2265,0 +10record,2265,0 +10disk,2265,0 +10disc,2265,0 +10cd,2265,0 +11disc,2266,0 +crackedmusicrecord,2266,0 +crackedmusicdisk,2266,0 +crackedmusicdisc,2266,0 +crackedmusiccd,2266,0 +crackmusicrecord,2266,0 +crackmusicdisk,2266,0 +crackmusicdisc,2266,0 +crackmusiccd,2266,0 +11musicrecord,2266,0 +11musicdisk,2266,0 +11musicdisc,2266,0 +11musiccd,2266,0 +cmusicrecord,2266,0 +cmusicdisk,2266,0 +cmusicdisc,2266,0 +cmusiccd,2266,0 +crackedmrecord,2266,0 +crackedmdisk,2266,0 +crackedmdisc,2266,0 +crackedmcd,2266,0 +crackmrecord,2266,0 +crackmdisk,2266,0 +crackmdisc,2266,0 +crackmcd,2266,0 +11mrecord,2266,0 +11mdisk,2266,0 +11mdisc,2266,0 +11mcd,2266,0 +cmrecord,2266,0 +cmdisk,2266,0 +cmdisc,2266,0 +cmcd,2266,0 +crackedrecord,2266,0 +crackeddisk,2266,0 +crackeddisc,2266,0 +crackedcd,2266,0 +crackrecord,2266,0 +crackdisk,2266,0 +crackdisc,2266,0 +crackcd,2266,0 +crecord,2266,0 +cdisk,2266,0 +cdisc,2266,0 +ccd,2266,0 +record11,2266,0 +disk11,2266,0 +disc11,2266,0 +cd11,2266,0 +11record,2266,0 +11disk,2266,0 +11cd,2266,0 +waitdisc,2267,0 +waitmusicrecord,2267,0 +waitmusicdisk,2267,0 +waitmusicdisc,2267,0 +waitmusiccd,2267,0 +bluemusicrecord,2267,0 +bluemusicdisk,2267,0 +bluemusicdisc,2267,0 +bluemusiccd,2267,0 +12musicrecord,2267,0 +12musicdisk,2267,0 +12musicdisc,2267,0 +12musiccd,2267,0 +cyanmusicrecord,2267,0 +cyanmusicdisk,2267,0 +cyanmusicdisc,2267,0 +cyanmusiccd,2267,0 +waitmrecord,2267,0 +waitmdisk,2267,0 +waitmdisc,2267,0 +waitmcd,2267,0 +bluemrecord,2267,0 +bluemdisk,2267,0 +bluemdisc,2267,0 +bluemcd,2267,0 +12mrecord,2267,0 +12mdisk,2267,0 +12mdisc,2267,0 +12mcd,2267,0 +cyanmrecord,2267,0 +cyanmdisk,2267,0 +cyanmdisc,2267,0 +cyanmcd,2267,0 +waitrecord,2267,0 +waitdisk,2267,0 +waitcd,2267,0 +bluerecord,2267,0 +bluedisk,2267,0 +bluedisc,2267,0 +bluecd,2267,0 +cyanrecord,2267,0 +cyandisk,2267,0 +cyandisc,2267,0 +cyancd,2267,0 +record12,2267,0 +disk12,2267,0 +disc12,2267,0 +cd12,2267,0 +12record,2267,0 +12disk,2267,0 +12disc,2267,0 +12cd,2267,0 \ No newline at end of file diff --git a/src/lives.yml b/src/lives.yml new file mode 100644 index 0000000..04ec367 --- /dev/null +++ b/src/lives.yml @@ -0,0 +1 @@ +lives: {} diff --git a/src/net/jodah/expiringmap/EntryLoader.java b/src/net/jodah/expiringmap/EntryLoader.java new file mode 100644 index 0000000..8f6422a --- /dev/null +++ b/src/net/jodah/expiringmap/EntryLoader.java @@ -0,0 +1,17 @@ +package net.jodah.expiringmap; + +/** + * Loads entries on demand. + * + * @param Key type + * @param Value type + */ +public interface EntryLoader { + /** + * Called to load a new value for the {@code key} into an expiring map. + * + * @param key to load a value for + * @return new value to load + */ + V load(K key); +} \ No newline at end of file diff --git a/src/net/jodah/expiringmap/ExpirationListener.java b/src/net/jodah/expiringmap/ExpirationListener.java new file mode 100644 index 0000000..5c4c1d5 --- /dev/null +++ b/src/net/jodah/expiringmap/ExpirationListener.java @@ -0,0 +1,17 @@ +package net.jodah.expiringmap; + +/** + * A listener for expired object events. + * + * @param Key type + * @param Value type + */ +public interface ExpirationListener { + /** + * Called when a map entry expires. + * + * @param key Expired key + * @param value Expired value + */ + void expired(K key, V value); +} \ No newline at end of file diff --git a/src/net/jodah/expiringmap/ExpirationPolicy.java b/src/net/jodah/expiringmap/ExpirationPolicy.java new file mode 100644 index 0000000..defb4a0 --- /dev/null +++ b/src/net/jodah/expiringmap/ExpirationPolicy.java @@ -0,0 +1,11 @@ +package net.jodah.expiringmap; + +/** + * Determines how ExpiringMap entries should be expired. + */ +public enum ExpirationPolicy { + /** Expires entries based on when they were last accessed */ + ACCESSED, + /** Expires entries based on when they were created */ + CREATED; +} \ No newline at end of file diff --git a/src/net/jodah/expiringmap/ExpiringEntryLoader.java b/src/net/jodah/expiringmap/ExpiringEntryLoader.java new file mode 100644 index 0000000..f30bcd7 --- /dev/null +++ b/src/net/jodah/expiringmap/ExpiringEntryLoader.java @@ -0,0 +1,17 @@ +package net.jodah.expiringmap; + +/** + * Loads entries on demand, with control over each value's expiry duration (i.e. variable expiration). + * + * @param Key type + * @param Value type + */ +public interface ExpiringEntryLoader { + /** + * Called to load a new value for the {@code key} into an expiring map. + * + * @param key to load a value for + * @return contains new value to load along with its expiry duration + */ + ExpiringValue load(K key); +} \ No newline at end of file diff --git a/src/net/jodah/expiringmap/ExpiringMap.java b/src/net/jodah/expiringmap/ExpiringMap.java new file mode 100644 index 0000000..df3dcaa --- /dev/null +++ b/src/net/jodah/expiringmap/ExpiringMap.java @@ -0,0 +1,1385 @@ +package net.jodah.expiringmap; + +import java.lang.ref.WeakReference; +import java.util.AbstractCollection; +import java.util.AbstractSet; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +import net.jodah.expiringmap.internal.Assert; +import net.jodah.expiringmap.internal.NamedThreadFactory; + +/** + * A thread-safe map that expires entries. Optional features include expiration policies, variable entry expiration, + * lazy entry loading, and expiration listeners. + * + *

+ * Entries are tracked by expiration time and expired by a single thread. + * + *

+ * Expiration listeners are called synchronously as entries are expired and block write operations to the map until they + * completed. Asynchronous expiration listeners are called on a separate thread pool and do not block map operations. + * + *

+ * When variable expiration is disabled (default), put/remove operations have a time complexity O(1). When + * variable expiration is enabled, put/remove operations have time complexity of O(log n). + * + *

+ * Example usages: + * + *

+ * {@code 
+ * Map map = ExpiringMap.create(); 
+ * Map map = ExpiringMap.builder().expiration(30, TimeUnit.SECONDS).build();
+ * Map map = ExpiringMap.builder()
+ *   .expiration(10, TimeUnit.MINUTES)
+ *   .entryLoader(new EntryLoader() {
+ *     public Connection load(String address) {
+ *       return new Connection(address);
+ *     }
+ *   })
+ *   .expirationListener(new ExpirationListener() { 
+ *     public void expired(String key, Connection connection) { 
+ *       connection.close();
+ *     } 
+ *   })
+ *   .build();
+ * }
+ * 
+ * + * @author Jonathan Halterman + * @param Key type + * @param Value type + */ +public class ExpiringMap implements ConcurrentMap { + static volatile ScheduledExecutorService EXPIRER; + static volatile ThreadPoolExecutor LISTENER_SERVICE; + static ThreadFactory THREAD_FACTORY; + + List> expirationListeners; + List> asyncExpirationListeners; + private AtomicLong expirationNanos; + private int maxSize; + private final AtomicReference expirationPolicy; + private final EntryLoader entryLoader; + private final ExpiringEntryLoader expiringEntryLoader; + private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); + private final Lock readLock = readWriteLock.readLock(); + private final Lock writeLock = readWriteLock.writeLock(); + /** Guarded by "readWriteLock" */ + private final EntryMap entries; + private final boolean variableExpiration; + + /** + * Sets the {@link ThreadFactory} that is used to create expiration and listener callback threads for all ExpiringMap + * instances. + * + * @param threadFactory + * @throws NullPointerException if {@code threadFactory} is null + */ + public static void setThreadFactory(ThreadFactory threadFactory) { + THREAD_FACTORY = Assert.notNull(threadFactory, "threadFactory"); + } + + /** + * Creates a new instance of ExpiringMap. + * + * @param builder The map builder + */ + private ExpiringMap(final Builder builder) { + if (EXPIRER == null) { + synchronized (ExpiringMap.class) { + if (EXPIRER == null) { + EXPIRER = Executors.newSingleThreadScheduledExecutor( + THREAD_FACTORY == null ? new NamedThreadFactory("ExpiringMap-Expirer") : THREAD_FACTORY); + } + } + } + + if (LISTENER_SERVICE == null && builder.asyncExpirationListeners != null) { + synchronized (ExpiringMap.class) { + if (LISTENER_SERVICE == null) { + LISTENER_SERVICE = (ThreadPoolExecutor) Executors.newCachedThreadPool( + THREAD_FACTORY == null ? new NamedThreadFactory("ExpiringMap-Listener-%s") : THREAD_FACTORY); + } + } + } + + variableExpiration = builder.variableExpiration; + entries = variableExpiration ? new EntryTreeHashMap() : new EntryLinkedHashMap(); + if (builder.expirationListeners != null) + expirationListeners = new CopyOnWriteArrayList>(builder.expirationListeners); + if (builder.asyncExpirationListeners != null) + asyncExpirationListeners = new CopyOnWriteArrayList>(builder.asyncExpirationListeners); + expirationPolicy = new AtomicReference(builder.expirationPolicy); + expirationNanos = new AtomicLong(TimeUnit.NANOSECONDS.convert(builder.duration, builder.timeUnit)); + maxSize = builder.maxSize; + entryLoader = builder.entryLoader; + expiringEntryLoader = builder.expiringEntryLoader; + } + + /** + * Builds ExpiringMap instances. Defaults to ExpirationPolicy.CREATED, expiration of 60 TimeUnit.SECONDS and + * a maxSize of Integer.MAX_VALUE. + */ + public static final class Builder { + private ExpirationPolicy expirationPolicy = ExpirationPolicy.CREATED; + private List> expirationListeners; + private List> asyncExpirationListeners; + private TimeUnit timeUnit = TimeUnit.SECONDS; + private boolean variableExpiration; + private long duration = 60; + private int maxSize = Integer.MAX_VALUE; + private EntryLoader entryLoader; + private ExpiringEntryLoader expiringEntryLoader; + + /** + * Creates a new Builder object. + */ + private Builder() { + } + + /** + * Builds and returns an expiring map. + * + * @param Key type + * @param Value type + */ + @SuppressWarnings("unchecked") + public ExpiringMap build() { + return new ExpiringMap((Builder) this); + } + + /** + * Sets the default map entry expiration. + * + * @param duration the length of time after an entry is created that it should be removed + * @param timeUnit the unit that {@code duration} is expressed in + * @throws NullPointerException if {@code timeUnit} is null + */ + public Builder expiration(long duration, TimeUnit timeUnit) { + this.duration = duration; + this.timeUnit = Assert.notNull(timeUnit, "timeUnit"); + return this; + } + + /** + * Sets the maximum size of the map. Once this size has been reached, adding an additional entry will expire the + * first entry in line for expiration based on the expiration policy. + * + * @param maxSize The maximum size of the map. + */ + public Builder maxSize(int maxSize) { + Assert.operation(maxSize > 0, "maxSize"); + this.maxSize = maxSize; + return this; + } + + /** + * Sets the EntryLoader to use when loading entries. Either an EntryLoader or ExpiringEntryLoader may be set, not + * both. + * + * @param loader to set + * @throws NullPointerException if {@code loader} is null + * @throws IllegalStateException if an {@link #expiringEntryLoader(ExpiringEntryLoader) ExpiringEntryLoader} is set + */ + @SuppressWarnings("unchecked") + public Builder entryLoader(EntryLoader loader) { + assertNoLoaderSet(); + entryLoader = (EntryLoader) Assert.notNull(loader, "loader"); + return (Builder) this; + } + + /** + * Sets the ExpiringEntryLoader to use when loading entries and configures {@link #variableExpiration() variable + * expiration}. Either an EntryLoader or ExpiringEntryLoader may be set, not both. + * + * @param loader to set + * @throws NullPointerException if {@code loader} is null + * @throws IllegalStateException if an {@link #entryLoader(EntryLoader) EntryLoader} is set + */ + @SuppressWarnings("unchecked") + public Builder expiringEntryLoader( + ExpiringEntryLoader loader) { + assertNoLoaderSet(); + expiringEntryLoader = (ExpiringEntryLoader) Assert.notNull(loader, "loader"); + variableExpiration(); + return (Builder) this; + } + + /** + * Configures the expiration listener that will receive notifications upon each map entry's expiration. + * Notifications are delivered synchronously and block map write operations. + * + * @param listener to set + * @throws NullPointerException if {@code listener} is null + */ + @SuppressWarnings("unchecked") + public Builder expirationListener( + ExpirationListener listener) { + Assert.notNull(listener, "listener"); + if (expirationListeners == null) + expirationListeners = new ArrayList>(); + expirationListeners.add((ExpirationListener) listener); + return (Builder) this; + } + + /** + * Configures the expiration listeners which will receive notifications upon each map entry's expiration. + * Notifications are delivered synchronously and block map write operations. + * + * @param listeners to set + * @throws NullPointerException if {@code listener} is null + */ + @SuppressWarnings("unchecked") + public Builder expirationListeners( + List> listeners) { + Assert.notNull(listeners, "listeners"); + if (expirationListeners == null) + expirationListeners = new ArrayList>(listeners.size()); + for (ExpirationListener listener : listeners) + expirationListeners.add((ExpirationListener) listener); + return (Builder) this; + } + + /** + * Configures the expiration listener which will receive asynchronous notifications upon each map entry's + * expiration. + * + * @param listener to set + * @throws NullPointerException if {@code listener} is null + */ + @SuppressWarnings("unchecked") + public Builder asyncExpirationListener( + ExpirationListener listener) { + Assert.notNull(listener, "listener"); + if (asyncExpirationListeners == null) + asyncExpirationListeners = new ArrayList>(); + asyncExpirationListeners.add((ExpirationListener) listener); + return (Builder) this; + } + + /** + * Configures the expiration listeners which will receive asynchronous notifications upon each map entry's + * expiration. + * + * @param listeners to set + * @throws NullPointerException if {@code listener} is null + */ + @SuppressWarnings("unchecked") + public Builder asyncExpirationListeners( + List> listeners) { + Assert.notNull(listeners, "listeners"); + if (asyncExpirationListeners == null) + asyncExpirationListeners = new ArrayList>(listeners.size()); + for (ExpirationListener listener : listeners) + asyncExpirationListeners.add((ExpirationListener) listener); + return (Builder) this; + } + + /** + * Configures the map entry expiration policy. + * + * @param expirationPolicy + * @throws NullPointerException if {@code expirationPolicy} is null + */ + public Builder expirationPolicy(ExpirationPolicy expirationPolicy) { + this.expirationPolicy = Assert.notNull(expirationPolicy, "expirationPolicy"); + return this; + } + + /** + * Allows for map entries to have individual expirations and for expirations to be changed. + */ + public Builder variableExpiration() { + variableExpiration = true; + return this; + } + + private void assertNoLoaderSet() { + Assert.state(entryLoader == null && expiringEntryLoader == null, + "Either entryLoader or expiringEntryLoader may be set, not both"); + } + } + + /** Entry map definition. */ + private interface EntryMap extends Map> { + /** Returns the first entry in the map or null if the map is empty. */ + ExpiringEntry first(); + + /** + * Reorders the given entry in the map. + * + * @param entry to reorder + */ + void reorder(ExpiringEntry entry); + + /** Returns a values iterator. */ + Iterator> valuesIterator(); + } + + /** Entry LinkedHashMap implementation. */ + private static class EntryLinkedHashMap extends LinkedHashMap> + implements EntryMap { + private static final long serialVersionUID = 1L; + + @Override + public boolean containsValue(Object value) { + for (ExpiringEntry entry : values()) { + V v = entry.value; + if (v == value || (value != null && value.equals(v))) + return true; + } + return false; + } + + @Override + public ExpiringEntry first() { + return isEmpty() ? null : values().iterator().next(); + } + + @Override + public void reorder(ExpiringEntry value) { + remove(value.key); + value.resetExpiration(); + put(value.key, value); + } + + @Override + public Iterator> valuesIterator() { + return values().iterator(); + } + + abstract class AbstractHashIterator { + private final Iterator>> iterator = entrySet().iterator(); + private ExpiringEntry next; + + public boolean hasNext() { + return iterator.hasNext(); + } + + public ExpiringEntry getNext() { + next = iterator.next().getValue(); + return next; + } + + public void remove() { + iterator.remove(); + } + } + + final class KeyIterator extends AbstractHashIterator implements Iterator { + public final K next() { + return getNext().key; + } + } + + final class ValueIterator extends AbstractHashIterator implements Iterator { + public final V next() { + return getNext().value; + } + } + + public final class EntryIterator extends AbstractHashIterator implements Iterator> { + public final Map.Entry next() { + return mapEntryFor(getNext()); + } + } + } + + /** Entry TreeHashMap implementation for variable expiration ExpiringMap entries. */ + private static class EntryTreeHashMap extends HashMap> implements EntryMap { + private static final long serialVersionUID = 1L; + SortedSet> sortedSet = new TreeSet>(); + + @Override + public void clear() { + super.clear(); + sortedSet.clear(); + } + + @Override + public boolean containsValue(Object value) { + for (ExpiringEntry entry : values()) { + V v = entry.value; + if (v == value || (value != null && value.equals(v))) + return true; + } + return false; + } + + @Override + public ExpiringEntry first() { + return sortedSet.isEmpty() ? null : sortedSet.first(); + } + + @Override + public ExpiringEntry put(K key, ExpiringEntry value) { + sortedSet.add(value); + return super.put(key, value); + } + + @Override + public ExpiringEntry remove(Object key) { + ExpiringEntry entry = super.remove(key); + if (entry != null) + sortedSet.remove(entry); + return entry; + } + + @Override + public void reorder(ExpiringEntry value) { + sortedSet.remove(value); + value.resetExpiration(); + sortedSet.add(value); + } + + @Override + public Iterator> valuesIterator() { + return new ExpiringEntryIterator(); + } + + abstract class AbstractHashIterator { + private final Iterator> iterator = sortedSet.iterator(); + protected ExpiringEntry next; + + public boolean hasNext() { + return iterator.hasNext(); + } + + public ExpiringEntry getNext() { + next = iterator.next(); + return next; + } + + public void remove() { + EntryTreeHashMap.super.remove(next.key); + iterator.remove(); + } + } + + final class ExpiringEntryIterator extends AbstractHashIterator implements Iterator> { + public final ExpiringEntry next() { + return getNext(); + } + } + + final class KeyIterator extends AbstractHashIterator implements Iterator { + public final K next() { + return getNext().key; + } + } + + final class ValueIterator extends AbstractHashIterator implements Iterator { + public final V next() { + return getNext().value; + } + } + + final class EntryIterator extends AbstractHashIterator implements Iterator> { + public final Map.Entry next() { + return mapEntryFor(getNext()); + } + } + } + + /** Expiring map entry implementation. */ + static class ExpiringEntry implements Comparable> { + final AtomicLong expirationNanos; + /** Epoch time at which the entry is expected to expire */ + final AtomicLong expectedExpiration; + final AtomicReference expirationPolicy; + final K key; + /** Guarded by "this" */ + volatile Future entryFuture; + /** Guarded by "this" */ + V value; + /** Guarded by "this" */ + volatile boolean scheduled; + + /** + * Creates a new ExpiringEntry object. + * + * @param key for the entry + * @param value for the entry + * @param expirationPolicy for the entry + * @param expirationNanos for the entry + */ + ExpiringEntry(K key, V value, AtomicReference expirationPolicy, AtomicLong expirationNanos) { + this.key = key; + this.value = value; + this.expirationPolicy = expirationPolicy; + this.expirationNanos = expirationNanos; + this.expectedExpiration = new AtomicLong(); + resetExpiration(); + } + + @Override + public int compareTo(ExpiringEntry other) { + if (key.equals(other.key)) + return 0; + return expectedExpiration.get() < other.expectedExpiration.get() ? -1 : 1; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((key == null) ? 0 : key.hashCode()); + result = prime * result + ((value == null) ? 0 : value.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ExpiringEntry other = (ExpiringEntry) obj; + if (!key.equals(other.key)) + return false; + if (value == null) { + if (other.value != null) + return false; + } else if (!value.equals(other.value)) + return false; + return true; + } + + @Override + public String toString() { + return value.toString(); + } + + /** + * Marks the entry as canceled. + * + * @return true if the entry was scheduled + */ + synchronized boolean cancel() { + boolean result = scheduled; + if (entryFuture != null) + entryFuture.cancel(false); + + entryFuture = null; + scheduled = false; + return result; + } + + /** Gets the entry value. */ + synchronized V getValue() { + return value; + } + + /** Resets the entry's expected expiration. */ + void resetExpiration() { + expectedExpiration.set(expirationNanos.get() + System.nanoTime()); + } + + /** Marks the entry as scheduled. */ + synchronized void schedule(Future entryFuture) { + this.entryFuture = entryFuture; + scheduled = true; + } + + /** Sets the entry value. */ + synchronized void setValue(V value) { + this.value = value; + } + } + + /** + * Creates an ExpiringMap builder. + * + * @return New ExpiringMap builder + */ + public static Builder builder() { + return new Builder(); + } + + /** + * Creates a new instance of ExpiringMap with ExpirationPolicy.CREATED and an expiration of 60 seconds. + */ + @SuppressWarnings("unchecked") + public static ExpiringMap create() { + return new ExpiringMap((Builder) ExpiringMap.builder()); + } + + /** + * Adds an expiration listener. + * + * @param listener to add + * @throws NullPointerException if {@code listener} is null + */ + public synchronized void addExpirationListener(ExpirationListener listener) { + Assert.notNull(listener, "listener"); + if (expirationListeners == null) + expirationListeners = new CopyOnWriteArrayList>(); + expirationListeners.add(listener); + } + + /** + * Adds an asynchronous expiration listener. + * + * @param listener to add + * @throws NullPointerException if {@code listener} is null + */ + public synchronized void addAsyncExpirationListener(ExpirationListener listener) { + Assert.notNull(listener, "listener"); + if (asyncExpirationListeners == null) + asyncExpirationListeners = new CopyOnWriteArrayList>(); + asyncExpirationListeners.add(listener); + } + + @Override + public void clear() { + writeLock.lock(); + try { + for (ExpiringEntry entry : entries.values()) + entry.cancel(); + entries.clear(); + } finally { + writeLock.unlock(); + } + } + + @Override + public boolean containsKey(Object key) { + readLock.lock(); + try { + return entries.containsKey(key); + } finally { + readLock.unlock(); + } + } + + @Override + public boolean containsValue(Object value) { + readLock.lock(); + try { + return entries.containsValue(value); + } finally { + readLock.unlock(); + } + } + + @Override + public Set> entrySet() { + return new AbstractSet>() { + @Override + public void clear() { + ExpiringMap.this.clear(); + } + + @Override + public boolean contains(Object entry) { + if (!(entry instanceof Map.Entry)) + return false; + Map.Entry e = (Map.Entry) entry; + return containsKey(e.getKey()); + } + + @Override + public Iterator> iterator() { + return (entries instanceof EntryLinkedHashMap) ? ((EntryLinkedHashMap) entries).new EntryIterator() + : ((EntryTreeHashMap) entries).new EntryIterator(); + } + + @Override + public boolean remove(Object entry) { + if (entry instanceof Map.Entry) { + Map.Entry e = (Map.Entry) entry; + return ExpiringMap.this.remove(e.getKey()) != null; + } + return false; + } + + @Override + public int size() { + return ExpiringMap.this.size(); + } + }; + } + + @Override + public boolean equals(Object obj) { + readLock.lock(); + try { + return entries.equals(obj); + } finally { + readLock.unlock(); + } + } + + @Override + @SuppressWarnings("unchecked") + public V get(Object key) { + ExpiringEntry entry = getEntry(key); + + if (entry == null) { + return load((K) key); + } else if (ExpirationPolicy.ACCESSED.equals(entry.expirationPolicy.get())) + resetEntry(entry, false); + + return entry.getValue(); + } + + private V load(K key) { + if (entryLoader == null && expiringEntryLoader == null) + return null; + + writeLock.lock(); + try { + // Double check for entry + ExpiringEntry entry = getEntry(key); + if (entry != null) + return entry.getValue(); + + if (entryLoader != null) { + V value = entryLoader.load(key); + put(key, value); + return value; + } else { + ExpiringValue expiringValue = expiringEntryLoader.load(key); + if (expiringValue == null) { + put(key, null); + return null; + } else { + long duration = expiringValue.getTimeUnit() == null ? expirationNanos.get() : expiringValue.getDuration(); + TimeUnit timeUnit = expiringValue.getTimeUnit() == null ? TimeUnit.NANOSECONDS : expiringValue.getTimeUnit(); + put(key, expiringValue.getValue(), expiringValue.getExpirationPolicy() == null ? expirationPolicy.get() + : expiringValue.getExpirationPolicy(), duration, timeUnit); + return expiringValue.getValue(); + } + } + } finally { + writeLock.unlock(); + } + } + + /** + * Returns the map's default expiration duration in milliseconds. + * + * @return The expiration duration (milliseconds) + */ + public long getExpiration() { + return TimeUnit.NANOSECONDS.toMillis(expirationNanos.get()); + } + + /** + * Gets the expiration duration in milliseconds for the entry corresponding to the given key. + * + * @param key + * @return The expiration duration in milliseconds + * @throws NullPointerException if {@code key} is null + * @throws NoSuchElementException If no entry exists for the given key + */ + public long getExpiration(K key) { + Assert.notNull(key, "key"); + ExpiringEntry entry = getEntry(key); + Assert.element(entry, key); + return TimeUnit.NANOSECONDS.toMillis(entry.expirationNanos.get()); + } + + /** + * Gets the ExpirationPolicy for the entry corresponding to the given {@code key}. + * + * @param key + * @return The ExpirationPolicy for the {@code key} + * @throws NullPointerException if {@code key} is null + * @throws NoSuchElementException If no entry exists for the given key + */ + public ExpirationPolicy getExpirationPolicy(K key) { + Assert.notNull(key, "key"); + ExpiringEntry entry = getEntry(key); + Assert.element(entry, key); + return entry.expirationPolicy.get(); + } + + /** + * Gets the expected expiration, in milliseconds from the current time, for the entry corresponding to the given + * {@code key}. + * + * @param key + * @return The expiration duration in milliseconds + * @throws NullPointerException if {@code key} is null + * @throws NoSuchElementException If no entry exists for the given key + */ + public long getExpectedExpiration(K key) { + Assert.notNull(key, "key"); + ExpiringEntry entry = getEntry(key); + Assert.element(entry, key); + return TimeUnit.NANOSECONDS.toMillis(entry.expectedExpiration.get() - System.nanoTime()); + } + + /** + * Gets the maximum size of the map. Once this size has been reached, adding an additional entry will expire the + * first entry in line for expiration based on the expiration policy. + * + * @return The maximum size of the map. + */ + public int getMaxSize() { + return maxSize; + } + + @Override + public int hashCode() { + readLock.lock(); + try { + return entries.hashCode(); + } finally { + readLock.unlock(); + } + } + + @Override + public boolean isEmpty() { + readLock.lock(); + try { + return entries.isEmpty(); + } finally { + readLock.unlock(); + } + } + + @Override + public Set keySet() { + return new AbstractSet() { + @Override + public void clear() { + ExpiringMap.this.clear(); + } + + @Override + public boolean contains(Object key) { + return containsKey(key); + } + + @Override + public Iterator iterator() { + return (entries instanceof EntryLinkedHashMap) ? ((EntryLinkedHashMap) entries).new KeyIterator() + : ((EntryTreeHashMap) entries).new KeyIterator(); + } + + @Override + public boolean remove(Object value) { + return ExpiringMap.this.remove(value) != null; + } + + @Override + public int size() { + return ExpiringMap.this.size(); + } + }; + } + + /** + * Puts {@code value} in the map for {@code key}. Resets the entry's expiration unless an entry already exists for the + * same {@code key} and {@code value}. + * + * @param key to put value for + * @param value to put for key + * @return the old value + * @throws NullPointerException if {@code key} is null + */ + @Override + public V put(K key, V value) { + Assert.notNull(key, "key"); + return putInternal(key, value, expirationPolicy.get(), expirationNanos.get()); + } + + /** + * @see #put(Object, Object, ExpirationPolicy, long, TimeUnit) + */ + public V put(K key, V value, ExpirationPolicy expirationPolicy) { + return put(key, value, expirationPolicy, expirationNanos.get(), TimeUnit.NANOSECONDS); + } + + /** + * @see #put(Object, Object, ExpirationPolicy, long, TimeUnit) + */ + public V put(K key, V value, long duration, TimeUnit timeUnit) { + return put(key, value, expirationPolicy.get(), duration, timeUnit); + } + + /** + * Puts {@code value} in the map for {@code key}. Resets the entry's expiration unless an entry already exists for the + * same {@code key} and {@code value}. Requires that variable expiration be enabled. + * + * @param key Key to put value for + * @param value Value to put for key + * @param duration the length of time after an entry is created that it should be removed + * @param timeUnit the unit that {@code duration} is expressed in + * @return the old value + * @throws UnsupportedOperationException If variable expiration is not enabled + * @throws NullPointerException if {@code key}, {@code expirationPolicy} or {@code timeUnit} are null + */ + public V put(K key, V value, ExpirationPolicy expirationPolicy, long duration, TimeUnit timeUnit) { + Assert.notNull(key, "key"); + Assert.notNull(expirationPolicy, "expirationPolicy"); + Assert.notNull(timeUnit, "timeUnit"); + Assert.operation(variableExpiration, "Variable expiration is not enabled"); + return putInternal(key, value, expirationPolicy, TimeUnit.NANOSECONDS.convert(duration, timeUnit)); + } + + @Override + public void putAll(Map map) { + Assert.notNull(map, "map"); + long expiration = expirationNanos.get(); + ExpirationPolicy expirationPolicy = this.expirationPolicy.get(); + writeLock.lock(); + try { + for (Map.Entry entry : map.entrySet()) + putInternal(entry.getKey(), entry.getValue(), expirationPolicy, expiration); + } finally { + writeLock.unlock(); + } + } + + @Override + public V putIfAbsent(K key, V value) { + Assert.notNull(key, "key"); + writeLock.lock(); + try { + if (!entries.containsKey(key)) + return putInternal(key, value, expirationPolicy.get(), expirationNanos.get()); + else + return entries.get(key).getValue(); + } finally { + writeLock.unlock(); + } + } + + @Override + public V remove(Object key) { + Assert.notNull(key, "key"); + writeLock.lock(); + try { + ExpiringEntry entry = entries.remove(key); + if (entry == null) + return null; + if (entry.cancel()) + scheduleEntry(entries.first()); + return entry.getValue(); + } finally { + writeLock.unlock(); + } + } + + @Override + public boolean remove(Object key, Object value) { + Assert.notNull(key, "key"); + writeLock.lock(); + try { + ExpiringEntry entry = entries.get(key); + if (entry != null && entry.getValue().equals(value)) { + entries.remove(key); + if (entry.cancel()) + scheduleEntry(entries.first()); + return true; + } else + return false; + } finally { + writeLock.unlock(); + } + } + + @Override + public V replace(K key, V value) { + Assert.notNull(key, "key"); + writeLock.lock(); + try { + if (entries.containsKey(key)) { + return putInternal(key, value, expirationPolicy.get(), expirationNanos.get()); + } else + return null; + } finally { + writeLock.unlock(); + } + } + + @Override + public boolean replace(K key, V oldValue, V newValue) { + Assert.notNull(key, "key"); + writeLock.lock(); + try { + ExpiringEntry entry = entries.get(key); + if (entry != null && entry.getValue().equals(oldValue)) { + putInternal(key, newValue, expirationPolicy.get(), expirationNanos.get()); + return true; + } else + return false; + } finally { + writeLock.unlock(); + } + } + + /** + * Removes an expiration listener. + * + * @param listener + * @throws NullPointerException if {@code listener} is null + */ + public void removeExpirationListener(ExpirationListener listener) { + Assert.notNull(listener, "listener"); + for (int i = 0; i < expirationListeners.size(); i++) { + if (expirationListeners.get(i).equals(listener)) { + expirationListeners.remove(i); + return; + } + } + } + + /** + * Removes an asynchronous expiration listener. + * + * @param listener + * @throws NullPointerException if {@code listener} is null + */ + public void removeAsyncExpirationListener(ExpirationListener listener) { + Assert.notNull(listener, "listener"); + for (int i = 0; i < asyncExpirationListeners.size(); i++) { + if (asyncExpirationListeners.get(i).equals(listener)) { + asyncExpirationListeners.remove(i); + return; + } + } + } + + /** + * Resets expiration for the entry corresponding to {@code key}. + * + * @param key to reset expiration for + * @throws NullPointerException if {@code key} is null + */ + public void resetExpiration(K key) { + Assert.notNull(key, "key"); + ExpiringEntry entry = getEntry(key); + if (entry != null) + resetEntry(entry, false); + } + + /** + * Sets the expiration duration for the entry corresponding to the given key. Supported only if variable expiration is + * enabled. + * + * @param key Key to set expiration for + * @param duration the length of time after an entry is created that it should be removed + * @param timeUnit the unit that {@code duration} is expressed in + * @throws NullPointerException if {@code key} or {@code timeUnit} are null + * @throws UnsupportedOperationException If variable expiration is not enabled + */ + public void setExpiration(K key, long duration, TimeUnit timeUnit) { + Assert.notNull(key, "key"); + Assert.notNull(timeUnit, "timeUnit"); + Assert.operation(variableExpiration, "Variable expiration is not enabled"); + writeLock.lock(); + try { + ExpiringEntry entry = entries.get(key); + if (entry != null) { + entry.expirationNanos.set(TimeUnit.NANOSECONDS.convert(duration, timeUnit)); + resetEntry(entry, true); + } + } finally { + writeLock.unlock(); + } + } + + /** + * Updates the default map entry expiration. Supported only if variable expiration is enabled. + * + * @param duration the length of time after an entry is created that it should be removed + * @param timeUnit the unit that {@code duration} is expressed in + * @throws NullPointerException {@code timeUnit} is null + * @throws UnsupportedOperationException If variable expiration is not enabled + */ + public void setExpiration(long duration, TimeUnit timeUnit) { + Assert.notNull(timeUnit, "timeUnit"); + Assert.operation(variableExpiration, "Variable expiration is not enabled"); + expirationNanos.set(TimeUnit.NANOSECONDS.convert(duration, timeUnit)); + } + + /** + * Sets the global expiration policy for the map. Individual expiration policies may override the global policy. + * + * @param expirationPolicy + * @throws NullPointerException {@code expirationPolicy} is null + */ + public void setExpirationPolicy(ExpirationPolicy expirationPolicy) { + Assert.notNull(expirationPolicy, "expirationPolicy"); + this.expirationPolicy.set(expirationPolicy); + } + + /** + * Sets the expiration policy for the entry corresponding to the given key. + * + * @param key to set policy for + * @param expirationPolicy to set + * @throws NullPointerException if {@code key} or {@code expirationPolicy} are null + * @throws UnsupportedOperationException If variable expiration is not enabled + */ + public void setExpirationPolicy(K key, ExpirationPolicy expirationPolicy) { + Assert.notNull(key, "key"); + Assert.notNull(expirationPolicy, "expirationPolicy"); + Assert.operation(variableExpiration, "Variable expiration is not enabled"); + ExpiringEntry entry = getEntry(key); + if (entry != null) + entry.expirationPolicy.set(expirationPolicy); + } + + /** + * Sets the maximum size of the map. Once this size has been reached, adding an additional entry will expire the + * first entry in line for expiration based on the expiration policy. + * + * @param maxSize The maximum size of the map. + */ + public void setMaxSize(int maxSize) { + Assert.operation(maxSize > 0, "maxSize"); + this.maxSize = maxSize; + } + + @Override + public int size() { + readLock.lock(); + try { + return entries.size(); + } finally { + readLock.unlock(); + } + } + + @Override + public String toString() { + readLock.lock(); + try { + return entries.toString(); + } finally { + readLock.unlock(); + } + } + + @Override + public Collection values() { + return new AbstractCollection() { + @Override + public void clear() { + ExpiringMap.this.clear(); + } + + @Override + public boolean contains(Object value) { + return containsValue(value); + } + + @Override + public Iterator iterator() { + return (entries instanceof EntryLinkedHashMap) ? ((EntryLinkedHashMap) entries).new ValueIterator() + : ((EntryTreeHashMap) entries).new ValueIterator(); + } + + @Override + public int size() { + return ExpiringMap.this.size(); + } + }; + } + + /** + * Notifies expiration listeners that the given entry expired. Must not be called from within a locked context. + * + * @param entry Entry to expire + */ + void notifyListeners(final ExpiringEntry entry) { + if (asyncExpirationListeners != null) + for (final ExpirationListener listener : asyncExpirationListeners) { + LISTENER_SERVICE.execute(new Runnable() { + public void run() { + try { + listener.expired(entry.key, entry.getValue()); + } catch (Exception ignoreUserExceptions) { + } + } + }); + } + + if (expirationListeners != null) + for (final ExpirationListener listener : expirationListeners) { + try { + listener.expired(entry.key, entry.getValue()); + } catch (Exception ignoreUserExceptions) { + } + } + } + + /** + * Returns the internal ExpiringEntry for the {@code key}, obtaining a read lock. + */ + ExpiringEntry getEntry(Object key) { + readLock.lock(); + try { + return entries.get(key); + } finally { + readLock.unlock(); + } + } + + /** + * Puts the given key/value in storage, scheduling the new entry for expiration if needed. If a previous value existed + * for the given key, it is first cancelled and the entries reordered to reflect the new expiration. + */ + V putInternal(K key, V value, ExpirationPolicy expirationPolicy, long expirationNanos) { + writeLock.lock(); + try { + ExpiringEntry entry = entries.get(key); + V oldValue = null; + + if (entry == null) { + entry = new ExpiringEntry(key, value, + variableExpiration ? new AtomicReference(expirationPolicy) : this.expirationPolicy, + variableExpiration ? new AtomicLong(expirationNanos) : this.expirationNanos); + if (entries.size() >= maxSize) { + ExpiringEntry expiredEntry = entries.first(); + entries.remove(expiredEntry.key); + notifyListeners(expiredEntry); + } + entries.put(key, entry); + if (entries.size() == 1 || entries.first().equals(entry)) + scheduleEntry(entry); + } else { + oldValue = entry.getValue(); + if (!ExpirationPolicy.ACCESSED.equals(expirationPolicy) + && ((oldValue == null && value == null) || (oldValue != null && oldValue.equals(value)))) + return value; + + entry.setValue(value); + resetEntry(entry, false); + } + + return oldValue; + } finally { + writeLock.unlock(); + } + } + + /** + * Resets the given entry's schedule canceling any existing scheduled expiration and reordering the entry in the + * internal map. Schedules the next entry in the map if the given {@code entry} was scheduled or if + * {@code scheduleNext} is true. + * + * @param entry to reset + * @param scheduleFirstEntry whether the first entry should be automatically scheduled + */ + void resetEntry(ExpiringEntry entry, boolean scheduleFirstEntry) { + writeLock.lock(); + try { + boolean scheduled = entry.cancel(); + entries.reorder(entry); + + if (scheduled || scheduleFirstEntry) + scheduleEntry(entries.first()); + } finally { + writeLock.unlock(); + } + } + + /** + * Schedules an entry for expiration. Guards against concurrent schedule/schedule, cancel/schedule and schedule/cancel + * calls. + * + * @param entry Entry to schedule + */ + void scheduleEntry(ExpiringEntry entry) { + if (entry == null || entry.scheduled) + return; + + Runnable runnable = null; + synchronized (entry) { + if (entry.scheduled) + return; + + final WeakReference> entryReference = new WeakReference>(entry); + runnable = new Runnable() { + @Override + public void run() { + ExpiringEntry entry = entryReference.get(); + + writeLock.lock(); + try { + if (entry != null && entry.scheduled) { + entries.remove(entry.key); + notifyListeners(entry); + } + + try { + // Expires entries and schedules the next entry + Iterator> iterator = entries.valuesIterator(); + boolean schedulePending = true; + + while (iterator.hasNext() && schedulePending) { + ExpiringEntry nextEntry = iterator.next(); + if (nextEntry.expectedExpiration.get() <= System.nanoTime()) { + iterator.remove(); + notifyListeners(nextEntry); + } else { + scheduleEntry(nextEntry); + schedulePending = false; + } + } + } catch (NoSuchElementException ignored) { + } + } finally { + writeLock.unlock(); + } + } + }; + + Future entryFuture = EXPIRER.schedule(runnable, entry.expectedExpiration.get() - System.nanoTime(), + TimeUnit.NANOSECONDS); + entry.schedule(entryFuture); + } + } + + private static Map.Entry mapEntryFor(final ExpiringEntry entry) { + return new Map.Entry() { + @Override + public K getKey() { + return entry.key; + } + + @Override + public V getValue() { + return entry.value; + } + + @Override + public V setValue(V value) { + throw new UnsupportedOperationException(); + } + }; + } +} diff --git a/src/net/jodah/expiringmap/ExpiringValue.java b/src/net/jodah/expiringmap/ExpiringValue.java new file mode 100644 index 0000000..9b68fee --- /dev/null +++ b/src/net/jodah/expiringmap/ExpiringValue.java @@ -0,0 +1,122 @@ +package net.jodah.expiringmap; + +import java.util.concurrent.TimeUnit; + +/** + * A value which should be stored in an {@link ExpiringMap} with optional control over its expiration. + * + * @param the type of value being stored + */ +public final class ExpiringValue { + private static final long UNSET_DURATION = -1L; + private final V value; + private final ExpirationPolicy expirationPolicy; + private final long duration; + private final TimeUnit timeUnit; + + /** + * Creates an ExpiringValue to be stored in an {@link ExpiringMap}. The map's default values for + * {@link ExpirationPolicy expiration policy} and {@link ExpiringMap#getExpiration()} expiration} will be used. + * + * @param value the value to store + * @see ExpiringMap#put(Object, Object) + */ + public ExpiringValue(V value) { + this(value, UNSET_DURATION, null, null); + } + + /** + * Creates an ExpiringValue to be stored in an {@link ExpiringMap}. The map's default + * {@link ExpiringMap#getExpiration()} expiration} will be used. + * + * @param value the value to store + * @param expirationPolicy the expiration policy for the value + * @see ExpiringMap#put(Object, Object, ExpirationPolicy) + */ + public ExpiringValue(V value, ExpirationPolicy expirationPolicy) { + this(value, UNSET_DURATION, null, expirationPolicy); + } + + /** + * Creates an ExpiringValue to be stored in an {@link ExpiringMap}. The map's default {@link ExpirationPolicy + * expiration policy} will be used. + * + * @param value the value to store + * @param duration the length of time after an entry is created that it should be removed + * @param timeUnit the unit that {@code duration} is expressed in + * @see ExpiringMap#put(Object, Object, long, TimeUnit) + * @throws NullPointerException on null timeUnit + */ + public ExpiringValue(V value, long duration, TimeUnit timeUnit) { + this(value, duration, timeUnit, null); + if (timeUnit == null) { + throw new NullPointerException(); + } + } + + /** + * Creates an ExpiringValue to be stored in an {@link ExpiringMap}. + * + * @param value the value to store + * @param duration the length of time after an entry is created that it should be removed + * @param timeUnit the unit that {@code duration} is expressed in + * @param expirationPolicy the expiration policy for the value + * @see ExpiringMap#put(Object, Object, ExpirationPolicy, long, TimeUnit) + * @throws NullPointerException on null timeUnit + */ + public ExpiringValue(V value, ExpirationPolicy expirationPolicy, long duration, TimeUnit timeUnit) { + this(value, duration, timeUnit, expirationPolicy); + if (timeUnit == null) { + throw new NullPointerException(); + } + } + + private ExpiringValue(V value, long duration, TimeUnit timeUnit, ExpirationPolicy expirationPolicy) { + this.value = value; + this.expirationPolicy = expirationPolicy; + this.duration = duration; + this.timeUnit = timeUnit; + } + + public V getValue() { + return value; + } + + public ExpirationPolicy getExpirationPolicy() { + return expirationPolicy; + } + + public long getDuration() { + return duration; + } + + public TimeUnit getTimeUnit() { + return timeUnit; + } + + @Override + public int hashCode() { + return value != null ? value.hashCode() : 0; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + ExpiringValue that = (ExpiringValue) o; + return !(value != null ? !value.equals(that.value) : that.value != null) + && expirationPolicy == that.expirationPolicy && duration == that.duration && timeUnit == that.timeUnit; + + } + + @Override + public String toString() { + return "ExpiringValue{" + "value=" + value + ", expirationPolicy=" + expirationPolicy + ", duration=" + duration + + ", timeUnit=" + timeUnit + '}'; + } +} diff --git a/src/net/jodah/expiringmap/internal/Assert.java b/src/net/jodah/expiringmap/internal/Assert.java new file mode 100644 index 0000000..7c1b1fc --- /dev/null +++ b/src/net/jodah/expiringmap/internal/Assert.java @@ -0,0 +1,32 @@ +package net.jodah.expiringmap.internal; + +import java.util.NoSuchElementException; + +/** + * @author Jonathan Halterman + */ +public final class Assert { + private Assert() { + } + + public static T notNull(T reference, String parameterName) { + if (reference == null) + throw new NullPointerException(parameterName + " cannot be null"); + return reference; + } + + public static void operation(boolean condition, String message) { + if (!condition) + throw new UnsupportedOperationException(message); + } + + public static void state(boolean expression, String errorMessageFormat, Object... args) { + if (!expression) + throw new IllegalStateException(String.format(errorMessageFormat, args)); + } + + public static void element(Object element, Object key) { + if (element == null) + throw new NoSuchElementException(key.toString()); + } +} \ No newline at end of file diff --git a/src/net/jodah/expiringmap/internal/NamedThreadFactory.java b/src/net/jodah/expiringmap/internal/NamedThreadFactory.java new file mode 100644 index 0000000..d266ba7 --- /dev/null +++ b/src/net/jodah/expiringmap/internal/NamedThreadFactory.java @@ -0,0 +1,27 @@ +package net.jodah.expiringmap.internal; + +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * Named thread factory. + */ +public class NamedThreadFactory implements ThreadFactory { + private final AtomicInteger threadNumber = new AtomicInteger(1); + private final String nameFormat; + + /** + * Creates a thread factory that names threads according to the {@code nameFormat} by supplying a + * single argument to the format representing the thread number. + */ + public NamedThreadFactory(String nameFormat) { + this.nameFormat = nameFormat; + } + + @Override + public Thread newThread(Runnable r) { + Thread thread = new Thread(r, String.format(nameFormat, threadNumber.getAndIncrement())); + thread.setDaemon(true); + return thread; + } +} diff --git a/src/notifyz/hardcorefactions/HardcoreFactionsPlugin.java b/src/notifyz/hardcorefactions/HardcoreFactionsPlugin.java new file mode 100644 index 0000000..4b9e70b --- /dev/null +++ b/src/notifyz/hardcorefactions/HardcoreFactionsPlugin.java @@ -0,0 +1,1147 @@ +package notifyz.hardcorefactions; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.command.PluginCommand; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.configuration.serialization.ConfigurationSerialization; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ShapelessRecipe; +import org.bukkit.material.MaterialData; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.RegisteredServiceProvider; +import org.bukkit.plugin.java.JavaPlugin; + +import com.sk89q.worldedit.CuboidClipboard; +import com.sk89q.worldedit.EditSession; +import com.sk89q.worldedit.MaxChangedBlocksException; +import com.sk89q.worldedit.bukkit.BukkitUtil; +import com.sk89q.worldedit.bukkit.BukkitWorld; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldedit.world.DataException; + +import lombok.Getter; +import lombok.Setter; +import net.milkbowl.vault.chat.Chat; +import net.milkbowl.vault.permission.Permission; +import net.minecraft.util.com.google.common.base.Joiner; +import net.minecraft.util.org.apache.commons.lang3.time.DurationFormatUtils; +import notifyz.hardcorefactions.chests.Teller; +import notifyz.hardcorefactions.chests.VirtualChestManager; +import notifyz.hardcorefactions.chests.commands.ChestCommand; +import notifyz.hardcorefactions.chests.commands.ClearChestCommand; +import notifyz.hardcorefactions.chests.commands.DisposalCommand; +import notifyz.hardcorefactions.chests.commands.SaveChestsCommand; +import notifyz.hardcorefactions.chests.commands.WorkbenchCommand; +import notifyz.hardcorefactions.chests.listeners.PlayerListener; +import notifyz.hardcorefactions.classes.manager.PvPClassManager; +import notifyz.hardcorefactions.classes.type.bard.utilties.EffectRestorer; +import notifyz.hardcorefactions.combatloggers.CombatLogListener; +import notifyz.hardcorefactions.combatloggers.CustomEntityRegistration; +import notifyz.hardcorefactions.commands.essentials.BackCommand; +import notifyz.hardcorefactions.commands.essentials.BroadcastCommand; +import notifyz.hardcorefactions.commands.essentials.DisableChatCommand; +import notifyz.hardcorefactions.commands.essentials.EnchantCommand; +import notifyz.hardcorefactions.commands.essentials.FeedCommand; +import notifyz.hardcorefactions.commands.essentials.FlyCommand; +import notifyz.hardcorefactions.commands.essentials.FreezeAllCommand; +import notifyz.hardcorefactions.commands.essentials.FreezeCommand; +import notifyz.hardcorefactions.commands.essentials.GamemodeCommand; +import notifyz.hardcorefactions.commands.essentials.GiveCommand; +import notifyz.hardcorefactions.commands.essentials.GiveawayCommand; +import notifyz.hardcorefactions.commands.essentials.GodCommand; +import notifyz.hardcorefactions.commands.essentials.GuiFreezeCommand; +import notifyz.hardcorefactions.commands.essentials.HatCommand; +import notifyz.hardcorefactions.commands.essentials.HealCommand; +import notifyz.hardcorefactions.commands.essentials.HideStaffCommand; +import notifyz.hardcorefactions.commands.essentials.IgnoreCommand; +import notifyz.hardcorefactions.commands.essentials.InvseeCommand; +import notifyz.hardcorefactions.commands.essentials.InvseeOfflineCommand; +import notifyz.hardcorefactions.commands.essentials.KillCommand; +import notifyz.hardcorefactions.commands.essentials.LagCommand; +import notifyz.hardcorefactions.commands.essentials.ListCommand; +import notifyz.hardcorefactions.commands.essentials.MessageCommand; +import notifyz.hardcorefactions.commands.essentials.MessageSpyCommand; +import notifyz.hardcorefactions.commands.essentials.MoreItemsCommand; +import notifyz.hardcorefactions.commands.essentials.NewVideoCommand; +import notifyz.hardcorefactions.commands.essentials.RecCommand; +import notifyz.hardcorefactions.commands.essentials.RemovePermCommand; +import notifyz.hardcorefactions.commands.essentials.RenameCommand; +import notifyz.hardcorefactions.commands.essentials.ReplyCommand; +import notifyz.hardcorefactions.commands.essentials.ServerTimeCommand; +import notifyz.hardcorefactions.commands.essentials.SetBorderCommand; +import notifyz.hardcorefactions.commands.essentials.SettingsCommand; +import notifyz.hardcorefactions.commands.essentials.SlowchatCommand; +import notifyz.hardcorefactions.commands.essentials.SpawnCommand; +import notifyz.hardcorefactions.commands.essentials.SpawnerCommand; +import notifyz.hardcorefactions.commands.essentials.SpeedCommand; +import notifyz.hardcorefactions.commands.essentials.StaffChatCommand; +import notifyz.hardcorefactions.commands.essentials.StatsCommand; +import notifyz.hardcorefactions.commands.essentials.TeleportCommand; +import notifyz.hardcorefactions.commands.essentials.ToggleChatCommand; +import notifyz.hardcorefactions.commands.essentials.ToggleMessagesCommand; +import notifyz.hardcorefactions.commands.essentials.ToggleSoundsCommand; +import notifyz.hardcorefactions.commands.essentials.TopCommand; +import notifyz.hardcorefactions.commands.essentials.UptimeCommand; +import notifyz.hardcorefactions.commands.essentials.VanishCommand; +import notifyz.hardcorefactions.commands.essentials.WorldCommand; +import notifyz.hardcorefactions.commands.hcf.BardEnergyCommand; +import notifyz.hardcorefactions.commands.hcf.CobbleCommand; +import notifyz.hardcorefactions.commands.hcf.CrowbarCommand; +import notifyz.hardcorefactions.commands.hcf.EOTWCommand; +import notifyz.hardcorefactions.commands.hcf.EOTWReviveCommand; +import notifyz.hardcorefactions.commands.hcf.EconomyCommand; +import notifyz.hardcorefactions.commands.hcf.EndPortalCommand; +import notifyz.hardcorefactions.commands.hcf.FFACommand; +import notifyz.hardcorefactions.commands.hcf.FocusCommand; +import notifyz.hardcorefactions.commands.hcf.InfoCommand; +import notifyz.hardcorefactions.commands.hcf.KitMapGUICommand; +import notifyz.hardcorefactions.commands.hcf.LFFCommand; +import notifyz.hardcorefactions.commands.hcf.LocationCommand; +import notifyz.hardcorefactions.commands.hcf.LogoutCommand; +import notifyz.hardcorefactions.commands.hcf.MapKitCommand; +import notifyz.hardcorefactions.commands.hcf.MobDropsCommand; +import notifyz.hardcorefactions.commands.hcf.PanicCommand; +import notifyz.hardcorefactions.commands.hcf.PayCommand; +import notifyz.hardcorefactions.commands.hcf.PlayTimeCommand; +import notifyz.hardcorefactions.commands.hcf.PvPTimerCommand; +import notifyz.hardcorefactions.commands.hcf.RebootCommand; +import notifyz.hardcorefactions.commands.hcf.ReclaimCommand; +import notifyz.hardcorefactions.commands.hcf.ReclaimResetCommand; +import notifyz.hardcorefactions.commands.hcf.RegenCommand; +import notifyz.hardcorefactions.commands.hcf.RestoreInventoryCommand; +import notifyz.hardcorefactions.commands.hcf.SOTWCommand; +import notifyz.hardcorefactions.commands.hcf.SaleCommand; +import notifyz.hardcorefactions.commands.hcf.SetCommand; +import notifyz.hardcorefactions.commands.hcf.SpawnCannonCommand; +import notifyz.hardcorefactions.commands.hcf.StaffModeCommand; +import notifyz.hardcorefactions.commands.hcf.StaffReviveCommand; +import notifyz.hardcorefactions.commands.hcf.TeamCoordinatesCommand; +import notifyz.hardcorefactions.commands.hcf.ToggleCapzoneEntryCommand; +import notifyz.hardcorefactions.commands.hcf.ToggleDiamondAlertsCommand; +import notifyz.hardcorefactions.commands.hcf.ToggleLightningCommand; +import notifyz.hardcorefactions.commands.hcf.ToggleSidebarCommand; +import notifyz.hardcorefactions.commands.help.CoordinatesCommand; +import notifyz.hardcorefactions.commands.help.FamousCommand; +import notifyz.hardcorefactions.commands.help.HelpCommand; +import notifyz.hardcorefactions.commands.help.ReportCommand; +import notifyz.hardcorefactions.commands.help.RequestCommand; +import notifyz.hardcorefactions.commands.help.StoreCommand; +import notifyz.hardcorefactions.commands.help.TeamSpeakCommand; +import notifyz.hardcorefactions.commands.help.WebsiteCommand; +import notifyz.hardcorefactions.commands.help.YoutubeCommand; +import notifyz.hardcorefactions.commands.revive.Revive1; +import notifyz.hardcorefactions.commands.revive.Revive2; +import notifyz.hardcorefactions.commands.revive.ReviveHandler; +import notifyz.hardcorefactions.commands.warp.WarpExecutor; +import notifyz.hardcorefactions.commands.warp.utilities.FlatFileWarpManager; +import notifyz.hardcorefactions.commands.warp.utilities.Warp; +import notifyz.hardcorefactions.commands.warp.utilities.WarpManager; +import notifyz.hardcorefactions.deathban.Deathban; +import notifyz.hardcorefactions.deathban.lives.LivesExecutor; +import notifyz.hardcorefactions.deathban.managers.DeathbanFile; +import notifyz.hardcorefactions.deathban.managers.DeathbanManager; +import notifyz.hardcorefactions.economy.Economy; +import notifyz.hardcorefactions.economy.manager.EconomyFile; +import notifyz.hardcorefactions.games.EventExecutor; +import notifyz.hardcorefactions.games.conquest.ConquestExecutor; +import notifyz.hardcorefactions.games.endevent.EndEventCommand; +import notifyz.hardcorefactions.games.endevent.EndEventHandler; +import notifyz.hardcorefactions.games.eotw.EOTWHandler; +import notifyz.hardcorefactions.games.fury.FuryExecutor; +import notifyz.hardcorefactions.games.key.KeyListener; +import notifyz.hardcorefactions.games.key.KeyManager; +import notifyz.hardcorefactions.games.key.LootExecutor; +import notifyz.hardcorefactions.games.key.RewardableItemStack; +import notifyz.hardcorefactions.games.koth.KothExecutor; +import notifyz.hardcorefactions.games.mountain.GlowstoneMountainCommand; +import notifyz.hardcorefactions.games.skygear.SkyGearCommand; +import notifyz.hardcorefactions.games.skygear.listeners.SkyGearListener; +import notifyz.hardcorefactions.games.sotw.SOTWHandler; +import notifyz.hardcorefactions.games.utilities.capturezone.CaptureZone; +import notifyz.hardcorefactions.games.utilities.scheduler.EventScheduler2; +import notifyz.hardcorefactions.games.utilities.scheduler.IEventScheduler; +import notifyz.hardcorefactions.kit.FlatFileKitManager; +import notifyz.hardcorefactions.kit.Kit; +import notifyz.hardcorefactions.kit.KitExecutor; +import notifyz.hardcorefactions.kit.KitListener; +import notifyz.hardcorefactions.kit.KitManager; +import notifyz.hardcorefactions.listeners.CoreListener; +import notifyz.hardcorefactions.listeners.claim.ClaimWandListener; +import notifyz.hardcorefactions.listeners.claim.SubclaimWandListener; +import notifyz.hardcorefactions.listeners.essentials.AutoMuteListener; +import notifyz.hardcorefactions.listeners.essentials.BreedListener; +import notifyz.hardcorefactions.listeners.essentials.ChatListener; +import notifyz.hardcorefactions.listeners.essentials.FreezeAllListener; +import notifyz.hardcorefactions.listeners.essentials.FreezeListener; +import notifyz.hardcorefactions.listeners.essentials.FurnaceSmeltSpeederListener; +import notifyz.hardcorefactions.listeners.essentials.PlayTimeListener; +import notifyz.hardcorefactions.listeners.essentials.RestoreInventoryListener; +import notifyz.hardcorefactions.listeners.essentials.SkullListener; +import notifyz.hardcorefactions.listeners.essentials.StaffChatListener; +import notifyz.hardcorefactions.listeners.essentials.WhitelistMessageListener; +import notifyz.hardcorefactions.listeners.hcf.AnvilSpamListener; +import notifyz.hardcorefactions.listeners.hcf.BedBombingListener; +import notifyz.hardcorefactions.listeners.hcf.BookDeenchantListener; +import notifyz.hardcorefactions.listeners.hcf.BorderListener; +import notifyz.hardcorefactions.listeners.hcf.BottledExpListener; +import notifyz.hardcorefactions.listeners.hcf.CobwebListener; +import notifyz.hardcorefactions.listeners.hcf.ColorSignListener; +import notifyz.hardcorefactions.listeners.hcf.CrowbarListener; +import notifyz.hardcorefactions.listeners.hcf.DeathListener; +import notifyz.hardcorefactions.listeners.hcf.DeathMessageListener; +import notifyz.hardcorefactions.listeners.hcf.DeathSignListener; +import notifyz.hardcorefactions.listeners.hcf.DeathbanListener; +import notifyz.hardcorefactions.listeners.hcf.EOTWListener; +import notifyz.hardcorefactions.listeners.hcf.ElevatorListener; +import notifyz.hardcorefactions.listeners.hcf.EnchantLimitListener; +import notifyz.hardcorefactions.listeners.hcf.EntityLimitListener; +import notifyz.hardcorefactions.listeners.hcf.EventSignListener; +import notifyz.hardcorefactions.listeners.hcf.ExpMultiplierListener; +import notifyz.hardcorefactions.listeners.hcf.FoundDiamondListener; +import notifyz.hardcorefactions.listeners.hcf.ItemStatTrackingListener; +import notifyz.hardcorefactions.listeners.hcf.KillStreaks; +import notifyz.hardcorefactions.listeners.hcf.KillstreakListener; +import notifyz.hardcorefactions.listeners.hcf.KitMapKitsListener; +import notifyz.hardcorefactions.listeners.hcf.KitMapListener; +import notifyz.hardcorefactions.listeners.hcf.MinecartElevatorListener; +import notifyz.hardcorefactions.listeners.hcf.PickaxeStatsListener; +import notifyz.hardcorefactions.listeners.hcf.PortalListener; +import notifyz.hardcorefactions.listeners.hcf.PotionLimitListener; +import notifyz.hardcorefactions.listeners.hcf.ProtectionListener; +import notifyz.hardcorefactions.listeners.hcf.SOTWListener; +import notifyz.hardcorefactions.listeners.hcf.ShopListener; +import notifyz.hardcorefactions.listeners.hcf.StaffModeListener; +import notifyz.hardcorefactions.listeners.hcf.Strength2Listener; +import notifyz.hardcorefactions.listeners.hcf.StrengthListener; +import notifyz.hardcorefactions.listeners.hcf.SubclaimListener; +import notifyz.hardcorefactions.listeners.hcf.TeamListener; +import notifyz.hardcorefactions.listeners.hcf.ThrowableCobwebsListener; +import notifyz.hardcorefactions.listeners.hcf.WorldListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.ArmorFixListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.BeaconStrengthFixListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.BlockHitFixListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.BoatGlitchFixListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.CrashFixListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.DuplicationGlitchListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.EnderChestRemovalListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.HungerFixListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.InfinityArrowFixListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.MobFixListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.PearlGlitchListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.SplashPotionListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.SugarCaneFixListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.VoidGlitchFixListener; +import notifyz.hardcorefactions.listeners.hcf.fixes.WeatherFixListener; +import notifyz.hardcorefactions.scoreboard.provider.PvPClassHolder; +import notifyz.hardcorefactions.scoreboard.timer.TimerExecutor; +import notifyz.hardcorefactions.scoreboard.timer.TimerManager; +import notifyz.hardcorefactions.scoreboard.timer.utilities.type.ClassWarmupTimer; +import notifyz.hardcorefactions.scoreboard.utilities.ScoreboardHandler; +import notifyz.hardcorefactions.scoreboard.utilities.SidebarFiller; +import notifyz.hardcorefactions.team.TeamManager; +import notifyz.hardcorefactions.team.claim.Claim; +import notifyz.hardcorefactions.team.claim.subclaim.Subclaim; +import notifyz.hardcorefactions.team.claim.team.ClaimManager; +import notifyz.hardcorefactions.team.commands.TeamExecutor; +import notifyz.hardcorefactions.team.type.ClaimableTeam; +import notifyz.hardcorefactions.team.type.PlayerTeam; +import notifyz.hardcorefactions.team.type.system.CapturableFaction; +import notifyz.hardcorefactions.team.type.system.ConquestFaction; +import notifyz.hardcorefactions.team.type.system.EndPortalFaction; +import notifyz.hardcorefactions.team.type.system.FuryFaction; +import notifyz.hardcorefactions.team.type.system.GlowstoneMountainFaction; +import notifyz.hardcorefactions.team.type.system.KothFaction; +import notifyz.hardcorefactions.team.type.system.RoadFaction; +import notifyz.hardcorefactions.team.type.system.SpawnFaction; +import notifyz.hardcorefactions.team.utilities.ITeam; +import notifyz.hardcorefactions.team.utilities.TeamFile; +import notifyz.hardcorefactions.team.utilities.TeamMember; +import notifyz.hardcorefactions.team.utilities.TeamUser; +import notifyz.hardcorefactions.utilities.Configuration; +import notifyz.hardcorefactions.utilities.api.IPluginAPI; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; +import notifyz.hardcorefactions.utilities.chat.Color; +import notifyz.hardcorefactions.utilities.chat.Cooldowns; +import notifyz.hardcorefactions.utilities.freeze.FrozenInventory; +import notifyz.hardcorefactions.utilities.freeze.FrozenManager; +import notifyz.hardcorefactions.utilities.inventory.item.ItemDB; +import notifyz.hardcorefactions.utilities.inventory.restoration.InventoryManager; +import notifyz.hardcorefactions.utilities.inventory.restoration.RestoreManager; +import notifyz.hardcorefactions.utilities.user.IUser; +import notifyz.hardcorefactions.utilities.user.IUserManager; +import notifyz.hardcorefactions.utilities.user.UserManager; +import notifyz.hardcorefactions.utilities.utils.DataHandler; +import notifyz.hardcorefactions.utilities.utils.DateTimeFormats; +import notifyz.hardcorefactions.utilities.utils.ServerHandler; +import notifyz.hardcorefactions.utilities.utils.SignHandler; +import notifyz.hardcorefactions.utilities.visualise.ProtocolLibHook; +import notifyz.hardcorefactions.utilities.visualise.VisualiseHandler; +import notifyz.hardcorefactions.utilities.visualise.WallBorderListener; + +public class HardcoreFactionsPlugin extends JavaPlugin { + + @Getter public static HardcoreFactionsPlugin instance; + + @Getter + @Setter + private PvPClassHolder pvpClassHolder = uuid -> null; + + @Getter + private List postFillers = new ArrayList<>(); + + @Getter + private static HardcoreFactionsPlugin plugin; + + @Getter + private Random random = new Random(); + + @Getter + private EffectRestorer effectRestorer; + + @Getter + private PvPClassManager PvPClassManager; + + @Getter + private ClassWarmupTimer pvpClassWarmupTimer; + + @Getter + private Configuration configuration; + + @Getter + private ClaimManager claimHandler; + + @Getter + private CombatLogListener combatLogListener; + + @Getter + private DeathbanManager deathbanManager; + + @Getter + private Economy economyManager; + + @Getter + public PlayTimeListener playTimeManager; + + @Getter + private EOTWHandler eotwHandler; + + @Getter + private FreezeListener freezeListener; + + @Getter + private TeamManager factionManager; + + + @Getter + private IEventScheduler eventScheduler; + + @Getter + private ScoreboardHandler scoreboardHandler; + + @Getter + private SOTWHandler sotwTimer; + + @Getter + private TimerManager timerManager; + + @Getter + private UserManager userManager; + + @Getter + private VisualiseHandler visualiseHandler; + + @Getter + private StaffModeListener staffModeListener; + + @Getter + private WorldEditPlugin worldEdit; + + @Getter + private boolean paperPatch; + + private boolean configurationLoaded = true; + + @Getter + private ItemDB itemDb; + + @Getter + private IPluginAPI basePlugin; + + @Getter + private SignHandler signHandler; + + @Getter + private KitManager kitManager; + + @Getter + private KitExecutor kitExecutor; + + @Getter + private VirtualChestManager chestManager; + + @Getter + private EndEventHandler endEventHandler; + + @Getter + private FreezeAllListener freezeAllListener; + + @Getter + private InventoryManager restoreInventoryManager; + + @Getter + private RestoreManager restoreManager; + + @Getter + private ReviveHandler reviveHandler; + + public static Joiner SPACE_JOINER = Joiner.on(' '); + public static Joiner COMMA_JOINER = Joiner.on(", "); + private static long MINUTE = TimeUnit.MINUTES.toMillis(1); + private static long HOUR = TimeUnit.HOURS.toMillis(1); + private static int spamCooldown; + private static HashMap database; + public List donators = new ArrayList<>(); + public static List killStreaks = new ArrayList<>(); + private FrozenInventory inventoryManager; + private FrozenManager frozenManager; + private DataHandler dataHandler; + private WarpManager warpManager; + private ServerHandler serverHandler; + public IUserManager userManagerr; + private YamlConfiguration reclaimConfig; + private YamlConfiguration reclaimSettingsConfig; + private KeyManager keyManager; + public Chat chat = null; + public Permission permission = null; + + public File reclaimFile = new File(this.getDataFolder(), "reclaims.yml"); + public File reclaimSettingsFile = new File(this.getDataFolder(), "reclaimsettings.yml"); + + public static String getRemaining(long millis, boolean milliseconds) { + return HardcoreFactionsPlugin.getRemaining(millis, milliseconds, true); + } + + public static String getRemaining(long duration, boolean milliseconds, boolean trail) { + if (milliseconds && duration < MINUTE) { + return (trail ? DateTimeFormats.REMAINING_SECONDS_TRAILING : DateTimeFormats.REMAINING_SECONDS).get().format(duration * 0.001) + 's'; + } + return DurationFormatUtils.formatDuration(duration, (duration >= HOUR ? "HH:" : "") + "mm:ss"); + } + + private void registerManagersBase() { + this.basePlugin = IPluginAPI.getPlugin(); + this.basePlugin.init(this); + this.signHandler = this.basePlugin.getSignHandler(); + this.itemDb = IPluginAPI.getPlugin().getItemDb(); + } + + private boolean setupChat() { + RegisteredServiceProvider chatProvider = Bukkit.getServicesManager().getRegistration(Chat.class); + if (chatProvider != null) { + chat = chatProvider.getProvider(); + } + + return (chat != null); + } + + private boolean setupPermission() { + RegisteredServiceProvider permissionProvider = Bukkit.getServicesManager().getRegistration(Permission.class); + if (permissionProvider != null) { + permission = permissionProvider.getProvider(); + } + + return (permission != null); + } + + @Override + public void onEnable() { + instance = this; + + setupChat(); + setupPermission(); + + File chestFolder = new File(getDataFolder(), "chests"); + chestManager = new VirtualChestManager(chestFolder, getLogger()); + new Teller(this); + int autosaveInterval = getConfig().getInt("chest-configuration.autosave") * 1200; + + if (autosaveInterval > 0) { + getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() { + @Override + public void run() { + int savedChests = chestManager.save(); + + if (savedChests > 0 && !getConfig().getBoolean("chest-configuration.silentAutosave")) { + } + } + }, autosaveInterval, autosaveInterval); + } + + registerSerialization(); + registerConfiguration(); + registerManagersBase(); + getConfig().options().copyDefaults(true); + saveConfig(); + if (!configurationLoaded) { + getLogger().severe("Disabling plugin.."); + setEnabled(false); + return; + } + + this.getConfig().set("chat.spam-cooldown", 5); + this.saveConfig(); + HardcoreFactionsPlugin.spamCooldown = this.getConfig().getInt("chat.spam-cooldown"); + HardcoreFactionsPlugin.spamCooldown = ((HardcoreFactionsPlugin.spamCooldown <= 0) ? 5 : HardcoreFactionsPlugin.spamCooldown); + + this.dataHandler = new DataHandler(this); + this.inventoryManager = new FrozenInventory(this); + this.frozenManager = new FrozenManager(); + + CustomEntityRegistration.registerCustomEntities(); + + HardcoreFactionsPlugin.plugin = this; + DateTimeFormats.reload(configuration.getServerTimeZone()); // Initialise the static fields. + /////////////////////////// + Plugin wep = getServer().getPluginManager().getPlugin("WorldEdit"); // Initialise WorldEdit hook. + worldEdit = wep instanceof WorldEditPlugin && wep.isEnabled() ? (WorldEditPlugin) wep : null; + try { + if(!reclaimFile.exists()) + reclaimFile.createNewFile(); + if(!reclaimSettingsFile.exists()) { + saveResource("reclaimsettings.yml", false); + } + } catch (Exception e) { + e.printStackTrace(); + } + reclaimConfig = YamlConfiguration.loadConfiguration(reclaimFile); + reclaimSettingsConfig = YamlConfiguration.loadConfiguration(reclaimSettingsFile); + ShapelessRecipe recipe = new ShapelessRecipe(new ItemStack(Material.SPECKLED_MELON, 1)); + recipe.addIngredient(1, new MaterialData(Material.GOLD_NUGGET)); + recipe.addIngredient(1, new MaterialData(Material.MELON)); + getServer().addRecipe(recipe); + registerEnableMessage(); + registerCommands(); + registerManagers(); + registerListeners(); + registerCooldowns(); + setLocation(); + saveAll(); + + for (String item : plugin.getConfig().getConfigurationSection("killstreaks.items").getKeys(false)) { + String name = plugin.getConfig().getString("killstreaks.items." + item + ".name"); + int kills = plugin.getConfig().getInt("killstreaks.items." + item + ".kills"); + String command = plugin.getConfig().getString("killstreaks.items." + item + ".command"); + KillStreaks killsAdd = new KillStreaks(name, kills, command); + killStreaks.add(killsAdd); + } + paperPatch = true; + + //TODO: More reliable, SQL based. + long dataSaveInterval = TimeUnit.MINUTES.toMillis(10L); + getServer().getScheduler().scheduleSyncRepeatingTask(this, this::saveData, dataSaveInterval, dataSaveInterval); + Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "save-all"); + getServer().broadcast(ChatColor.RED.toString() + ChatColor.BOLD + "Saving!" + "\n" + ChatColor.RED + "Saved all teams and player data to the database.", "hcf.seesaves"); + + ProtocolLibHook.hook(this); // Initialise ProtocolLib hook. + +// new BukkitRunnable() { +// @Override +// public void run() { +// Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "save-all"); +// getServer().broadcast(ChatColor.RED.toString() + ChatColor.BOLD + "Saving!" + "\n" + ChatColor.RED + "Saved all teams and player data to the database.", "hcf.seesaves"); +// saveData(); +// } +// }.runTaskTimerAsynchronously(this, TimeUnit.MINUTES.toMillis(3L), TimeUnit.MINUTES.toMillis(3L)); + } + + + + +private void registerEnableMessage() { + long timeMillis = System.currentTimeMillis(); + Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + BukkitUtils.STRAIGHT_LINE_DEFAULT); + Bukkit.getConsoleSender().sendMessage(""); + Bukkit.getConsoleSender().sendMessage(Color.translate("&a[HardcoreFactions] Plugin loaded in &f" + (System.currentTimeMillis() - timeMillis) + "ms.")); + Bukkit.getConsoleSender().sendMessage(Color.translate("&aVersion: &fv" + HardcoreFactionsPlugin.getPlugin().getDescription().getVersion())); + Bukkit.getConsoleSender().sendMessage(""); + Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + BukkitUtils.STRAIGHT_LINE_DEFAULT); +} + + + + + +private void saveAll() { + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("auto-save.enabled")) { + Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() { + @Override + public void run() { + saveData(); + Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), HardcoreFactionsPlugin.getInstance().getConfig().getString("auto-save.command")); + getServer().broadcastMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("auto-save.message"))); + } + }, 0L, 18000L); + } +} + + + + + +private void registerCooldowns() { + Cooldowns.createCooldown("Revive1"); + Cooldowns.createCooldown("Revive2"); + Cooldowns.createCooldown("report_cooldown"); + Cooldowns.createCooldown("request_cooldown"); + Cooldowns.createCooldown("rename_cooldown"); + Cooldowns.createCooldown("spawntoken"); + Cooldowns.createCooldown("endportaltoken"); + Cooldowns.createCooldown("Assassin_item_cooldown"); + Cooldowns.createCooldown("Cobwebs"); +} + + + + + +private void saveData() { + keyManager.saveKeyData(); + deathbanManager.saveDeathbanData(); + economyManager.saveEconomyData(); + factionManager.saveFactionData(); + timerManager.saveTimerData(); + userManager.saveUserData(); + warpManager.saveWarpData(); + playTimeManager.savePlaytimeData(); + serverHandler.saveServerData(); + userManagerr.saveParticipatorData(); + chestManager.save(); + kitManager.saveKitData(); +} + + + + + +@Override +public void onDisable() { + //kitManager.saveKitData(); + //chestManager.save(); + HardcoreFactionsPlugin.plugin = this; + if (!configurationLoaded) { + // Ignore everything. + return; + } + + try { + String configFileName = "config.cdl"; + configuration.save(new File(getDataFolder(), configFileName), + HardcoreFactionsPlugin.class.getResource("/" + configFileName)); + } catch (IOException | InvalidConfigurationException ex) { + getLogger().warning("Unable to save config."); + ex.printStackTrace(); + } + scoreboardHandler.clearBoards(); + PvPClassManager.onDisable(); + + CustomEntityRegistration.unregisterCustomEntities(); + + saveData(); + basePlugin.disable(); + basePlugin = null; + HardcoreFactionsPlugin.plugin = null; // Always uninitialise last. + instance = null; +} + + + + + +private void registerConfiguration() { + configuration = new Configuration(); + try { + String configFileName = "config.cdl"; + File file = new File(getDataFolder(), configFileName); + if (!file.exists()) { + saveResource(configFileName, false); + } + + configuration.load(file, HardcoreFactionsPlugin.class.getResource("/" + configFileName)); + configuration.updateFields(this); + } catch (IOException | InvalidConfigurationException ex) { + getLogger().log(Level.SEVERE, "Failed to load configuration", ex); + configurationLoaded = false; + } +} + + + + + +//TODO: More reliable, SQL based. +private void registerSerialization() { + ConfigurationSerialization.registerClass(Kit.class); + ConfigurationSerialization.registerClass(Warp.class); + ConfigurationSerialization.registerClass(CaptureZone.class); + ConfigurationSerialization.registerClass(Deathban.class); + ConfigurationSerialization.registerClass(Claim.class); + ConfigurationSerialization.registerClass(Subclaim.class); + ConfigurationSerialization.registerClass(Deathban.class); + ConfigurationSerialization.registerClass(TeamUser.class); + ConfigurationSerialization.registerClass(ClaimableTeam.class); + ConfigurationSerialization.registerClass(ConquestFaction.class); + ConfigurationSerialization.registerClass(FuryFaction.class); + ConfigurationSerialization.registerClass(CapturableFaction.class); + ConfigurationSerialization.registerClass(KothFaction.class); + ConfigurationSerialization.registerClass(EndPortalFaction.class); + ConfigurationSerialization.registerClass(ITeam.class); + ConfigurationSerialization.registerClass(TeamMember.class); + ConfigurationSerialization.registerClass(PlayerTeam.class); + ConfigurationSerialization.registerClass(RoadFaction.class); + ConfigurationSerialization.registerClass(SpawnFaction.class); + ConfigurationSerialization.registerClass(GlowstoneMountainFaction.class); + ConfigurationSerialization.registerClass(RoadFaction.NorthRoadFaction.class); + ConfigurationSerialization.registerClass(RoadFaction.EastRoadFaction.class); + ConfigurationSerialization.registerClass(RoadFaction.SouthRoadFaction.class); + ConfigurationSerialization.registerClass(RoadFaction.WestRoadFaction.class); + ConfigurationSerialization.registerClass(RewardableItemStack.class); + ConfigurationSerialization.registerClass(IUser.class); +} + + + + + +private void registerListeners() { + PluginManager manager = getServer().getPluginManager(); + + freezeListener = new FreezeListener(); + Bukkit.getServer().getPluginManager().registerEvents(freezeListener, this); + if (plugin.getConfig().getBoolean("staffmode.enabled")) { + staffModeListener = new StaffModeListener(); + freezeAllListener = new FreezeAllListener(this); + Bukkit.getServer().getPluginManager().registerEvents(staffModeListener, this); + } + manager.registerEvents(this.playTimeManager = new PlayTimeListener(this), this); + manager.registerEvents(new WhitelistMessageListener(), this); + manager.registerEvents(new BottledExpListener(this), this); + manager.registerEvents(new FoundDiamondListener(), this); + manager.registerEvents(new BlockHitFixListener(), this); +if (plugin.getConfig().getBoolean("staffmode.enabled")) { + manager.registerEvents(new StaffChatListener(), this); +} + manager.registerEvents(new WeatherFixListener(), this); + manager.registerEvents(new DuplicationGlitchListener(), this); + manager.registerEvents(new BoatGlitchFixListener(this), this); + manager.registerEvents(new ColorSignListener(), this); + manager.registerEvents(new BookDeenchantListener(this), this); + manager.registerEvents(new ChatListener(this), this); + manager.registerEvents(new ClaimWandListener(this), this); + manager.registerEvents(new CombatLogListener(this), this); + manager.registerEvents(new CoreListener(this), this); + manager.registerEvents(new CrowbarListener(this), this); + manager.registerEvents(new DeathListener(this), this); + manager.registerEvents(new BreedListener(), this); + manager.registerEvents(new CrashFixListener(), this); + manager.registerEvents(new SugarCaneFixListener(), this); + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("deathmessages.enabled")) { + manager.registerEvents(new DeathMessageListener(this), this); + } + new DeathSignListener(this); + manager.registerEvents(new DeathbanListener(this), this); + manager.registerEvents(new EnchantLimitListener(this), this); + manager.registerEvents(new BedBombingListener(), this); + manager.registerEvents(new ArmorFixListener(), this); + manager.registerEvents(new EnderChestRemovalListener(this), this); + manager.registerEvents(new EntityLimitListener(this), this); + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("faction-utilities.elevators.sign.enabled")) { + manager.registerEvents(new ElevatorListener(), this); + } + manager.registerEvents(new EOTWListener(this), this); + manager.registerEvents(new EventSignListener(), this); + manager.registerEvents(new ExpMultiplierListener(this), this); + manager.registerEvents(new TeamListener(this), this); + manager.registerEvents(new FurnaceSmeltSpeederListener(this), this); + manager.registerEvents(new InfinityArrowFixListener(this), this); + manager.registerEvents(new KitMapListener(this), this); + manager.registerEvents(new PearlGlitchListener(this), this); + manager.registerEvents(new PortalListener(this), this); + manager.registerEvents(new PotionLimitListener(this), this); + manager.registerEvents(new ProtectionListener(this), this); + manager.registerEvents(new SubclaimWandListener(this), this); + manager.registerEvents(new SubclaimListener(this), this); + manager.registerEvents(new ShopListener(this), this); + manager.registerEvents(new SkullListener(this), this); + manager.registerEvents(new SOTWListener(this), this); + manager.registerEvents(new BeaconStrengthFixListener(this), this); + //manager.registerEvents(new ArcherBeaconSpeedFixListener(this), this); + manager.registerEvents(new VoidGlitchFixListener(), this); + manager.registerEvents(new WallBorderListener(this), this); + manager.registerEvents(new WorldListener(), this); + manager.registerEvents(new MobFixListener(), this); + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("faction-utilities.elevators.minecart.enabled")) { + manager.registerEvents(new MinecartElevatorListener(), this); + } + manager.registerEvents(new AutoMuteListener(), this); + manager.registerEvents(new CobwebListener(this), this); + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("anvil-spam-fixer.enabled")) { + manager.registerEvents(new AnvilSpamListener(this), this); + } + manager.registerEvents(new HungerFixListener(this), this); + manager.registerEvents(new StrengthListener(), this); + manager.registerEvents(new Strength2Listener(this), this); + manager.registerEvents(new PickaxeStatsListener(), this); + //manager.registerEvents(new EventListener(this), this); + //manager.registerEvents(new AnvilDupeFixListener(this), this); + manager.registerEvents(new CobbleCommand(), this); + manager.registerEvents(new MobDropsCommand(), this); + manager.registerEvents(new SettingsCommand(this), this); + manager.registerEvents(new EndPortalCommand(this), this); + manager.registerEvents(new StatsCommand(), this); + manager.registerEvents(new GiveawayCommand(), this); + manager.registerEvents(new GuiFreezeCommand(this), this); + manager.registerEvents(new ItemStatTrackingListener(), this); + manager.registerEvents(new KitListener(this), this); + manager.registerEvents(new PlayerListener(this, chestManager), this); + manager.registerEvents(new SplashPotionListener(this), this); + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("killstreaks.enabled")) { + manager.registerEvents(new KillstreakListener(this), this); + } + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("skygear.enabled")) { + manager.registerEvents(new SkyGearListener(), this); + } + manager.registerEvents(new BorderListener(), this); + manager.registerEvents(new ThrowableCobwebsListener(), this); + if (plugin.getConfig().getBoolean("kitmap-selector.enabled")) { + manager.registerEvents(new KitMapKitsListener(this), this); + } + manager.registerEvents(this.endEventHandler, this); + manager.registerEvents(new RestoreInventoryListener(this), this); + //manager.registerEvents(new PearlThroughListener(), this); + //manager.registerEvents(new PickaxeStatisticsListener(), this); + //manager.registerEvents(new MobstackListener(this), this); +} + + + + +private void registerCommands() { + getCommand("kit").setExecutor(new KitExecutor(this)); + getCommand("restoreinventory").setExecutor(new RestoreInventoryCommand(this)); + getCommand("sale").setExecutor(new SaleCommand(this)); + getCommand("reboot").setExecutor(new RebootCommand(this)); + getCommand("oinvsee").setExecutor(new InvseeOfflineCommand()); + getCommand("ffa").setExecutor(new FFACommand()); + getCommand("freezeall").setExecutor(new FreezeAllCommand(this)); + getCommand("famous").setExecutor(new FamousCommand()); + getCommand("youtube").setExecutor(new YoutubeCommand()); + getCommand("store").setExecutor(new StoreCommand(this)); + getCommand("website").setExecutor(new WebsiteCommand(this)); + getCommand("teamspeak").setExecutor(new TeamSpeakCommand()); + getCommand("removeperm").setExecutor(new RemovePermCommand()); +if (plugin.getConfig().getBoolean("staffmode.enabled")) { + getCommand("staffmode").setExecutor(new StaffModeCommand()); +} + getCommand("info").setExecutor(new InfoCommand()); + getCommand("focus").setExecutor(new FocusCommand()); +if (plugin.getConfig().getBoolean("staffmode.enabled")) { + getCommand("staffchat").setExecutor(new StaffChatCommand()); +} + getCommand("conquest").setExecutor(new ConquestExecutor(this)); + getCommand("fury").setExecutor(new FuryExecutor(this)); + getCommand("economy").setExecutor(new EconomyCommand(this)); + getCommand("rec").setExecutor(new RecCommand()); + getCommand("coords").setExecutor(new CoordinatesCommand()); + getCommand("freeze").setExecutor(new FreezeCommand()); + getCommand("playtime").setExecutor(new PlayTimeCommand()); + getCommand("endportal").setExecutor(new EndPortalCommand(this)); + getCommand("settings").setExecutor(new SettingsCommand(this)); + getCommand("spawn").setExecutor(new SpawnCommand()); + getCommand("eotw").setExecutor(new EOTWCommand(this)); + getCommand("help").setExecutor(new HelpCommand()); + getCommand("event").setExecutor(new EventExecutor(this)); + if (plugin.getConfig().getBoolean("kitmap-gui.enabled")) { + getCommand("mapkit").setExecutor(new KitMapGUICommand()); + } else { + getCommand("mapkit").setExecutor(new MapKitCommand()); + } + getCommand("newvideo").setExecutor(new NewVideoCommand()); + getCommand("cobble").setExecutor(new CobbleCommand()); + getCommand("platinum").setExecutor(new Revive1(this)); + getCommand("spawner").setExecutor(new SpawnerCommand()); + getCommand("gold").setExecutor(new Revive2(this)); + getCommand("team").setExecutor(new TeamExecutor(this)); + getCommand("vanish").setExecutor(new VanishCommand()); + getCommand("koth").setExecutor(new KothExecutor(this)); + getCommand("lives").setExecutor(new LivesExecutor(this)); + getCommand("location").setExecutor(new LocationCommand(this)); + getCommand("set").setExecutor(new SetCommand()); + getCommand("logout").setExecutor(new LogoutCommand(this)); + getCommand("lff").setExecutor(new LFFCommand()); + getCommand("giveaway").setExecutor(new GiveawayCommand()); + getCommand("pay").setExecutor(new PayCommand(this)); + getCommand("pvptimer").setExecutor(new PvPTimerCommand(this)); + getCommand("regen").setExecutor(new RegenCommand(this)); + getCommand("servertime").setExecutor(new ServerTimeCommand(this)); + getCommand("sotw").setExecutor(new SOTWCommand(this)); + getCommand("spawncannon").setExecutor(new SpawnCannonCommand(this)); + getCommand("stats").setExecutor(new StatsCommand()); + getCommand("staffrevive").setExecutor(new StaffReviveCommand(this)); + getCommand("glow").setExecutor(new GlowstoneMountainCommand(this)); + getCommand("timer").setExecutor(new TimerExecutor(this)); + getCommand("togglecapzoneentry").setExecutor(new ToggleCapzoneEntryCommand(this)); + getCommand("togglelightning").setExecutor(new ToggleLightningCommand(this)); + getCommand("mobdrops").setExecutor(new MobDropsCommand()); + getCommand("togglesidebar").setExecutor(new ToggleSidebarCommand(this)); + getCommand("togglefd").setExecutor(new ToggleDiamondAlertsCommand(this)); + getCommand("guifreeze").setExecutor(new GuiFreezeCommand(this)); + getCommand("request").setExecutor(new RequestCommand()); + getCommand("report").setExecutor(new ReportCommand()); + getCommand("warp").setExecutor(new WarpExecutor(this)); + getCommand("teleport").setExecutor(new TeleportCommand()); + getCommand("tphere").setExecutor(new TeleportCommand()); + getCommand("fly").setExecutor(new FlyCommand()); + getCommand("list").setExecutor(new ListCommand()); + getCommand("world").setExecutor(new WorldCommand()); + getCommand("gamemode").setExecutor(new GamemodeCommand()); + getCommand("gamemodes").setExecutor(new GamemodeCommand()); + getCommand("gamemodec").setExecutor(new GamemodeCommand()); + getCommand("gamemodea").setExecutor(new GamemodeCommand()); + getCommand("disablechat").setExecutor(new DisableChatCommand(this)); + getCommand("feed").setExecutor(new FeedCommand()); + getCommand("lag").setExecutor(new LagCommand()); + getCommand("slowchat").setExecutor(new SlowchatCommand(this)); + getCommand("give").setExecutor(new GiveCommand()); + getCommand("heal").setExecutor(new HealCommand()); + getCommand("uptime").setExecutor(new UptimeCommand()); + getCommand("top").setExecutor(new TopCommand()); + getCommand("hat").setExecutor(new HatCommand()); + getCommand("invsee").setExecutor(new InvseeCommand()); + getCommand("god").setExecutor(new GodCommand()); + getCommand("tppos").setExecutor(new TeleportCommand()); + getCommand("tpall").setExecutor(new TeleportCommand()); + getCommand("broadcast").setExecutor(new BroadcastCommand()); + getCommand("rename").setExecutor(new RenameCommand()); + getCommand("enchant").setExecutor(new EnchantCommand()); + getCommand("kill").setExecutor(new KillCommand()); + getCommand("message").setExecutor(new MessageCommand(this)); + getCommand("ignore").setExecutor(new IgnoreCommand(this)); + getCommand("reply").setExecutor(new ReplyCommand(this)); + getCommand("messagespy").setExecutor(new MessageSpyCommand(this)); + getCommand("togglemessages").setExecutor(new ToggleMessagesCommand(this)); + getCommand("sounds").setExecutor(new ToggleSoundsCommand(this)); + getCommand("togglechat").setExecutor(new ToggleChatCommand(this)); + getCommand("reclaim").setExecutor(new ReclaimCommand(this)); + getCommand("chest").setExecutor(new ChestCommand(chestManager)); + getCommand("clearchest").setExecutor(new ClearChestCommand(chestManager)); + getCommand("disposal").setExecutor(new DisposalCommand(chestManager)); + getCommand("savechests").setExecutor(new SaveChestsCommand(chestManager)); + getCommand("workbench").setExecutor(new WorkbenchCommand()); + getCommand("panic").setExecutor(new PanicCommand()); + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("skygear.enabled")) { + getCommand("skygear").setExecutor(new SkyGearCommand()); + } + getCommand("setborder").setExecutor(new SetBorderCommand()); + getCommand("eotwrevive").setExecutor(new EOTWReviveCommand(this)); + getCommand("tc").setExecutor(new TeamCoordinatesCommand()); + getCommand("hidestaff").setExecutor(new HideStaffCommand()); + getCommand("speed").setExecutor(new SpeedCommand()); + getCommand("more").setExecutor(new MoreItemsCommand()); + getCommand("back").setExecutor(new BackCommand(this)); + getCommand("bardenergy").setExecutor(new BardEnergyCommand()); + getCommand("endevent").setExecutor(new EndEventCommand(this)); + getCommand("crowbar").setExecutor(new CrowbarCommand()); + getCommand("reclaimreset").setExecutor(new ReclaimResetCommand()); + + //getCommand("bottle").setExecutor(new BottleCommand(this)); + Map> map = getDescription().getCommands(); + for (Map.Entry> entry : map.entrySet()) { + PluginCommand command = getCommand(entry.getKey()); + command.setPermission("hcf.command." + entry.getKey()); + command.setPermissionMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("cmd-messages.no-permission"))); + } + +} + + +private void registerManagers() { + + + kitManager = new FlatFileKitManager(this); + claimHandler = new ClaimManager(this); + deathbanManager = new DeathbanFile(this); + serverHandler = new ServerHandler(this); + warpManager = new FlatFileWarpManager(this); + economyManager = new EconomyFile(this); + userManagerr = new IUserManager(this); + effectRestorer = new EffectRestorer(this); + PvPClassManager = new PvPClassManager(this); + eotwHandler = new EOTWHandler(this); + factionManager = new TeamFile(this); + eventScheduler = new EventScheduler2(this); + sotwTimer = new SOTWHandler(); + timerManager = new TimerManager(this); // Needs to be registered before ScoreboardHandler. + scoreboardHandler = new ScoreboardHandler(this); + userManager = new UserManager(this); + visualiseHandler = new VisualiseHandler(); + keyManager = new KeyManager(this); + restoreInventoryManager = new InventoryManager(this); + restoreManager = new RestoreManager(this); + endEventHandler = new EndEventHandler(this); + reviveHandler = new ReviveHandler(this); + getServer().getPluginManager().registerEvents(new KeyListener(this), this); + getCommand("key").setExecutor(new LootExecutor(this)); +} + + + + + +public void setLocation() { + Long hours = Long.valueOf(getConfig().getLong("glowstone-mountain.regeneration")); + Bukkit.getScheduler().scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("HCF"), new Runnable() { + @Override + public void run() { + HardcoreFactionsPlugin.this.setLocation(); + if (getConfig().getBoolean("glowstone-mountain.enabled")) { + try { + Location loc = GlowstoneMountainCommand.destringifyLocation(getConfig().getString("glowstone-mountain.location")); + loadGlowstone(loc); + String message = ChatColor.translateAlternateColorCodes('&', getConfig().getString("glowstone-mountain-messages.regenerated")); + Bukkit.broadcastMessage(message); + } catch (MaxChangedBlocksException | DataException | IOException e) { + e.printStackTrace(); + } + } + } + }, hours.longValue()); + for (Player all : Bukkit.getOnlinePlayers()) { + all.playSound(all.getLocation(), Sound.NOTE_PIANO, 30.0F, 1.0F); + } +} + + + + + +public void loadGlowstone(Location loc) throws DataException, IOException, MaxChangedBlocksException { + String stg = File.separator; + File file = new File(getDataFolder() + stg + "glowstone-mountain.schematic"); + EditSession es = new EditSession(new BukkitWorld(loc.getWorld()), 999999999); + CuboidClipboard cc = CuboidClipboard.loadSchematic(file); + cc.paste(es, BukkitUtil.toVector(loc), false); +} + + + +public static int getSpamCooldown() { + return HardcoreFactionsPlugin.spamCooldown; +} + +public static boolean databaseContains(String name) { + return HardcoreFactionsPlugin.database.containsKey(name); +} + +public static int getMessageCount(String name) { + return HardcoreFactionsPlugin.database.get(name); +} + +public static void addMessage(String name) { + int messageCount; + if (HardcoreFactionsPlugin.database.containsKey(name)) { + messageCount = HardcoreFactionsPlugin.database.get(name); + HardcoreFactionsPlugin.database.remove(name); + } + else { + messageCount = 0; + } + ++messageCount; + HardcoreFactionsPlugin.database.put(name, messageCount); +} + +public static void removeMessageCount(String name) { + HardcoreFactionsPlugin.database.remove(name); +} + +static { + HardcoreFactionsPlugin.database = new HashMap<>(); +} + +public WarpManager getWarpManager() { + return this.warpManager; +} + +public ServerHandler getServerHandler() { + return this.serverHandler; +} + +public DataHandler getDataHandler() { + return this.dataHandler; +} + +public IUserManager getUserManagerr() { + return this.userManagerr; +} + +public FrozenInventory getInventoryManager() { + return this.inventoryManager; +} + +public FrozenManager getFrozenManager() { + return this.frozenManager; +} + +public KeyManager getKeyManager() +{ + return this.keyManager; +} + +public YamlConfiguration getReclaimConfig() { + return reclaimConfig; + } + +public YamlConfiguration getReclaimSettingsConfig() { + return reclaimSettingsConfig; + } + +/* + * In case you want to automatically register Koth games + * you may use this method. Do not forget to import the required + * packages and add your HCF plugin as a library. + */ + +/*private void registerFromFactions(){ + koths.clear(); + for(Faction faction : getFactionManager().getFactions()){ + if(faction instanceof EventFaction){ + if(faction instanceof KothFaction) { + koths.add(faction.getName()); + this.getLogger().info("Registered " + faction.getName() + " in eventGames list."); + } + } + } +}*/ + +} \ No newline at end of file diff --git a/src/notifyz/hardcorefactions/chests/InventoryIO.java b/src/notifyz/hardcorefactions/chests/InventoryIO.java new file mode 100644 index 0000000..507ea69 --- /dev/null +++ b/src/notifyz/hardcorefactions/chests/InventoryIO.java @@ -0,0 +1,119 @@ +package notifyz.hardcorefactions.chests; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; + +import org.bukkit.Bukkit; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +/** + * Utility class to store inventories to file and read them back again. + */ +public class InventoryIO { + + /** + * Loads an inventory from a plain-text file. + * + * @param file the text file to load + * @return the loaded inventory + * @throws IOException if the file could not be read + * @deprecated use {@link #loadFromYaml} instead + */ + @Deprecated + public static Inventory loadFromTextFile(File file) throws IOException { + final Inventory inventory = Bukkit.getServer().createInventory(null, HardcoreFactionsPlugin.getInstance().getConfig().getInt("chest-configuration.size")); + + final BufferedReader in = new BufferedReader(new FileReader(file)); + + String line; + int slot = 0; + + while ((line = in.readLine()) != null) { + if (!line.equals("")) { + final String[] parts = line.split(":"); + + try { + int type = Integer.parseInt(parts[0]); + int amount = Integer.parseInt(parts[1]); + short damage = Short.parseShort(parts[2]); + + if (type != 0) { + inventory.setItem(slot, new ItemStack(type, amount, damage)); + } + } catch (NumberFormatException e) { + // ignore + } + + ++slot; + } + } + + in.close(); + + return inventory; + } + + /** + * Loads an inventory from a YAML configuration file. + * + * @param file the YAML file to load + * @return the loaded inventory + * @throws IOException if the file could not be read + * @throws InvalidConfigurationException if the file could not be parsed + */ + public static Inventory loadFromYaml(File file) throws IOException, InvalidConfigurationException { + YamlConfiguration yaml = new YamlConfiguration(); + yaml.load(file); + + int inventorySize = yaml.getInt("size", HardcoreFactionsPlugin.getInstance().getConfig().getInt("chest-configuration.size")); + + Inventory inventory = Bukkit.getServer().createInventory(null, inventorySize); + + ConfigurationSection items = yaml.getConfigurationSection("items"); + + for (int slot = 0; slot < inventorySize; slot++) { + String slotString = String.valueOf(slot); + + if (items.isItemStack(slotString)) { + ItemStack itemStack = items.getItemStack(slotString); + inventory.setItem(slot, itemStack); + } + } + + return inventory; + } + + /** + * Saves an inventory to a YAML configuration file. + * + * @param inventory the inventory to save + * @param file the YAML file to write + * @throws IOException if the file could not be written + */ + public static void saveToYaml(Inventory inventory, File file) throws IOException { + YamlConfiguration yaml = new YamlConfiguration(); + + int inventorySize = inventory.getSize(); + yaml.set("size", inventorySize); + + ConfigurationSection items = yaml.createSection("items"); + + for (int slot = 0; slot < inventorySize; slot++) { + ItemStack stack = inventory.getItem(slot); + + if (stack != null) { + items.set(String.valueOf(slot), stack); + } + } + + yaml.save(file); + } +} diff --git a/src/notifyz/hardcorefactions/chests/Teller.java b/src/notifyz/hardcorefactions/chests/Teller.java new file mode 100644 index 0000000..56a855f --- /dev/null +++ b/src/notifyz/hardcorefactions/chests/Teller.java @@ -0,0 +1,75 @@ +package notifyz.hardcorefactions.chests; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +public class Teller { + + private final HardcoreFactionsPlugin plugin; + + private static String prefix; + + private static String infoColor; + private static String successColor; + private static String warningColor; + private static String errorColor; + private static String miscColor; + + public Teller(HardcoreFactionsPlugin plugin) { + this.plugin = plugin; + + init(); + } + + public enum Type { + INFO, SUCCESS, WARNING, ERROR, MISC; + } + + /** + * Initializes the Teller prefix and colors. + */ + public void init() { + prefix = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("chest-messages.prefix")); + + infoColor = ChatColor.GREEN.toString(); + successColor = ChatColor.GREEN.toString(); + warningColor = ChatColor.RED.toString(); + errorColor = ChatColor.DARK_RED.toString(); + miscColor = ChatColor.RED.toString(); + } + + /** + * Sends a formatted and colored message to a specified CommandSender with a given type and message. + * + * @param sender the CommandSender to message + * @param type the type of tell message to send + * @param message the message to send + */ + public static void tell(CommandSender sender, Type type, String message) { + String color = ""; + + switch (type) { + case INFO: + color = infoColor; + break; + case SUCCESS: + color = successColor; + break; + case WARNING: + color = warningColor; + break; + case ERROR: + color = errorColor; + break; + case MISC: + color = miscColor; + } + + String parsedMessage = prefix + " " + ChatColor.RESET + color + message; + parsedMessage = ChatColor.translateAlternateColorCodes('&', parsedMessage); + + sender.sendMessage(parsedMessage); + } +} diff --git a/src/notifyz/hardcorefactions/chests/VirtualChestManager.java b/src/notifyz/hardcorefactions/chests/VirtualChestManager.java new file mode 100644 index 0000000..7a5a4b4 --- /dev/null +++ b/src/notifyz/hardcorefactions/chests/VirtualChestManager.java @@ -0,0 +1,178 @@ +package notifyz.hardcorefactions.chests; + +import java.io.File; +import java.io.FilenameFilter; +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.inventory.Inventory; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +public class VirtualChestManager { + + private static final String YAML_CHEST_EXTENSION = ".chest.yml"; + private static final int YAML_EXTENSION_LENGTH = YAML_CHEST_EXTENSION.length(); + + private final File dataFolder; + private final Logger logger; + private final Map chests = new HashMap<>(); + + public VirtualChestManager(File dataFolder, Logger logger) { + this.logger = logger; + this.dataFolder = dataFolder; + + load(); + } + + /** + * Loads all existing chests from the data folder. + */ + private void load() { + dataFolder.mkdirs(); + + FilenameFilter filter = new FilenameFilter() { + public boolean accept(File dir, String name) { + return name.endsWith(YAML_CHEST_EXTENSION); + } + }; + + for (File chestFile : dataFolder.listFiles(filter)) { + String chestFileName = chestFile.getName(); + try { + try { + UUID playerUUID = UUID.fromString(chestFileName.substring(0, chestFileName.length() - YAML_EXTENSION_LENGTH)); + chests.put(playerUUID, InventoryIO.loadFromYaml(chestFile)); + } catch (IllegalArgumentException e) { + // Assume that the filename isn't a UUID, and is therefore an old player-name chest + String playerName = chestFileName.substring(0, chestFileName.length() - YAML_EXTENSION_LENGTH); + boolean flagPlayerNotFound = true; + + for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { + // Search all the known players, load inventory, flag old file for deletion + if (player.getName().equalsIgnoreCase(playerName)) { + flagPlayerNotFound = false; + chests.put(player.getUniqueId(), InventoryIO.loadFromYaml(chestFile)); + chestFile.deleteOnExit(); + } + } + + if (flagPlayerNotFound) { + logger.log(Level.WARNING, "Couldn't load chest file: " + chestFileName); + } + } + } catch (Exception e) { + logger.log(Level.WARNING, "Couldn't load chest file: " + chestFileName); + } + } + + logger.info("Loaded " + chests.size() + " chests"); + } + + /** + * Saves all existing chests to the data folder. + * + * @return the number of successfully written chests + */ + public int save() { + int savedChests = 0; + + dataFolder.mkdirs(); + + Iterator> chestIterator = chests.entrySet().iterator(); + + while (chestIterator.hasNext()) { + final Entry entry = chestIterator.next(); + final UUID playerUUID = entry.getKey(); + final Inventory chest = entry.getValue(); + + final File chestFile = new File(dataFolder, playerUUID.toString() + YAML_CHEST_EXTENSION); + + if (chest == null) { + // Chest got removed, so we have to delete the file. + chestFile.delete(); + chestIterator.remove(); + } else { + try { + // Write the chest file in YAML format + InventoryIO.saveToYaml(chest, chestFile); + + savedChests++; + } catch (IOException e) { + logger.log(Level.WARNING, "Couldn't save chest file: " + chestFile.getName(), e); + } + } + } + + return savedChests; + } + + /** + * Saves a specified player's chest to the data folder. + * + * @param playerUUID the UUID of the player to save the chest of + */ + public void saveChest(UUID playerUUID) { + dataFolder.mkdirs(); + + final String uuidString = playerUUID.toString(); + final Inventory chest = chests.get(playerUUID); + final File chestFile = new File(dataFolder, uuidString + YAML_CHEST_EXTENSION); + + if (chest == null) { + // Chest got removed, so we have to delete the file. + chestFile.delete(); + } else { + try { + // Write the chest file in YAML format + InventoryIO.saveToYaml(chest, chestFile); + } catch (IOException e) { + logger.log(Level.WARNING, "Couldn't save chest file: " + chestFile.getName(), e); + } + } + } + + /** + * Gets a player's virtual chest. + * + * @param playerUUID the UUID of the player + * @return the player's virtual chest. + */ + public Inventory getChest(UUID playerUUID) { + Inventory chest = chests.get(playerUUID); + + if (chest == null) { + chest = Bukkit.getServer().createInventory(null, HardcoreFactionsPlugin.getInstance().getConfig().getInt("chest-configuration.size")); + chests.put(playerUUID, chest); + } + + return chest; + } + + /** + * Clears a player's virtual chest. + * + * @param playerUUID the UUID of the player + */ + public void removeChest(UUID playerUUID) { + // Put a null to the map so we remember to delete the file when saving! + chests.put(playerUUID, null); + } + + /** + * Gets the number of virtual chests. + * + * @return the number of virtual chests + */ + public int getChestCount() { + return chests.size(); + } +} diff --git a/src/notifyz/hardcorefactions/chests/commands/ChestCommand.java b/src/notifyz/hardcorefactions/chests/commands/ChestCommand.java new file mode 100644 index 0000000..c9d498a --- /dev/null +++ b/src/notifyz/hardcorefactions/chests/commands/ChestCommand.java @@ -0,0 +1,87 @@ +package notifyz.hardcorefactions.chests.commands; + +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.chests.Teller; +import notifyz.hardcorefactions.chests.Teller.Type; +import notifyz.hardcorefactions.chests.VirtualChestManager; +import notifyz.hardcorefactions.chests.utils.BukkitUtil; +import notifyz.hardcorefactions.team.utilities.ITeam; + + +public class ChestCommand implements CommandExecutor { + + private final VirtualChestManager chestManager; + + public ChestCommand(VirtualChestManager chestManager) { + this.chestManager = chestManager; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (command.getName().equalsIgnoreCase("chest")) { + // Make sure the sender is a player + if (!(sender instanceof Player)) { + Teller.tell(sender, Type.ERROR, "Only players are able to open chests."); + return true; + } + + Player player = (Player) sender; + + Location location = player.getLocation(); + ITeam factionAt = HardcoreFactionsPlugin.getInstance().getFactionManager().getFactionAt(location); + if ((!factionAt.isSafezone())) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-messages.no-safezone"))); + return false; + } + + // Prevent opening of the chest in Creative Mode + if (player.getGameMode().equals(GameMode.CREATIVE) && !player.hasPermission(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-configuration.permission-bypass")))) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-messages.gamemode-error"))); + return true; + } + + switch (args.length) { + case 0: + // Open the player's own chest + if (player.hasPermission(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-configuration.permission-use-chest")))) { + Inventory chest = chestManager.getChest(player.getUniqueId()); + player.openInventory(chest); + } else { + ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-messages.no-permission")); + } + + return true; + case 1: + // Open someone else's chest + if (player.hasPermission(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-configuration.permission-others-chest")))) { + OfflinePlayer target = BukkitUtil.getOfflinePlayerByName(args[0]); + + if (target != null) { + Inventory chest = chestManager.getChest(target.getUniqueId()); + player.openInventory(chest); + } else { + Teller.tell(player, Type.ERROR, String.format("Chest for %s not found", args[0])); + } + } else { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-messages.no-permission"))); + } + + return true; + } + + return false; + } + + return false; + } +} diff --git a/src/notifyz/hardcorefactions/chests/commands/ClearChestCommand.java b/src/notifyz/hardcorefactions/chests/commands/ClearChestCommand.java new file mode 100644 index 0000000..f314227 --- /dev/null +++ b/src/notifyz/hardcorefactions/chests/commands/ClearChestCommand.java @@ -0,0 +1,67 @@ +package notifyz.hardcorefactions.chests.commands; + +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.chests.Teller; +import notifyz.hardcorefactions.chests.Teller.Type; +import notifyz.hardcorefactions.chests.VirtualChestManager; +import notifyz.hardcorefactions.chests.utils.BukkitUtil; + +public class ClearChestCommand implements CommandExecutor { + + private final VirtualChestManager chestManager; + + public ClearChestCommand(VirtualChestManager chestManager) { + this.chestManager = chestManager; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (command.getName().equalsIgnoreCase("clearchest")) { + switch (args.length) { + case 0: + // Make sure the sender is a player + if (!(sender instanceof Player)) { + Teller.tell(sender, Type.ERROR, "Only players are able to clear their own chests."); + return true; + } + + Player player = (Player) sender; + + if (player.hasPermission(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-configuration.permission-clear-chest")))) { + chestManager.removeChest(player.getUniqueId()); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-messages.cleared-chest"))); + } else { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-messages.no-permission"))); + } + + return true; + case 1: + if (sender.hasPermission(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-configuration.permission-others-clear")))) { + OfflinePlayer target = BukkitUtil.getOfflinePlayerByName(args[0]); + + if (target != null) { + chestManager.removeChest(target.getUniqueId()); + Teller.tell(sender, Type.SUCCESS, "Successfully cleared " + args[0] + "\'s chest."); + } else { + Teller.tell(sender, Type.ERROR, String.format("Chest for %s not found", args[0])); + } + } else { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-messages.no-permission"))); + } + + return true; + default: + return false; + } + } + + return false; + } +} diff --git a/src/notifyz/hardcorefactions/chests/commands/DisposalCommand.java b/src/notifyz/hardcorefactions/chests/commands/DisposalCommand.java new file mode 100644 index 0000000..cc28190 --- /dev/null +++ b/src/notifyz/hardcorefactions/chests/commands/DisposalCommand.java @@ -0,0 +1,44 @@ +package notifyz.hardcorefactions.chests.commands; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.chests.Teller; +import notifyz.hardcorefactions.chests.VirtualChestManager; + + +public class DisposalCommand implements CommandExecutor { + + public DisposalCommand(VirtualChestManager chestManager) { + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (command.getName().equalsIgnoreCase("disposal")) { + // Make sure the sender is a player + if (!(sender instanceof Player)) { + Teller.tell(sender, Teller.Type.ERROR, "Only players are able to open virtual workbenches."); + return true; + } + + Player player = (Player) sender; + + if (player.hasPermission(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-configuration.permission-use-disposal")))) { + Inventory disposal = Bukkit.getServer().createInventory(player, 27, "Disposal"); + player.openInventory(disposal); + } else { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-messages.no-permission"))); + } + + return true; + } + + return false; + } +} diff --git a/src/notifyz/hardcorefactions/chests/commands/SaveChestCommand.java b/src/notifyz/hardcorefactions/chests/commands/SaveChestCommand.java new file mode 100644 index 0000000..1f27a43 --- /dev/null +++ b/src/notifyz/hardcorefactions/chests/commands/SaveChestCommand.java @@ -0,0 +1,47 @@ +package notifyz.hardcorefactions.chests.commands; + +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.chests.Teller; +import notifyz.hardcorefactions.chests.VirtualChestManager; +import notifyz.hardcorefactions.chests.utils.BukkitUtil; + +public class SaveChestCommand implements CommandExecutor { + + private final VirtualChestManager chestManager; + + public SaveChestCommand(VirtualChestManager chestManager) { + this.chestManager = chestManager; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (command.getName().equalsIgnoreCase("savechest")) { + if (args.length == 1) { + if (sender.hasPermission(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-configuration.permission-savechest")))) { + OfflinePlayer target = BukkitUtil.getOfflinePlayerByName(args[0]); + + if (target != null) { + chestManager.saveChest(target.getUniqueId()); + Teller.tell(sender, Teller.Type.SUCCESS, "Successfully saved " + args[0] + "\'s chest."); + } else { + Teller.tell(sender, Teller.Type.ERROR, String.format("Chest for %s not found", args[0])); + } + } else { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-messages.no-permission"))); + } + + return true; + } + + return false; + } + + return false; + } +} diff --git a/src/notifyz/hardcorefactions/chests/commands/SaveChestsCommand.java b/src/notifyz/hardcorefactions/chests/commands/SaveChestsCommand.java new file mode 100644 index 0000000..4a6c9d7 --- /dev/null +++ b/src/notifyz/hardcorefactions/chests/commands/SaveChestsCommand.java @@ -0,0 +1,36 @@ +package notifyz.hardcorefactions.chests.commands; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.chests.Teller; +import notifyz.hardcorefactions.chests.Teller.Type; +import notifyz.hardcorefactions.chests.VirtualChestManager; + +public class SaveChestsCommand implements CommandExecutor { + + private final VirtualChestManager chestManager; + + public SaveChestsCommand(VirtualChestManager chestManager) { + this.chestManager = chestManager; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (command.getName().equalsIgnoreCase("savechests")) { + if (sender.hasPermission(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-configuration.permission-savechests")))) { + int savedChests = chestManager.save(); + Teller.tell(sender, Type.SUCCESS, "Saved " + savedChests + " chests."); + } else { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-messages.no-permission"))); + } + + return true; + } + + return false; + } +} diff --git a/src/notifyz/hardcorefactions/chests/commands/WorkbenchCommand.java b/src/notifyz/hardcorefactions/chests/commands/WorkbenchCommand.java new file mode 100644 index 0000000..10533ec --- /dev/null +++ b/src/notifyz/hardcorefactions/chests/commands/WorkbenchCommand.java @@ -0,0 +1,38 @@ +package notifyz.hardcorefactions.chests.commands; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.chests.Teller; +import notifyz.hardcorefactions.chests.Teller.Type; + + +public class WorkbenchCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (command.getName().equalsIgnoreCase("workbench")) { + // Make sure the sender is a player + if (!(sender instanceof Player)) { + Teller.tell(sender, Type.ERROR, "Only players are able to open virtual workbenches."); + return true; + } + + Player player = (Player) sender; + + if (player.hasPermission(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-configuration.permission-use-workbench")))) { + player.openWorkbench(null, true); + } else { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("chest-messages.no-permission"))); + } + + return true; + } + + return false; + } +} diff --git a/src/notifyz/hardcorefactions/chests/listeners/PlayerListener.java b/src/notifyz/hardcorefactions/chests/listeners/PlayerListener.java new file mode 100644 index 0000000..f028946 --- /dev/null +++ b/src/notifyz/hardcorefactions/chests/listeners/PlayerListener.java @@ -0,0 +1,64 @@ +package notifyz.hardcorefactions.chests.listeners; + +import java.util.List; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.chests.VirtualChestManager; + +public class PlayerListener implements Listener { + + private final VirtualChestManager chestManager; + + private boolean clearOnDeath; + private boolean dropOnDeath; + + public PlayerListener(HardcoreFactionsPlugin hardcoreFactionsPlugin, VirtualChestManager chestManager) { + this.chestManager = chestManager; + + // Load the death event settings + clearOnDeath = hardcoreFactionsPlugin.getConfig().getBoolean("clearOnDeath"); + dropOnDeath = hardcoreFactionsPlugin.getConfig().getBoolean("dropOnDeath"); + } + + /** + * Handles a player's death and clears the chest or drops its contents depending on configuration and permissions. + */ + @EventHandler(ignoreCancelled = true) + public void onPlayerDeath(final PlayerDeathEvent event) { + final Player player = event.getEntity(); + + boolean drop = dropOnDeath; + boolean clear = dropOnDeath || clearOnDeath; + + if (player.hasPermission("chest.keepOnDeath")) { + drop = false; + clear = false; + } else if (player.hasPermission("chest.dropOnDeath")) { + drop = true; + clear = true; + } else if (player.hasPermission("chest.clearOnDeath")) { + drop = false; + clear = true; + } + + if (drop) { + List drops = event.getDrops(); + Inventory chest = chestManager.getChest(player.getUniqueId()); + + for (int i = 0; i < chest.getSize(); i++) { + drops.add(chest.getItem(i)); + } + } + + if (clear) { + chestManager.removeChest(player.getUniqueId()); + } + } +} diff --git a/src/notifyz/hardcorefactions/chests/utils/BukkitUtil.java b/src/notifyz/hardcorefactions/chests/utils/BukkitUtil.java new file mode 100644 index 0000000..bbddf39 --- /dev/null +++ b/src/notifyz/hardcorefactions/chests/utils/BukkitUtil.java @@ -0,0 +1,25 @@ +package notifyz.hardcorefactions.chests.utils; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; + +public class BukkitUtil { + + /** + * Searches for and retrieves an offline player by their name. + * + * @param name the name to search for + * @return the found player or null + */ + public static OfflinePlayer getOfflinePlayerByName(String name) { + OfflinePlayer[] offlinePlayers = Bukkit.getOfflinePlayers(); + + for (OfflinePlayer player : offlinePlayers) { + if (player.getName().equalsIgnoreCase(name)) { + return player; + } + } + + return null; + } +} diff --git a/src/notifyz/hardcorefactions/classes/PvPClass.java b/src/notifyz/hardcorefactions/classes/PvPClass.java new file mode 100644 index 0000000..f930c8e --- /dev/null +++ b/src/notifyz/hardcorefactions/classes/PvPClass.java @@ -0,0 +1,62 @@ +package notifyz.hardcorefactions.classes; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; + +import lombok.Getter; +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +/** + * Represents a class that can apply PVP buffs for players. + */ +@SuppressWarnings({ "deprecation" }) +public abstract class PvPClass { + + public static final long DEFAULT_MAX_DURATION = TimeUnit.MINUTES.toMillis(8L); + + private final List passiveEffects = new ArrayList<>(); + + @Getter + protected final String name; + + @Getter + protected final long warmupDelay; + + protected void addPassiveEffect(PotionEffect potionEffect) { + Objects.requireNonNull(potionEffect); + passiveEffects.add(potionEffect); + } + + public PvPClass(String name, long warmupDelay) { + this.name = name; + this.warmupDelay = warmupDelay; + } + + public boolean onEquip(Player player) { + for (PotionEffect effect : passiveEffects) { + player.addPotionEffect(effect, true); + } + for (String pvpclass : HardcoreFactionsPlugin.getPlugin().getConfig().getStringList("classes.class-equiped")) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', pvpclass).replace("%class%", name)); + } + return true; + } + + public void onUnequip(Player player) { + for (PotionEffect effect : passiveEffects) { + player.removePotionEffect(effect.getType()); + } + + for (String pvpclass : HardcoreFactionsPlugin.getPlugin().getConfig().getStringList("classes.class-un-equiped")) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', pvpclass).replace("%class%", name)); + } + } + + public abstract boolean isApplicableFor(Player player); +} diff --git a/src/notifyz/hardcorefactions/classes/events/PvPClassEquipEvent.java b/src/notifyz/hardcorefactions/classes/events/PvPClassEquipEvent.java new file mode 100644 index 0000000..2b79205 --- /dev/null +++ b/src/notifyz/hardcorefactions/classes/events/PvPClassEquipEvent.java @@ -0,0 +1,30 @@ +package notifyz.hardcorefactions.classes.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +import lombok.Getter; +import notifyz.hardcorefactions.classes.PvPClass; + +public class PvPClassEquipEvent extends PlayerEvent { + + private static final HandlerList handlers = new HandlerList(); + + @Getter + private final PvPClass PvPClass; + + public PvPClassEquipEvent(Player player, PvPClass PvPClass) { + super(player); + this.PvPClass = PvPClass; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/src/notifyz/hardcorefactions/classes/events/PvPClassUnEquipEvent.java b/src/notifyz/hardcorefactions/classes/events/PvPClassUnEquipEvent.java new file mode 100644 index 0000000..8ec25f2 --- /dev/null +++ b/src/notifyz/hardcorefactions/classes/events/PvPClassUnEquipEvent.java @@ -0,0 +1,30 @@ +package notifyz.hardcorefactions.classes.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +import lombok.Getter; +import notifyz.hardcorefactions.classes.PvPClass; + +public class PvPClassUnEquipEvent extends PlayerEvent { + + private static final HandlerList handlers = new HandlerList(); + + @Getter + private final PvPClass PvPClass; + + public PvPClassUnEquipEvent(Player player, PvPClass PvPClass) { + super(player); + this.PvPClass = PvPClass; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/src/notifyz/hardcorefactions/classes/manager/PvPClassManager.java b/src/notifyz/hardcorefactions/classes/manager/PvPClassManager.java new file mode 100644 index 0000000..dfc3006 --- /dev/null +++ b/src/notifyz/hardcorefactions/classes/manager/PvPClassManager.java @@ -0,0 +1,95 @@ +package notifyz.hardcorefactions.classes.manager; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import javax.annotation.Nullable; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.plugin.PluginManager; + +import lombok.Getter; +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.classes.PvPClass; +import notifyz.hardcorefactions.classes.events.PvPClassEquipEvent; +import notifyz.hardcorefactions.classes.events.PvPClassUnEquipEvent; +import notifyz.hardcorefactions.classes.type.archer.ArcherClass; +import notifyz.hardcorefactions.classes.type.bard.BardClass; +import notifyz.hardcorefactions.classes.type.ghost.GhostClass; +import notifyz.hardcorefactions.classes.type.miner.MinerClass; +import notifyz.hardcorefactions.classes.type.rogue.RogueClass; + +public class PvPClassManager implements Listener { + + private final Map equippedClasses = new HashMap<>(); + + @Getter + private final List pvpClasses = new ArrayList<>(); + + public ArcherClass archerClass; + + public PvPClassManager(HardcoreFactionsPlugin plugin) { + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("classes.archer.enabled")) { + pvpClasses.add(archerClass = new ArcherClass(plugin)); + } + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("classes.bard.enabled")) { + pvpClasses.add(new BardClass(plugin)); + } + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("classes.miner.enabled")) { + pvpClasses.add(new MinerClass(plugin)); + } + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("classes.rogue.enabled")) { + pvpClasses.add(new RogueClass(plugin)); + } + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("classes.ghost.enabled")) { + pvpClasses.add(new GhostClass(plugin)); + } + PluginManager manager = plugin.getServer().getPluginManager(); + manager.registerEvents(this, plugin); + pvpClasses.stream().filter(pvpClass -> pvpClass instanceof Listener).forEach(pvpClass -> { + manager.registerEvents((Listener) pvpClass, plugin); + }); + } + + public void onDisable() { + for (Map.Entry entry : new HashMap<>(equippedClasses).entrySet()) { + setEquippedClass(Bukkit.getPlayer(entry.getKey()), null); + } + + pvpClasses.clear(); + equippedClasses.clear(); + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent event) { + setEquippedClass(event.getEntity(), null); + } + + public PvPClass getEquippedClass(Player player) { + return equippedClasses.get(player.getUniqueId()); + } + + public boolean hasClassEquipped(Player player, PvPClass pvpClass) { + return getEquippedClass(player) == pvpClass; + } + + public void setEquippedClass(Player player, @Nullable PvPClass pvpClass) { + if (pvpClass == null) { + PvPClass equipped = equippedClasses.remove(player.getUniqueId()); + if (equipped != null) { + equipped.onUnequip(player); + Bukkit.getPluginManager().callEvent(new PvPClassUnEquipEvent(player, equipped)); + } + } else if (pvpClass != this.getEquippedClass(player) && pvpClass.onEquip(player)) { + equippedClasses.put(player.getUniqueId(), pvpClass); + Bukkit.getPluginManager().callEvent(new PvPClassEquipEvent(player, pvpClass)); + } + } +} diff --git a/src/notifyz/hardcorefactions/classes/type/Holder.java b/src/notifyz/hardcorefactions/classes/type/Holder.java new file mode 100644 index 0000000..cd6ae42 --- /dev/null +++ b/src/notifyz/hardcorefactions/classes/type/Holder.java @@ -0,0 +1,24 @@ +package notifyz.hardcorefactions.classes.type; + +import java.util.UUID; + +import org.bukkit.scheduler.BukkitRunnable; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.scoreboard.provider.PvPClassHolder; +import notifyz.hardcorefactions.utilities.utils.Tuple; + +public class Holder implements PvPClassHolder { + + private HardcoreFactionsPlugin plugin; + + public Holder(HardcoreFactionsPlugin plugin) { + this.plugin = plugin; + } + + @SuppressWarnings("static-access") + @Override + public Tuple getArcherTag(UUID uuid) { + return plugin.getPvPClassManager().archerClass.tagged.get(uuid); + } +} diff --git a/src/notifyz/hardcorefactions/classes/type/archer/ArcherClass.java b/src/notifyz/hardcorefactions/classes/type/archer/ArcherClass.java new file mode 100644 index 0000000..7e4c2d5 --- /dev/null +++ b/src/notifyz/hardcorefactions/classes/type/archer/ArcherClass.java @@ -0,0 +1,240 @@ +package notifyz.hardcorefactions.classes.type.archer; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import net.minecraft.util.gnu.trove.map.TObjectLongMap; +import net.minecraft.util.gnu.trove.map.hash.TObjectLongHashMap; +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.classes.PvPClass; +import notifyz.hardcorefactions.classes.events.PvPClassUnEquipEvent; +import notifyz.hardcorefactions.scoreboard.utilities.PlayerBoard; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; +import notifyz.hardcorefactions.utilities.utils.JavaUtils; +import notifyz.hardcorefactions.utilities.utils.Tuple; + +/** + * Represents a {@link PvPClass} used to buff Archer game-play such as Bows. + */ +public class ArcherClass extends PvPClass implements Listener { + + private static final int DAMAGE_BONUS_PERCENT = HardcoreFactionsPlugin.getInstance().getConfig().getInt("classes.archer.damage-percentage"); + + private static final PotionEffect ARCHER_SPEED_EFFECT = new PotionEffect(PotionEffectType.SPEED, 160, 3); + private static final long ARCHER_SPEED_COOLDOWN_DELAY = TimeUnit.SECONDS.toMillis(HardcoreFactionsPlugin.getInstance().getConfig().getInt("classes.archer.speed-cooldown")); + + public final static Map> tagged = new HashMap<>();//added static + public final static TObjectLongMap archerSpeedCooldowns = new TObjectLongHashMap<>(); + + public static final HashMap tagged2 = new HashMap<>(); + + private final HardcoreFactionsPlugin plugin; + + public ArcherClass(HardcoreFactionsPlugin plugin) { + super(HardcoreFactionsPlugin.getInstance().getConfig().getString("classes.archer.name"), JavaUtils.parse(HardcoreFactionsPlugin.getInstance().getConfig().getString("scoreboard.archer-time"))); + this.plugin = plugin; + + addPassiveEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, Integer.MAX_VALUE, 1)); + addPassiveEffect(new PotionEffect(PotionEffectType.SPEED, Integer.MAX_VALUE, 2)); + } + + private void untag(Player player) { + tagged.remove(player.getUniqueId()); + for (PlayerBoard playerBoard : plugin.getScoreboardHandler().getPlayerBoards().values()) { + playerBoard.addUpdates(Bukkit.getOnlinePlayers()); + } + } + + public TObjectLongMap getSpeedCooldown(){ + return ArcherClass.archerSpeedCooldowns; + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onPlayerClassUnequip(PvPClassUnEquipEvent event) { + untag(event.getPlayer()); + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onPlayerDeath(PlayerDeathEvent event) { + untag(event.getEntity()); + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onPlayerQuit(PlayerQuitEvent event) { + untag(event.getPlayer()); + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onPlayerKick(PlayerKickEvent event) { + untag(event.getPlayer()); + } + + private static final long TAG_DURATION = TimeUnit.SECONDS.toMillis(10L); + private static final long TAG_DURATION_TICKS = TAG_DURATION / 50L; + private static final String TAG_DURATION_WORDS = DurationFormatUtils.formatDurationWords(TAG_DURATION,true,true); + + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) + public void onEntityDamage(EntityDamageByEntityEvent event) { + Entity entity = event.getEntity(); + Player attacker = BukkitUtils.getFinalAttacker(event, true); + if (attacker != null && !attacker.equals(entity) && entity instanceof Player) { + Player attacked = (Player) entity; + + Tuple tuple = tagged.get(attacked.getUniqueId()); + + if (event.getDamager() instanceof Arrow && plugin.getPvPClassManager().getEquippedClass(attacker) instanceof ArcherClass) { + if (plugin.getPvPClassManager().getEquippedClass(attacked) instanceof ArcherClass) { + attacker.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.archer.cannot-tag-archers"))); + return; + } + + if (tuple != null) { + tuple.getValue().cancel(); + } + + BukkitRunnable runnable = new BukkitRunnable() { + @Override + public void run() { + untag(attacked); + } + }; + LeatherArmorMeta helmMeta = (LeatherArmorMeta)attacker.getInventory().getHelmet().getItemMeta(); + LeatherArmorMeta chestMeta = (LeatherArmorMeta)attacker.getInventory().getChestplate().getItemMeta(); + LeatherArmorMeta leggingsMeta = (LeatherArmorMeta)attacker.getInventory().getLeggings().getItemMeta(); + LeatherArmorMeta bootsMeta = (LeatherArmorMeta)attacker.getInventory().getBoots().getItemMeta(); + + if (plugin.getConfig().getBoolean("classes.archer.use-colorful-armor")) { + Color green = Color.fromRGB(6717235); + if ((helmMeta.getColor().equals(green)) && (chestMeta.getColor().equals(green)) && (leggingsMeta.getColor().equals(green)) && (bootsMeta.getColor().equals(green))) + { + attacked.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 120, 0)); + attacker.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lPoison! &eSince your armor is green, you gave " + attacked.getName() + " the poison effect for 6 seconds.")); + attacked.sendMessage(ChatColor.translateAlternateColorCodes('&', "&2&lPoison! &aSince " + attacker.getName() + "'s armor is green, you were given the poison effect for 6 seconds.")); + } + Color blue = Color.fromRGB(3361970); + if ((helmMeta.getColor().equals(blue)) && (chestMeta.getColor().equals(blue)) && (leggingsMeta.getColor().equals(blue)) && (bootsMeta.getColor().equals(blue))) + { + attacked.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 120, 0)); + attacker.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lSlowness! &eSince your armor is blue, you gave " + attacked.getName() + " the slowness effect for 6 seconds.")); + attacked.sendMessage(ChatColor.translateAlternateColorCodes('&', "&3&lSlowness! &bSince " + attacker.getName() + "'s armor is blue, you were given the slowness effect for 6 seconds.")); + } + Color gray = Color.fromRGB(5000268); + if ((helmMeta.getColor().equals(gray)) && (chestMeta.getColor().equals(gray)) && (leggingsMeta.getColor().equals(gray)) && (bootsMeta.getColor().equals(gray))) + { + attacked.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 120, 0)); + attacker.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lBlindness! &eSince your armor is gray, you gave " + attacked.getName() + " the blindness effect for 6 seconds.")); + attacked.sendMessage(ChatColor.translateAlternateColorCodes('&', "&8&lBlindness! &7Since " + attacker.getName() + "'s armor is gray, you were given the blindness effect for 6 seconds.")); + } + Color black = Color.fromRGB(1644825); + if ((helmMeta.getColor().equals(black)) && (chestMeta.getColor().equals(black)) && (leggingsMeta.getColor().equals(black)) && (bootsMeta.getColor().equals(black))) + { + attacked.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 120, 0)); + attacker.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lWither! &eSince your armor is black, you gave " + attacked.getName() + " the wither effect for 6 seconds.")); + attacked.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&lWither! &fSince " + attacker.getName() + "'s armor is black, you were given the wither effect for 6 seconds.")); + } + } + + /*attacker.sendMessage(ChatColor.RED + "You have tagged " + attacked.getName() + + " for " + TAG_DURATION_WORDS + ", their received damage will be " + DAMAGE_BONUS_PERCENT + "% higher."); + attacked.sendMessage(ChatColor.RED + "You have been archer tagged for " + TAG_DURATION_WORDS + + ", received damage will be " + DAMAGE_BONUS_PERCENT + "% higher."); */ + double distance = attacker.getLocation().distance(attacked.getLocation()); + attacker.sendMessage(ChatColor.translateAlternateColorCodes('&', ("&e[&9Arrow Range &e(&c" + String.format("%.0f", Double.valueOf(distance)) + "&e)] " + "&6Marked " + attacked.getName() + " &6for 10 seconds. &9&l(1 heart)"))); + attacked.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lMarked! &eAn archer has shot you and marked you (+" + DAMAGE_BONUS_PERCENT + "&e% damage) for " + TAG_DURATION_WORDS + '.')); + //attacker.sendMessage(ChatColor.GOLD + "You have marked " + ChatColor.YELLOW + attacked.getName() + ChatColor.GOLD + " for " + ChatColor.AQUA + TAG_DURATION_WORDS + ChatColor.GOLD + "." + ChatColor.GRAY + " (" + DAMAGE_BONUS_PERCENT + "% damage)"); + //attacked.sendMessage(ChatColor.RED.toString() + "MARKED! " + ChatColor.GOLD + "You are now " + ChatColor.YELLOW + "Archer Tagged " + ChatColor.GOLD + "for " + ChatColor.AQUA + TAG_DURATION_WORDS + ChatColor.GOLD + " by " + attacker.getName() + "." + ChatColor.GRAY + " (" + DAMAGE_BONUS_PERCENT + "% damage)"); + runnable.runTaskLater(plugin, TAG_DURATION_TICKS); + + + tagged.put(attacked.getUniqueId(), tuple = new Tuple<>(System.currentTimeMillis() + TAG_DURATION, runnable)); + for (PlayerBoard playerBoard : plugin.getScoreboardHandler().getPlayerBoards().values()) { + playerBoard.addUpdates(Bukkit.getOnlinePlayers()); + } + } + + if (tuple != null) { + long remaining = tuple.getKey() - System.currentTimeMillis(); + if (remaining > 0L) { + event.setDamage(event.getDamage() * (1.0 + (DAMAGE_BONUS_PERCENT / 100.0))); + } + } + } + } + + @EventHandler(ignoreCancelled = false, priority = EventPriority.HIGH) + public void onPlayerInteract(PlayerInteractEvent event) { + Action action = event.getAction(); + if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK) { + if (event.hasItem() && event.getItem().getType() == Material.SUGAR) { + if (plugin.getPvPClassManager().getEquippedClass(event.getPlayer()) != this) { + return; + } + + Player player = event.getPlayer(); + UUID uuid = player.getUniqueId(); + long timestamp = archerSpeedCooldowns.get(uuid); + long millis = System.currentTimeMillis(); + long remaining = timestamp == archerSpeedCooldowns.getNoEntryValue() ? -1L : timestamp - millis; + if (remaining > 0L) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.archer.speed-cooldown").replace("%cooldown%", DurationFormatUtils.formatDurationWords(remaining, true, true)))); + } else { + ItemStack stack = player.getItemInHand(); + if (stack.getAmount() == 1) { + player.setItemInHand(new ItemStack(Material.AIR, 1)); + } else { + stack.setAmount(stack.getAmount() - 1); + } + + plugin.getEffectRestorer().setRestoreEffect(player, ARCHER_SPEED_EFFECT); + archerSpeedCooldowns.put(event.getPlayer().getUniqueId(), System.currentTimeMillis() + ARCHER_SPEED_COOLDOWN_DELAY); + } + } + } + } + + @Override + public boolean isApplicableFor(Player player) { + PlayerInventory playerInventory = player.getInventory(); + + ItemStack helmet = playerInventory.getHelmet(); + if (helmet == null || helmet.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.archer.equipment.helmet"))) + return false; + + ItemStack chestplate = playerInventory.getChestplate(); + if (chestplate == null || chestplate.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.archer.equipment.chestplate"))) + return false; + + ItemStack leggings = playerInventory.getLeggings(); + if (leggings == null || leggings.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.archer.equipment.leggings"))) + return false; + + ItemStack boots = playerInventory.getBoots(); + return !(boots == null || boots.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.archer.equipment.boots"))); + } +} diff --git a/src/notifyz/hardcorefactions/classes/type/bard/BardClass.java b/src/notifyz/hardcorefactions/classes/type/bard/BardClass.java new file mode 100644 index 0000000..63038b1 --- /dev/null +++ b/src/notifyz/hardcorefactions/classes/type/bard/BardClass.java @@ -0,0 +1,340 @@ +package notifyz.hardcorefactions.classes.type.bard; + +import java.util.Collection; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerItemHeldEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import gnu.trove.map.TObjectLongMap; +import gnu.trove.map.hash.TObjectLongHashMap; +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.classes.PvPClass; +import notifyz.hardcorefactions.classes.type.bard.utilties.BardData; +import notifyz.hardcorefactions.classes.type.bard.utilties.BardEffect; +import notifyz.hardcorefactions.team.type.PlayerTeam; +import notifyz.hardcorefactions.team.utilities.ITeam; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; +import notifyz.hardcorefactions.utilities.chat.Lang; + +@SuppressWarnings("deprecation") +public class BardClass extends PvPClass implements Listener { + + public static final long HELD_EFFECT_DURATION_TICKS = TimeUnit.SECONDS.toMillis(HardcoreFactionsPlugin.getInstance().getConfig().getInt("classes.bard.buff-duration")); // the amount of time in ticks to apply a Held potion effect for faction members + + private static final long BUFF_COOLDOWN_MILLIS = TimeUnit.SECONDS.toMillis(HardcoreFactionsPlugin.getInstance().getConfig().getInt("classes.bard.buff-cooldown")); // time in milliseconds for Bard buff cooldowns + private static final int TEAMMATE_NEARBY_RADIUS = HardcoreFactionsPlugin.getInstance().getConfig().getInt("classes.bard.teammate-nearby"); + private static final long HELD_REAPPLY_TICKS = 20L; + @SuppressWarnings("unused") + private static final String MARK = BukkitUtils.STRAIGHT_LINE_DEFAULT.substring(0, 8); + private final Map bardDataMap = new HashMap<>(); + private final Map bardEffects = new EnumMap<>(Material.class); + private final HardcoreFactionsPlugin plugin; + private final TObjectLongMap msgCooldowns = new TObjectLongHashMap<>(); + + public BardClass(HardcoreFactionsPlugin plugin) { + super(HardcoreFactionsPlugin.getInstance().getConfig().getString("classes.bard.name"), TimeUnit.SECONDS.toMillis(1L)); + this.plugin = plugin; + + addPassiveEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, Integer.MAX_VALUE, 1)); + addPassiveEffect(new PotionEffect(PotionEffectType.REGENERATION, Integer.MAX_VALUE, 0)); + addPassiveEffect(new PotionEffect(PotionEffectType.SPEED, Integer.MAX_VALUE, 1)); + + this.bardEffects.put(Material.FERMENTED_SPIDER_EYE, new BardEffect(60, new PotionEffect(PotionEffectType.INVISIBILITY, 120, 1),new PotionEffect(PotionEffectType.INVISIBILITY, 100, 0))); + this.bardEffects.put(Material.WHEAT, new BardEffect(35, new PotionEffect(PotionEffectType.SATURATION, 120, 1), new PotionEffect(PotionEffectType.SATURATION, 100, 0))); + this.bardEffects.put(Material.SUGAR, new BardEffect(25, new PotionEffect(PotionEffectType.SPEED, 120, 2), new PotionEffect(PotionEffectType.SPEED, 100, 1))); + this.bardEffects.put(Material.BLAZE_POWDER, new BardEffect(50, new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 120, 1), new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 100, 0))); + this.bardEffects.put(Material.IRON_INGOT, new BardEffect(35, new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 80, 2), new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 100, 0))); + this.bardEffects.put(Material.GHAST_TEAR, new BardEffect(45, new PotionEffect(PotionEffectType.REGENERATION, 60, 2), new PotionEffect(PotionEffectType.REGENERATION, 100, 0))); + this.bardEffects.put(Material.FEATHER, new BardEffect(30, new PotionEffect(PotionEffectType.JUMP, 120, 5), new PotionEffect(PotionEffectType.JUMP, 100, 0))); + this.bardEffects.put(Material.SPIDER_EYE, new BardEffect(50, new PotionEffect(PotionEffectType.WITHER, 100, 1), null)); + this.bardEffects.put(Material.MAGMA_CREAM, new BardEffect(10, new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 900, 0), new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 120, 0))); + } + + @Override + public boolean onEquip(Player player) { + if (HardcoreFactionsPlugin.getPlugin().getTimerManager().getInvincibilityTimer().getRemainingCooldown(player) > 0L) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.bard.cannot-equip-class"))); + return false; + } + + if (!super.onEquip(player)) { + return false; + } + + BardData bardData = new BardData(); + bardDataMap.put(player.getUniqueId(), bardData); + bardData.startEnergyTracking(); + bardData.heldTask = new BukkitRunnable() { + int lastEnergy; + + @Override + public void run() { + // Apply the bard effects here. + ItemStack held = player.getItemInHand(); + if (held != null) { + BardEffect bardEffect = bardEffects.get(held.getType()); + if (bardEffect == null || bardEffect.heldable == null) { + return; + } + + if (bardEffect.heldable.getType() == PotionEffectType.JUMP) { + plugin.getEffectRestorer().setRestoreEffect(player, bardEffect.heldable); + } + + if (!HardcoreFactionsPlugin.getPlugin().getFactionManager().getFactionAt(player.getLocation()).isSafezone()) { + // Apply the held effect to faction members. + PlayerTeam playerFaction = HardcoreFactionsPlugin.getPlugin().getFactionManager().getPlayerFaction(player); + if (playerFaction != null) { + Collection nearbyEntities = player.getNearbyEntities(TEAMMATE_NEARBY_RADIUS, TEAMMATE_NEARBY_RADIUS, TEAMMATE_NEARBY_RADIUS); + for (Entity nearby : nearbyEntities) { + if (nearby instanceof Player && !player.equals(nearby)) { + Player target = (Player) nearby; + if (playerFaction.getMembers().containsKey(target.getUniqueId())) { + plugin.getEffectRestorer().setRestoreEffect(target, bardEffect.heldable); + } + } + } + } + } + } + + int energy = (int) getEnergy(player); + // the -1 check is for offsets with the energy per millisecond + if (energy != 0 && energy != lastEnergy && (energy % 10 == 0 || lastEnergy - energy - 1 > 0 || energy == BardData.MAX_ENERGY)) { + lastEnergy = energy; + player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.bard.energy-announcer").replace("%energy%", energy + ""))); + } + } + }.runTaskTimer(plugin, 0L, HELD_REAPPLY_TICKS); + return true; + } + + @Override + public void onUnequip(Player player) { + super.onUnequip(player); + clearBardData(player.getUniqueId()); + } + + private void clearBardData(UUID uuid) { + BardData bardData = bardDataMap.remove(uuid); + if (bardData != null && bardData.getHeldTask() != null) { + bardData.getHeldTask().cancel(); + } + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onPlayerQuit(PlayerQuitEvent event) { + clearBardData(event.getPlayer().getUniqueId()); + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onPlayerKick(PlayerKickEvent event) { + clearBardData(event.getPlayer().getUniqueId()); + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onItemHeld(PlayerItemHeldEvent event) { + Player player = event.getPlayer(); + PvPClass equipped = plugin.getPvPClassManager().getEquippedClass(player); + if (equipped == null || !equipped.equals(this)) { + return; + } + + UUID uuid = player.getUniqueId(); + long lastMessage = msgCooldowns.get(uuid); + long millis = System.currentTimeMillis(); + if (lastMessage != msgCooldowns.getNoEntryValue() && lastMessage - millis > 0L) { + return; + } + + ItemStack newStack = player.getInventory().getItem(event.getNewSlot()); + if (newStack != null) { + BardEffect bardEffect = bardEffects.get(newStack.getType()); + if (bardEffect != null) { + msgCooldowns.put(uuid, millis + 1500L); + //player.sendMessage(ChatColor.GOLD + "Bard Effect: " + ChatColor.GOLD); + //player.sendMessage(ChatColor.GOLD + "\u00bb " + ChatColor.YELLOW + "Clickable Effect: " + ChatColor.AQUA + Lang.fromPotionEffectType(bardEffect.clickable.getType()) + ' ' + (bardEffect.clickable.getAmplifier() + 1) + ChatColor.GRAY + " (" + (bardEffect.clickable.getDuration() / 20) + "s)"); + //player.sendMessage(ChatColor.GOLD + "\u00bb " + ChatColor.YELLOW + "Energy Cost: " + ChatColor.AQUA + bardEffect.energyCost); + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("classes.bard.held-item-message")) { + for (String bard : HardcoreFactionsPlugin.getPlugin().getConfig().getStringList("classes.bard.effect-message")) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', bard).replace("%energycost%", Integer.toString(bardEffect.energyCost)).replace("%effect%", Lang.fromPotionEffectType(bardEffect.clickable.getType()) + ' ' + (bardEffect.clickable.getAmplifier() + 1) + ChatColor.GRAY + " (" + (bardEffect.clickable.getDuration() / 20) + "s)")); + } + } + } + } + } + + @EventHandler(ignoreCancelled = false, priority = EventPriority.MONITOR) + public void onPlayerInteract(final PlayerInteractEvent event) { + if (!event.hasItem()) { + return; + } + final Action action = event.getAction(); + if (action == Action.RIGHT_CLICK_AIR || (!event.isCancelled() && action == Action.RIGHT_CLICK_BLOCK)) { + final ItemStack stack = event.getItem(); + final BardEffect bardEffect = this.bardEffects.get(stack.getType()); + if (bardEffect == null || bardEffect.clickable == null) { + return; + } + event.setUseItemInHand(Event.Result.DENY); + final Player player = event.getPlayer(); + final BardData bardData = this.bardDataMap.get(player.getUniqueId()); + if (bardData != null) { + if (!this.canUseBardEffect(player, bardData, bardEffect, true)) { + return; + } + if (stack.getAmount() > 1) { + stack.setAmount(stack.getAmount() - 1); + HardcoreFactionsPlugin.getPlugin().getTimerManager().getCombatTimer().setCooldown(player, player.getUniqueId()); + } else { + player.setItemInHand(new ItemStack(Material.AIR, 1)); + } + if (bardEffect != null && !HardcoreFactionsPlugin.getPlugin().getFactionManager().getFactionAt(player.getLocation()).isSafezone()) { + final PlayerTeam playerFaction = HardcoreFactionsPlugin.getPlugin().getFactionManager().getPlayerFaction(player); + if (playerFaction != null && !bardEffect.clickable.getType().equals(PotionEffectType.WITHER)) { + final Collection nearbyEntities = player.getNearbyEntities(25.0, 25.0, 25.0); + for (final Entity nearby : nearbyEntities) { + if (nearby instanceof Player && !player.equals(nearby)) { + final Player target = (Player) nearby; + if (!playerFaction.getMembers().containsKey(target.getUniqueId())) { + continue; + } + plugin.getEffectRestorer().setRestoreEffect(target, bardEffect.clickable); + } + } + } else if (playerFaction != null && bardEffect.clickable.getType().equals(PotionEffectType.WITHER)) { + final Collection nearbyEntities = player.getNearbyEntities(25.0, 25.0, 25.0); + for (final Entity nearby : nearbyEntities) { + if (nearby instanceof Player && !player.equals(nearby)) { + final Player target = (Player) nearby; + if (playerFaction.getMembers().containsKey(target.getUniqueId())) { + continue; + } + HardcoreFactionsPlugin.getPlugin().getTimerManager().getCombatTimer().setCooldown(target, target.getUniqueId()); + plugin.getEffectRestorer().setRestoreEffect(target, bardEffect.clickable); + } + } + } else if (bardEffect.clickable.getType().equals(PotionEffectType.WITHER)) { + final Collection nearbyEntities = player.getNearbyEntities(25.0, 25.0, 25.0); + for (final Entity nearby : nearbyEntities) { + if (nearby instanceof Player && !player.equals(nearby)) { + final Player target = (Player) nearby; + plugin.getEffectRestorer().setRestoreEffect(target, bardEffect.clickable); + } + } + } + } + plugin.getEffectRestorer().setRestoreEffect(player, bardEffect.clickable); + bardData.setBuffCooldown(BUFF_COOLDOWN_MILLIS); + + @SuppressWarnings("unused") + double newEnergy = this.setEnergy(player, bardData.getEnergy() - bardEffect.energyCost); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.bard.buff-used").replace("%cost%", bardEffect.energyCost + ""))); + //player.sendMessage(ChatColor.GOLD + "You have just used " + name + " buff " + ChatColor.RED + Lang.fromPotionEffectType(bardEffect.clickable.getType()) + ' ' + // + (bardEffect.clickable.getAmplifier() + 1) + ChatColor.GOLD + " costing you " + ChatColor.BOLD + bardEffect.energyCost + ChatColor.YELLOW + " energy. " + // + "Your energy is now " + ChatColor.GREEN + ((newEnergy * 10.0) / 10.0)/* TODO:neeeded? */+ ChatColor.YELLOW + '.'); + } + } + } + + private boolean canUseBardEffect(Player player, BardData bardData, BardEffect bardEffect, boolean sendFeedback) { + String errorFeedback = null; + double currentEnergy = bardData.getEnergy(); + if (bardEffect.energyCost > currentEnergy) { + errorFeedback = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.bard.no-enough-energy").replace("%energy%", currentEnergy + "").replace("%cost%", bardEffect.energyCost + "")); + } + + long remaining = bardData.getRemainingBuffDelay() / 1000; + if (remaining > 0L) { + errorFeedback = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.bard.buff-cooldown").replace("%cooldown%", remaining + "")); + } + + ITeam factionAt = HardcoreFactionsPlugin.getPlugin().getFactionManager().getFactionAt(player.getLocation()); + if (factionAt.isSafezone()) { + errorFeedback = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.bard.buff-in-safezone")); + } + + if (sendFeedback && errorFeedback != null) { + player.sendMessage(errorFeedback); + } + + return errorFeedback == null; + } + + @Override + public boolean isApplicableFor(Player player) { + ItemStack helmet = player.getInventory().getHelmet(); + if (helmet == null || helmet.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.bard.equipment.helmet"))) return false; + + ItemStack chestplate = player.getInventory().getChestplate(); + if (chestplate == null || chestplate.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.bard.equipment.chestplate"))) return false; + + ItemStack leggings = player.getInventory().getLeggings(); + if (leggings == null || leggings.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.bard.equipment.leggings"))) return false; + + ItemStack boots = player.getInventory().getBoots(); + return !(boots == null || boots.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.bard.equipment.boots"))); + } + + public long getRemainingBuffDelay(Player player) { + synchronized (bardDataMap) { + BardData bardData = bardDataMap.get(player.getUniqueId()); + return bardData == null ? 0L : bardData.getRemainingBuffDelay(); + } + } + + /** + * Gets the energy of a {@link Player}. + * + * @param player the {@link Player} to get for + * @return the energy, or 0 if not tracking this player + */ + public double getEnergy(Player player) { + synchronized (bardDataMap) { + BardData bardData = bardDataMap.get(player.getUniqueId()); + return bardData == null ? 0 : bardData.getEnergy(); + } + } + + public long getEnergyMillis(Player player) { + synchronized (bardDataMap) { + BardData bardData = bardDataMap.get(player.getUniqueId()); + return bardData == null ? 0 : bardData.getEnergyMillis(); + } + } + + /** + * Sets the energy of a {@link Player}. + * + * @param player the {@link Player} to set for + * @param energy the energy amount to set + * @return the new energy amount + */ + public double setEnergy(Player player, double energy) { + BardData bardData = bardDataMap.get(player.getUniqueId()); + if (bardData == null) return 0.0; + + bardData.setEnergy(energy); + return bardData.getEnergy(); + } +} diff --git a/src/notifyz/hardcorefactions/classes/type/bard/utilties/BardData.java b/src/notifyz/hardcorefactions/classes/type/bard/utilties/BardData.java new file mode 100644 index 0000000..3dcf4c2 --- /dev/null +++ b/src/notifyz/hardcorefactions/classes/type/bard/utilties/BardData.java @@ -0,0 +1,66 @@ +package notifyz.hardcorefactions.classes.type.bard.utilties; + +import org.bukkit.scheduler.BukkitTask; + +import com.google.common.base.Preconditions; + +import lombok.Getter; +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.classes.type.bard.BardClass; + +/** + * Holds data about a {@link BardClass}. + */ +public class BardData { + + public static final double ENERGY_PER_MILLISECOND = HardcoreFactionsPlugin.getInstance().getConfig().getDouble("classes.bard.energy-per-second"); + public static final double MIN_ENERGY = 0.0D; + public static final double MAX_ENERGY = HardcoreFactionsPlugin.getInstance().getConfig().getDouble("classes.bard.max-energy"); + public static final long MAX_ENERGY_MILLIS = (long) (MAX_ENERGY * 1000L); + + @Getter + private long buffCooldown; + + @Getter + public BukkitTask heldTask; //TODO: find a way to make private + + private long energyStart; + + public void setBuffCooldown(long millis) { + this.buffCooldown = System.currentTimeMillis() + millis; + } + + public long getRemainingBuffDelay() { + return this.buffCooldown - System.currentTimeMillis(); + } + + /** + * Begins tracking energy. + */ + public void startEnergyTracking() { + this.setEnergy(0); + } + + /** + * Gets the energy in milliseconds. + * + * @return energy in milliseconds + */ + public long getEnergyMillis() { + if (this.energyStart == 0L) { + return 0L; + } + + return Math.min(MAX_ENERGY_MILLIS, (long) (ENERGY_PER_MILLISECOND * (System.currentTimeMillis() - this.energyStart))); + } + + public double getEnergy() { + return Math.round(this.getEnergyMillis() / MAX_ENERGY) / 10.0; + } + + public void setEnergy(double energy) { + Preconditions.checkArgument(energy >= MIN_ENERGY, "Energy cannot be less than " + MIN_ENERGY); + Preconditions.checkArgument(energy <= MAX_ENERGY, "Energy cannot be more than " + MAX_ENERGY); + this.energyStart = (long) (System.currentTimeMillis() - (1000L * energy)); + } +} diff --git a/src/notifyz/hardcorefactions/classes/type/bard/utilties/BardEffect.java b/src/notifyz/hardcorefactions/classes/type/bard/utilties/BardEffect.java new file mode 100644 index 0000000..213172b --- /dev/null +++ b/src/notifyz/hardcorefactions/classes/type/bard/utilties/BardEffect.java @@ -0,0 +1,21 @@ +package notifyz.hardcorefactions.classes.type.bard.utilties; + +import org.bukkit.potion.PotionEffect; + +import notifyz.hardcorefactions.classes.type.bard.BardClass; + +/** + * Represents a {@link BardClass} effect. + */ +public class BardEffect { + + public final int energyCost; + public final PotionEffect clickable; + public final PotionEffect heldable; + + public BardEffect(int energyCost, PotionEffect clickable, PotionEffect heldable) { + this.energyCost = energyCost; + this.clickable = clickable; + this.heldable = heldable; + } +} \ No newline at end of file diff --git a/src/notifyz/hardcorefactions/classes/type/bard/utilties/EffectRestorer.java b/src/notifyz/hardcorefactions/classes/type/bard/utilties/EffectRestorer.java new file mode 100644 index 0000000..d53f1e8 --- /dev/null +++ b/src/notifyz/hardcorefactions/classes/type/bard/utilties/EffectRestorer.java @@ -0,0 +1,76 @@ +package notifyz.hardcorefactions.classes.type.bard.utilties; + +import java.util.Collection; +import java.util.UUID; + +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PotionEffectExpireEvent; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.Table; + +import notifyz.hardcorefactions.classes.PvPClass; +import notifyz.hardcorefactions.classes.events.PvPClassUnEquipEvent; +import notifyz.hardcorefactions.classes.type.bard.BardClass; + +public class EffectRestorer implements Listener { + + private final Table restores = HashBasedTable.create(); + + public EffectRestorer(JavaPlugin plugin) { + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onPvpClassUnequip(PvPClassUnEquipEvent event) { + restores.rowKeySet().remove(event.getPlayer().getUniqueId()); + } + + public void setRestoreEffect(Player player, PotionEffect effect) { + boolean shouldCancel = true; + Collection activeList = player.getActivePotionEffects(); + for (PotionEffect active : activeList) { + if (!active.getType().equals(effect.getType())) continue; + + // If the current potion effect has a higher amplifier, ignore this one. + if (effect.getAmplifier() < active.getAmplifier()) { + return; + } else if (effect.getAmplifier() == active.getAmplifier()) { + // If the current potion effect has a longer duration, ignore this one. + if (effect.getDuration() < active.getDuration()) { + return; + } + } + + restores.put(player.getUniqueId(), active.getType(), active); + shouldCancel = false; + break; + } + + // Cancel the previous restore. + player.addPotionEffect(effect, true); + if (shouldCancel && effect.getDuration() > BardClass.HELD_EFFECT_DURATION_TICKS && effect.getDuration() < PvPClass.DEFAULT_MAX_DURATION) { + restores.remove(player.getUniqueId(), effect.getType()); + } + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onPotionEffectExpire(PotionEffectExpireEvent event) { + LivingEntity livingEntity = event.getEntity(); + if (livingEntity instanceof Player) { + Player player = (Player) livingEntity; + PotionEffect previous = restores.remove(player.getUniqueId(), event.getEffect().getType()); + if (previous != null) { + event.setCancelled(true); + player.addPotionEffect(previous, true); + } + } + } +} diff --git a/src/notifyz/hardcorefactions/classes/type/ghost/GhostClass.java b/src/notifyz/hardcorefactions/classes/type/ghost/GhostClass.java new file mode 100644 index 0000000..e931c34 --- /dev/null +++ b/src/notifyz/hardcorefactions/classes/type/ghost/GhostClass.java @@ -0,0 +1,237 @@ +package notifyz.hardcorefactions.classes.type.ghost; + +import java.util.HashMap; +import java.util.concurrent.TimeUnit; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.classes.PvPClass; +import notifyz.hardcorefactions.classes.events.PvPClassUnEquipEvent; +import notifyz.hardcorefactions.utilities.chat.Cooldowns; + + + +public class GhostClass + extends PvPClass + implements Listener +{ + private HardcoreFactionsPlugin plugin; + public HashMap firstAssassinEffects; + public HashMap modes; + public GhostClass(HardcoreFactionsPlugin plugin) + { + super(HardcoreFactionsPlugin.getInstance().getConfig().getString("classes.ghost.name"), TimeUnit.SECONDS.toMillis(1L)); + this.firstAssassinEffects = new HashMap<>(); + this.modes = new HashMap<>(); + this.plugin = plugin; + addPassiveEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE, Integer.MAX_VALUE, 0)); + addPassiveEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, Integer.MAX_VALUE, 1)); + addPassiveEffect(new PotionEffect(PotionEffectType.SPEED, Integer.MAX_VALUE, 1)); + } + + @EventHandler + public void onUnEquip(PvPClassUnEquipEvent e) + { + Player p = e.getPlayer(); + for (Player on : Bukkit.getOnlinePlayers()) { + if ((!on.canSee(p)) && (!on.hasPermission("hcf.command.staffmode"))) { + on.showPlayer(p); + } + } + this.firstAssassinEffects.remove(p); + } + + @EventHandler + public void onDamageSelf(EntityDamageEvent e) + { + if ((e.getEntity() instanceof Player)) + { + Player p = (Player)e.getEntity(); + if ((this.plugin.getPvPClassManager().getEquippedClass(p) == null) || (!this.plugin.getPvPClassManager().getEquippedClass(p).equals(this))) { + return; + } + if ((this.firstAssassinEffects.containsKey(p.getName())) && (this.firstAssassinEffects.get(p.getName()).intValue() == 1)) { + for (Entity entity : p.getNearbyEntities(20.0D, 20.0D, 20.0D)) { + if ((entity instanceof Player)) + { + Player players = (Player)entity; + players.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.ghost.damage-near"))); + } + } + } + } + } + + @EventHandler + public void onHitOtherPlayers(EntityDamageByEntityEvent e) + { + if (((e.getDamager() instanceof Player)) && ((e.getEntity() instanceof Player))) + { + Player p = (Player)e.getDamager(); + if ((this.firstAssassinEffects.containsKey(p.getName())) && (this.firstAssassinEffects.get(p.getName()).intValue() == 1)) { + afterFiveSeconds(p, true); + } + } + } + + @EventHandler + public void onClickItem(PlayerInteractEvent e) + { + Player p = e.getPlayer(); + if ((e.getAction() == Action.RIGHT_CLICK_BLOCK) || (e.getAction() == Action.RIGHT_CLICK_AIR)) + { + PvPClass equipped = this.plugin.getPvPClassManager().getEquippedClass(p); + if ((equipped == null) || (!equipped.equals(this))) { + return; + } + if (p.getItemInHand().getType() == Material.QUARTZ) + { + if (Cooldowns.isOnCooldown("Assassin_item_cooldown", p)) + { + p.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.ghost.cooldown").replace("%cooldown%", HardcoreFactionsPlugin.getRemaining(Cooldowns.getCooldownForPlayerLong("Assassin_item_cooldown", p), true)))); + return; + } + if (p.getItemInHand().getAmount() == 1) { + p.getInventory().remove(p.getItemInHand()); + } + p.getItemInHand().setAmount(p.getItemInHand().getAmount() - 1); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.ghost.stealth-mode"))); + for (Player on : Bukkit.getOnlinePlayers()) + { + on.playEffect(p.getLocation().add(0.5D, 2.0D, 0.5D), Effect.ENDER_SIGNAL, 5); + on.playEffect(p.getLocation().add(0.5D, 1.5D, 0.5D), Effect.ENDER_SIGNAL, 5); + on.playEffect(p.getLocation().add(0.5D, 1.0D, 0.5D), Effect.ENDER_SIGNAL, 5); + on.playSound(p.getLocation(), Sound.ENDERMAN_TELEPORT, 1.0F, 1.0F); + if (!on.hasPermission("hcf.command.staffmode")) { + on.hidePlayer(p); + } + } + for (Entity entity : p.getNearbyEntities(20.0D, 20.0D, 20.0D)) { + if ((entity instanceof Player)) + { + Player players = (Player)entity; + players.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.ghost.damage-near"))); + } + } + Cooldowns.addCooldown("Assassin_item_cooldown", p, HardcoreFactionsPlugin.getInstance().getConfig().getInt("classes.ghost.mode-cooldown")); + ((CraftPlayer)p).removePotionEffect(PotionEffectType.SPEED); + this.firstAssassinEffects.put(p.getName(), Integer.valueOf(1)); + p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 100, 4), true); + p.addPotionEffect(new PotionEffect(PotionEffectType.ABSORPTION, 100, 0), true); + p.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 100, 0), true); + new BukkitRunnable() + { + @Override + public void run() + { + if ((GhostClass.this.isApplicableFor(p)) && (GhostClass.this.firstAssassinEffects.containsKey(p.getName())) && (GhostClass.this.firstAssassinEffects.get(p.getName()).intValue() == 1)) { + GhostClass.this.afterFiveSeconds(p, false); + } + } + } + + .runTaskLater(this.plugin, 100L); + } + } + } + + public void afterFiveSeconds(Player p, boolean force) + { + if ((this.firstAssassinEffects.containsKey(p.getName())) && (isApplicableFor(p))) + { + for (Player on : Bukkit.getOnlinePlayers()) + { + if ((!on.canSee(p)) && (!on.hasPermission("hcf.command.staffmode"))) { + on.showPlayer(p); + } + on.playEffect(p.getLocation().add(0.0D, 2.0D, 0.0D), Effect.ENDER_SIGNAL, 3); + on.playEffect(p.getLocation().add(0.0D, 1.5D, 0.0D), Effect.ENDER_SIGNAL, 3); + on.playEffect(p.getLocation().add(0.0D, 1.0D, 0.0D), Effect.ENDER_SIGNAL, 3); + on.playEffect(p.getLocation().add(0.0D, 2.0D, 0.0D), Effect.BLAZE_SHOOT, 5); + on.playEffect(p.getLocation().add(0.0D, 1.5D, 0.0D), Effect.BLAZE_SHOOT, 5); + on.playEffect(p.getLocation().add(0.0D, 1.0D, 0.0D), Effect.BLAZE_SHOOT, 5); + } + new BukkitRunnable() + { + @Override + public void run() + { + if ((GhostClass.this.firstAssassinEffects.containsKey(p.getName())) && (GhostClass.this.firstAssassinEffects.get(p.getName()).intValue() == 2)) + { + GhostClass.this.firstAssassinEffects.remove(p.getName()); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.ghost.normal-mode"))); + if (GhostClass.this.isApplicableFor(p)) + { + p.addPotionEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE, Integer.MAX_VALUE, 0), true); + p.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, Integer.MAX_VALUE, 1), true); + p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, Integer.MAX_VALUE, 1), true); + } + } + } + } + + .runTaskLater(this.plugin, 100L); + if (force) + { + p.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, Integer.MAX_VALUE, 1), true); + p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, Integer.MAX_VALUE, 0), true); + p.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 120, 1), true); + p.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 120, 0), true); + p.addPotionEffect(new PotionEffect(PotionEffectType.ABSORPTION, 120, 1), true); + ((CraftPlayer)p).removePotionEffect(PotionEffectType.INVISIBILITY); + this.firstAssassinEffects.remove(p.getName()); + this.firstAssassinEffects.put(p.getName(), Integer.valueOf(2)); + p.sendMessage(ChatColor.YELLOW + "You have been forced into " + ChatColor.RED + "Power" + ChatColor.YELLOW + " Mode" + ChatColor.GRAY.toString() + ChatColor.ITALIC + " (5 Seconds)"); + return; + } + this.firstAssassinEffects.remove(p.getName()); + this.firstAssassinEffects.put(p.getName(), Integer.valueOf(2)); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.ghost.power-mode"))); + p.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, Integer.MAX_VALUE, 1), true); + p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, Integer.MAX_VALUE, 0), true); + p.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 120, 1), true); + p.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 120, 0), true); + p.addPotionEffect(new PotionEffect(PotionEffectType.ABSORPTION, 120, 1), true); + ((CraftPlayer)p).removePotionEffect(PotionEffectType.INVISIBILITY); + } + } + + @Override +public boolean isApplicableFor(Player player) + { + PlayerInventory playerInventory = player.getInventory(); + ItemStack helmet = playerInventory.getHelmet(); + if ((helmet == null) || (helmet.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.ghost.equipment.helmet")))) { + return false; + } + ItemStack chestplate = playerInventory.getChestplate(); + if ((chestplate == null) || (chestplate.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.ghost.equipment.chestplate")))) { + return false; + } + ItemStack leggings = playerInventory.getLeggings(); + if ((leggings == null) || (leggings.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.ghost.equipment.leggings")))) { + return false; + } + ItemStack boots = playerInventory.getBoots(); + return (boots != null) && (boots.getType() == Material.matchMaterial(plugin.getConfig().getString("classes.ghost.equipment.boots"))); + } +} diff --git a/src/notifyz/hardcorefactions/classes/type/miner/MinerClass.java b/src/notifyz/hardcorefactions/classes/type/miner/MinerClass.java new file mode 100644 index 0000000..bbb9ccb --- /dev/null +++ b/src/notifyz/hardcorefactions/classes/type/miner/MinerClass.java @@ -0,0 +1,138 @@ +package notifyz.hardcorefactions.classes.type.miner; + +import java.util.concurrent.TimeUnit; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.classes.PvPClass; +import notifyz.hardcorefactions.classes.events.PvPClassEquipEvent; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; + +/** + * Represents a {@link PvPClass} used to enhance mining quality. + */ +public class MinerClass extends PvPClass implements Listener { + + // The minimum height level to obtain the Invisibility effect. + private static final int INVISIBILITY_HEIGHT_LEVEL = HardcoreFactionsPlugin.getInstance().getConfig().getInt("classes.miner.invisibility-y"); + private static final PotionEffect HEIGHT_INVISIBILITY = new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 0); + + private final HardcoreFactionsPlugin plugin; + + public MinerClass(HardcoreFactionsPlugin plugin) { + super(HardcoreFactionsPlugin.getInstance().getConfig().getString("classes.miner.name"), TimeUnit.SECONDS.toMillis(1L)); + this.plugin = plugin; + + addPassiveEffect(new PotionEffect(PotionEffectType.FAST_DIGGING, Integer.MAX_VALUE, 1)); + addPassiveEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 0)); + addPassiveEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE, Integer.MAX_VALUE, 0)); + } + + private void removeInvisibilitySafely(Player player) { + for (PotionEffect active : player.getActivePotionEffects()) { + if (active.getType().equals(PotionEffectType.INVISIBILITY) && active.getDuration() > DEFAULT_MAX_DURATION) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.miner.invisibility-removed"))); + player.removePotionEffect(active.getType()); + break; + } + } + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onPlayerDamage(EntityDamageByEntityEvent event) { + Entity entity = event.getEntity(); + if (entity instanceof Player && BukkitUtils.getFinalAttacker(event, false) != null) { + Player player = (Player) entity; + if (plugin.getPvPClassManager().hasClassEquipped(player, this)) { + removeInvisibilitySafely(player); + } + } + } + + @Override + public void onUnequip(Player player) { + super.onUnequip(player); + removeInvisibilitySafely(player); + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onPlayerMove(PlayerMoveEvent event) { + conformMinerInvisibility(event.getPlayer(), event.getFrom(), event.getTo()); + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onPlayerTeleport(PlayerTeleportEvent event) { + conformMinerInvisibility(event.getPlayer(), event.getFrom(), event.getTo()); + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onClassEquip(PvPClassEquipEvent event) { + Player player = event.getPlayer(); + if (event.getPvPClass() == this && player.getLocation().getBlockY() <= INVISIBILITY_HEIGHT_LEVEL) { + player.addPotionEffect(HEIGHT_INVISIBILITY, true); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.miner.invisibility-added"))); + } + } + + + /** + * Applies the {@link MinerClass} invisibility {@link PotionEffect} depending + * on the {@link Player}s {@link Location}. + * + * @param player the {@link Player} to apply for + * @param from the from {@link Location} + * @param to the to {@link Location} + */ + private void conformMinerInvisibility(Player player, Location from, Location to) { + int fromY = from.getBlockY(); + int toY = to.getBlockY(); + if (fromY != toY && plugin.getPvPClassManager().hasClassEquipped(player, this)) { + boolean isInvisible = player.hasPotionEffect(PotionEffectType.INVISIBILITY); + if (toY > INVISIBILITY_HEIGHT_LEVEL) { + if (fromY <= INVISIBILITY_HEIGHT_LEVEL && isInvisible) { + removeInvisibilitySafely(player); + } + } else { + if (!isInvisible) { + player.addPotionEffect(HEIGHT_INVISIBILITY, true); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.miner.invisibility-added"))); + } + } + } + } + + @Override + public boolean isApplicableFor(Player player) { + PlayerInventory playerInventory = player.getInventory(); + + ItemStack helmet = playerInventory.getHelmet(); + if (helmet == null || helmet.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.miner.equipment.helmet"))) + return false; + + ItemStack chestplate = playerInventory.getChestplate(); + if (chestplate == null || chestplate.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.miner.equipment.chestplate"))) + return false; + + ItemStack leggings = playerInventory.getLeggings(); + if (leggings == null || leggings.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.miner.equipment.leggings"))) + return false; + + ItemStack boots = playerInventory.getBoots(); + return !(boots == null || boots.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.miner.equipment.boots"))); + } +} diff --git a/src/notifyz/hardcorefactions/classes/type/rogue/RogueClass.java b/src/notifyz/hardcorefactions/classes/type/rogue/RogueClass.java new file mode 100644 index 0000000..bb55bb0 --- /dev/null +++ b/src/notifyz/hardcorefactions/classes/type/rogue/RogueClass.java @@ -0,0 +1,197 @@ +package notifyz.hardcorefactions.classes.type.rogue; + +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Damageable; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import net.minecraft.util.gnu.trove.map.TObjectLongMap; +import net.minecraft.util.gnu.trove.map.hash.TObjectLongHashMap; +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.classes.PvPClass; + +public class RogueClass extends PvPClass implements Listener { + + private final HardcoreFactionsPlugin plugin; + + private static final PotionEffect ROGUE_SPEED_EFFECT = new PotionEffect(PotionEffectType.SPEED, 160, 3); + private static final long ROGUE_SPEED_COOLDOWN_DELAY = TimeUnit.MINUTES.toMillis(HardcoreFactionsPlugin.getInstance().getConfig().getInt("classes.rogue.speed-cooldown")); + + private static final PotionEffect ROGUE_JUMP_EFFECT = new PotionEffect(PotionEffectType.JUMP, 160, 5); + private static final long ROGUE_JUMP_COOLDOWN_DELAY = TimeUnit.MINUTES.toMillis(HardcoreFactionsPlugin.getInstance().getConfig().getInt("classes.rogue.jump-cooldown")); + + public final static TObjectLongMap rogueSpeedCooldowns = new TObjectLongHashMap<>(); + public final static TObjectLongMap rogueJumpCooldowns = new TObjectLongHashMap<>(); + + public RogueClass(HardcoreFactionsPlugin plugin) { + super(HardcoreFactionsPlugin.getInstance().getConfig().getString("classes.rogue.name"), TimeUnit.SECONDS.toMillis(1L)); + + this.plugin = plugin; + addPassiveEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, Integer.MAX_VALUE, 0)); + addPassiveEffect(new PotionEffect(PotionEffectType.REGENERATION, Integer.MAX_VALUE, 0)); + addPassiveEffect(new PotionEffect(PotionEffectType.SPEED, Integer.MAX_VALUE, 2)); + addPassiveEffect(new PotionEffect(PotionEffectType.JUMP, Integer.MAX_VALUE, 1)); + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) + public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { + if (((event.getEntity() instanceof Player)) && ((event.getDamager() instanceof Player))) { + Entity entity = event.getEntity(); + Entity damager = event.getDamager(); + Player attacker = (Player) damager; + if (this.plugin.getPvPClassManager().getEquippedClass(attacker) == this) { + ItemStack stack = attacker.getItemInHand(); + if ((stack != null) && (stack.getType() == Material.GOLD_SWORD) && (stack.getEnchantments().isEmpty())) { + Player player = (Player) entity; + if (direction(attacker) == direction(player)) { + Damageable damage = player; + if (damage.getHealth() <= 0.0D) { + return; + } + if (damage.getHealth() <= 6.0D) { + damage.damage(20.0D); + } else { + damage.setHealth(damage.getHealth() - 6.0D); + } + player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.rogue.backstabbed-you").replace("%player%", attacker.getName()))); + player.playSound(player.getLocation(), Sound.ITEM_BREAK, 1.0F, 1.0F); + attacker.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.rogue.you-backstabbed").replace("%player%", player.getName()))); + attacker.setItemInHand(new ItemStack(Material.AIR, 1)); + attacker.playSound(player.getLocation(), Sound.ITEM_BREAK, 1.0F, 1.0F); + attacker.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 60, 1)); + event.setCancelled(true); + } + } + } + } + } + + @EventHandler(ignoreCancelled = false, priority = EventPriority.HIGH) + public void onSpeed(PlayerInteractEvent event) { + Action action = event.getAction(); + if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK) { + if (event.hasItem() && event.getItem().getType() == Material.SUGAR) { + if (plugin.getPvPClassManager().getEquippedClass(event.getPlayer()) != this) { + return; + } + + Player player = event.getPlayer(); + UUID uuid = player.getUniqueId(); + long timestamp = rogueSpeedCooldowns.get(uuid); + long millis = System.currentTimeMillis(); + long remaining = timestamp == rogueSpeedCooldowns.getNoEntryValue() ? -1L : timestamp - millis; + if (remaining > 0L) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.rogue.speed-cooldown").replace("%cooldown%", DurationFormatUtils.formatDurationWords(remaining, true, true)))); + } else { + ItemStack stack = player.getItemInHand(); + if (stack.getAmount() == 1) { + player.setItemInHand(new ItemStack(Material.AIR, 1)); + } else { + stack.setAmount(stack.getAmount() - 1); + } + + plugin.getEffectRestorer().setRestoreEffect(player, ROGUE_SPEED_EFFECT); + rogueSpeedCooldowns.put(event.getPlayer().getUniqueId(), System.currentTimeMillis() + ROGUE_SPEED_COOLDOWN_DELAY); + } + } + } + } + + @EventHandler(ignoreCancelled = false, priority = EventPriority.HIGH) + public void onJump(PlayerInteractEvent event) { + Action action = event.getAction(); + if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK) { + if (event.hasItem() && event.getItem().getType() == Material.FEATHER) { + if (plugin.getPvPClassManager().getEquippedClass(event.getPlayer()) != this) { + return; + } + + Player player = event.getPlayer(); + UUID uuid = player.getUniqueId(); + long timestamp = rogueJumpCooldowns.get(uuid); + long millis = System.currentTimeMillis(); + long remaining = timestamp == rogueJumpCooldowns.getNoEntryValue() ? -1L : timestamp - millis; + if (remaining > 0L) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("classes-messages.rogue.jump-cooldown").replace("%cooldown%", DurationFormatUtils.formatDurationWords(remaining, true, true)))); + } else { + ItemStack stack = player.getItemInHand(); + if (stack.getAmount() == 1) { + player.setItemInHand(new ItemStack(Material.AIR, 1)); + } else { + stack.setAmount(stack.getAmount() - 1); + } + + plugin.getEffectRestorer().setRestoreEffect(player, ROGUE_JUMP_EFFECT); + rogueJumpCooldowns.put(event.getPlayer().getUniqueId(), System.currentTimeMillis() + ROGUE_JUMP_COOLDOWN_DELAY); + } + } + } + } + + public Byte direction(Player player) { + double rotation = (player.getLocation().getYaw() - 90) % 360; + if (rotation < 0) { + rotation += 360.0; + } + if (0 <= rotation && rotation < 22.5) { + return 0xC; // S > E + } else if (22.5 <= rotation && rotation < 67.5) { + return 0xE; // SW > SE + } else if (67.5 <= rotation && rotation < 112.5) { + return 0x0; // W > E + } else if (112.5 <= rotation && rotation < 157.5) { + return 0x2; // NW > SW + } else if (157.5 <= rotation && rotation < 202.5) { + return 0x4; // N > W + } else if (202.5 <= rotation && rotation < 247.5) { + return 0x6; // NE > NW + } else if (247.5 <= rotation && rotation < 292.5) { + return 0x8; // E > N + } else if (292.5 <= rotation && rotation < 337.5) { + return 0xA; // SE > NE + } else if (337.5 <= rotation && rotation < 360.0) { + return 0xC; // S > E + } else { + return null; + } + } + + @Override + public boolean isApplicableFor(Player player) { + PlayerInventory playerInventory = player.getInventory(); + + ItemStack helmet = playerInventory.getHelmet(); + if (helmet == null || helmet.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.rogue.equipment.helmet"))) { + return false; + } + + ItemStack chestplate = playerInventory.getChestplate(); + if (chestplate == null || chestplate.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.rogue.equipment.chestplate"))) { + return false; + } + + ItemStack leggings = playerInventory.getLeggings(); + if (leggings == null || leggings.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.rogue.equipment.leggings"))) { + return false; + } + + ItemStack boots = playerInventory.getBoots(); + return !(boots == null || boots.getType() != Material.matchMaterial(plugin.getConfig().getString("classes.rogue.equipment.boots"))); + } +} diff --git a/src/notifyz/hardcorefactions/combatloggers/CombatLogEntry.java b/src/notifyz/hardcorefactions/combatloggers/CombatLogEntry.java new file mode 100644 index 0000000..60c49c7 --- /dev/null +++ b/src/notifyz/hardcorefactions/combatloggers/CombatLogEntry.java @@ -0,0 +1,15 @@ +package notifyz.hardcorefactions.combatloggers; + +import org.bukkit.scheduler.BukkitTask; + +public class CombatLogEntry +{ + public final LoggerEntity loggerEntity; + public final BukkitTask task; + + public CombatLogEntry(LoggerEntity loggerEntity, BukkitTask task) + { + this.loggerEntity = loggerEntity; + this.task = task; + } +} diff --git a/src/notifyz/hardcorefactions/combatloggers/CombatLogListener.java b/src/notifyz/hardcorefactions/combatloggers/CombatLogListener.java new file mode 100644 index 0000000..9ba7578 --- /dev/null +++ b/src/notifyz/hardcorefactions/combatloggers/CombatLogListener.java @@ -0,0 +1,176 @@ +package notifyz.hardcorefactions.combatloggers; + + +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityInteractEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.EntityEquipment; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; +import org.spigotmc.event.player.PlayerSpawnLocationEvent; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +public class CombatLogListener + implements Listener +{ + @SuppressWarnings("rawtypes") +private static final Set SAFE_DISCONNECTS = new HashSet(); + @SuppressWarnings("rawtypes") +private static final Map LOGGERS = new HashMap(); + private final HardcoreFactionsPlugin plugin; + + public CombatLogListener(HardcoreFactionsPlugin plugin) + { + this.plugin = plugin; + } + + public static void safelyDisconnect(Player player, String reason) + { + if (SAFE_DISCONNECTS.add(player.getUniqueId())) { + player.kickPlayer(reason); + } + } + + public static void removeCombatLoggers() + { + Iterator iterator = LOGGERS.values().iterator(); + while (iterator.hasNext()) + { + CombatLogEntry entry = iterator.next(); + entry.task.cancel(); + entry.loggerEntity.getBukkitEntity().remove(); + iterator.remove(); + } + SAFE_DISCONNECTS.clear(); + } + + @EventHandler(ignoreCancelled=true, priority=EventPriority.MONITOR) + public void onPlayerQuitSafe(PlayerQuitEvent event) + { + SAFE_DISCONNECTS.remove(event.getPlayer().getUniqueId()); + } + + @EventHandler(ignoreCancelled=true, priority=EventPriority.HIGH) + public void onLoggerInteract(EntityInteractEvent event) + { + Collection entries = LOGGERS.values(); + Iterator var3 = entries.iterator(); + while (var3.hasNext()) + { + CombatLogEntry entry = var3.next(); + if (entry.loggerEntity.getBukkitEntity().equals(event.getEntity())) + { + event.setCancelled(true); + break; + } + } + } + + @EventHandler(ignoreCancelled=true, priority=EventPriority.MONITOR) + public void onLoggerDeath(LoggerDeathEvent event) + { + CombatLogEntry entry = LOGGERS.remove(event.getLoggerEntity().getPlayerUUID()); + if (entry != null) { + entry.task.cancel(); + } + this.plugin.getTimerManager().getCombatTimer().clearCooldown(event.getLoggerEntity().getPlayerUUID()); + System.out.println("Logger died with combat timer on so we cleared it."); + } + + @EventHandler(ignoreCancelled=true, priority=EventPriority.HIGHEST) + public void onPlayerSpawnLocation(PlayerSpawnLocationEvent event) + { + CombatLogEntry combatLogEntry = LOGGERS.remove(event.getPlayer().getUniqueId()); + if (combatLogEntry != null) + { + CraftLivingEntity loggerEntity = combatLogEntry.loggerEntity.getBukkitEntity(); + Player player = event.getPlayer(); + event.setSpawnLocation(loggerEntity.getLocation()); + player.setFallDistance(loggerEntity.getFallDistance()); + player.setHealth(Math.min(((CraftPlayer)player).getMaxHealth(), loggerEntity.getHealth())); + + player.setRemainingAir(loggerEntity.getRemainingAir()); + loggerEntity.remove(); + combatLogEntry.task.cancel(); + } + } + + @EventHandler(ignoreCancelled=true, priority=EventPriority.NORMAL) + public void onPlayerQuit(PlayerQuitEvent event) + { + Player player = event.getPlayer(); + UUID uuid = player.getUniqueId(); + PlayerInventory inventory = player.getInventory(); + if ((player.getGameMode() != GameMode.CREATIVE) && (!player.isDead()) && (!SAFE_DISCONNECTS.contains(uuid))) + { + if ((this.plugin.getTimerManager().getInvincibilityTimer().getRemainingCooldown(uuid) > 0L)) { + return; + } + if (this.plugin.getTimerManager().teleportTimer.getNearbyEnemies(player, 64) <= 0) { + return; + } + Location location = player.getLocation(); + if (this.plugin.getFactionManager().getFactionAt(location).isSafezone()) { + return; + } + if (LOGGERS.containsKey(player.getUniqueId())) { + return; + } + World world = location.getWorld(); + LoggerEntity loggerEntity = new LoggerEntity(world, location, player); + LoggerSpawnEvent calledEvent = new LoggerSpawnEvent(loggerEntity); + Bukkit.getPluginManager().callEvent(calledEvent); + LOGGERS.put(uuid, new CombatLogEntry(loggerEntity, new LoggerRemovable(uuid, loggerEntity).runTaskLater(this.plugin, plugin.getConfiguration().getCombatlogDespawnDelayTicks()))); + CraftLivingEntity craftEntity = loggerEntity.getBukkitEntity(); + if (craftEntity != null) + { + CraftLivingEntity craftLivingEntity = craftEntity; + EntityEquipment entityEquipment = craftLivingEntity.getEquipment(); + entityEquipment.setItemInHand(inventory.getItemInHand()); + entityEquipment.setArmorContents(inventory.getArmorContents()); + craftLivingEntity.addPotionEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 999999, 1)); + } + } + } + + private static class LoggerRemovable + extends BukkitRunnable + { + private final UUID uuid; + private final LoggerEntity loggerEntity; + + public LoggerRemovable(UUID uuid, LoggerEntity loggerEntity) + { + this.uuid = uuid; + this.loggerEntity = loggerEntity; + } + + @Override + public void run() + { + if (CombatLogListener.LOGGERS.remove(this.uuid) != null) { + this.loggerEntity.dead = true; + } + } + } +} diff --git a/src/notifyz/hardcorefactions/combatloggers/CustomEntityRegistration.java b/src/notifyz/hardcorefactions/combatloggers/CustomEntityRegistration.java new file mode 100644 index 0000000..b048dae --- /dev/null +++ b/src/notifyz/hardcorefactions/combatloggers/CustomEntityRegistration.java @@ -0,0 +1,61 @@ +package notifyz.hardcorefactions.combatloggers; + +import java.lang.reflect.Field; +import java.util.Map; +import net.minecraft.server.v1_7_R4.EntityTypes; + +public class CustomEntityRegistration +{ + public static void registerCustomEntities() + { + try + { + registerCustomEntity(LoggerEntity.class, "CraftSkeleton", 51); + } + catch (Exception var1) + { + var1.printStackTrace(); + } + } + + @SuppressWarnings("rawtypes") +public static void registerCustomEntity(Class entityClass, String name, int id) + { + setFieldPrivateStaticMap("d", entityClass, name); + setFieldPrivateStaticMap("f", entityClass, Integer.valueOf(id)); + } + + public static void unregisterCustomEntities() {} + + @SuppressWarnings("rawtypes") +public static void setFieldPrivateStaticMap(String fieldName, Object key, Object value) + { + try + { + Field ex = EntityTypes.class.getDeclaredField(fieldName); + ex.setAccessible(true); + Map map = (Map)ex.get(null); + map.put(key, value); + ex.set(null, map); + } + catch (SecurityException|IllegalArgumentException|IllegalAccessException|NoSuchFieldException var5) + { + var5.printStackTrace(); + } + } + + public static void setField(String fieldName, Object key, Object value) + { + try + { + Field ex = key.getClass().getDeclaredField(fieldName); + ex.setAccessible(true); + ex.set(key, value); + ex.setAccessible(false); + } + catch (Exception var4) + { + var4.printStackTrace(); + } + } +} diff --git a/src/notifyz/hardcorefactions/combatloggers/LoggerDeathEvent.java b/src/notifyz/hardcorefactions/combatloggers/LoggerDeathEvent.java new file mode 100644 index 0000000..b7ce213 --- /dev/null +++ b/src/notifyz/hardcorefactions/combatloggers/LoggerDeathEvent.java @@ -0,0 +1,31 @@ +package notifyz.hardcorefactions.combatloggers; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class LoggerDeathEvent + extends Event +{ + private static final HandlerList handlers = new HandlerList(); + private final LoggerEntity loggerEntity; + + public LoggerDeathEvent(LoggerEntity loggerEntity) + { + this.loggerEntity = loggerEntity; + } + + public static HandlerList getHandlerList() + { + return handlers; + } + + public LoggerEntity getLoggerEntity() + { + return this.loggerEntity; + } + + public HandlerList getHandlers() + { + return handlers; + } +} diff --git a/src/notifyz/hardcorefactions/combatloggers/LoggerEntity.java b/src/notifyz/hardcorefactions/combatloggers/LoggerEntity.java new file mode 100644 index 0000000..a059a71 --- /dev/null +++ b/src/notifyz/hardcorefactions/combatloggers/LoggerEntity.java @@ -0,0 +1,189 @@ +package notifyz.hardcorefactions.combatloggers; + +import java.util.ArrayList; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_7_R4.CraftServer; +import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_7_R4.event.CraftEventFactory; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; + +import com.google.common.base.Function; + +import net.minecraft.server.v1_7_R4.DamageSource; +import net.minecraft.server.v1_7_R4.Entity; +import net.minecraft.server.v1_7_R4.EntityHuman; +import net.minecraft.server.v1_7_R4.EntityPlayer; +import net.minecraft.server.v1_7_R4.EntitySkeleton; +import net.minecraft.server.v1_7_R4.PlayerInteractManager; +import net.minecraft.server.v1_7_R4.WorldServer; +import net.minecraft.util.com.mojang.authlib.GameProfile; + +public class LoggerEntity extends EntitySkeleton +{ + @SuppressWarnings("rawtypes") + private static final Function DAMAGE_FUNCTION; + private final UUID playerUUID; + + public LoggerEntity(final World world, final Location location, final Player player) { + super(((CraftWorld)world).getHandle()); + this.lastDamager = ((CraftPlayer)player).getHandle().lastDamager; + final double x = location.getX(); + final double y = location.getY(); + final double z = location.getZ(); + final String playerName = player.getName(); + final boolean hasSpawned = ((CraftWorld)world).getHandle().addEntity(this, CreatureSpawnEvent.SpawnReason.CUSTOM); + Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "Combat Logger for [" + playerName + "] " + (hasSpawned ? (ChatColor.GREEN + "successfully spawned") : (ChatColor.RED + "failed to spawn")) + ChatColor.GOLD + " at (" + String.format("%.1f", x) + ", " + String.format("%.1f", y) + ", " + String.format("%.1f", z) + ')'); + this.playerUUID = player.getUniqueId(); + if (hasSpawned) { + this.setCustomName(playerName); + this.setCustomNameVisible(true); + this.setPositionRotation(x, y, z, location.getYaw(), location.getPitch()); + } + } + + private static PlayerNmsResult getResult(final World world, final UUID playerUUID) { + final OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(playerUUID); + if (offlinePlayer.hasPlayedBefore()) { + final WorldServer worldServer = ((CraftWorld)world).getHandle(); + final EntityPlayer entityPlayer = new EntityPlayer(((CraftServer)Bukkit.getServer()).getServer(), worldServer, new GameProfile(playerUUID, offlinePlayer.getName()), new PlayerInteractManager(worldServer)); + final CraftPlayer player = entityPlayer.getBukkitEntity(); + if (player != null) { + player.loadData(); + return new PlayerNmsResult(player, entityPlayer); + } + } + return null; + } + + public UUID getPlayerUUID() { + return this.playerUUID; + } + + @Override + public void move(final double d0, final double d1, final double d2) { + } + + @Override + public void b(final int i) { + } + + @Override + public void dropDeathLoot(final boolean flag, final int i) { + } + + @Override + public Entity findTarget() { + return null; + } + + @Override + public boolean damageEntity(final DamageSource damageSource, final float amount) { + final PlayerNmsResult nmsResult = getResult(this.world.getWorld(), this.playerUUID); + if (nmsResult == null) { + return true; + } + final EntityPlayer entityPlayer = nmsResult.entityPlayer; + if (entityPlayer != null) { + entityPlayer.setPosition(this.locX, this.locY, this.locZ); + final EntityDamageEvent event = CraftEventFactory.handleLivingEntityDamageEvent(entityPlayer, damageSource, amount, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, LoggerEntity.DAMAGE_FUNCTION, LoggerEntity.DAMAGE_FUNCTION, LoggerEntity.DAMAGE_FUNCTION, LoggerEntity.DAMAGE_FUNCTION, LoggerEntity.DAMAGE_FUNCTION, LoggerEntity.DAMAGE_FUNCTION); + if (event.isCancelled()) { + return false; + } + } + return super.damageEntity(damageSource, amount); + } + + @Override + public boolean a(final EntityHuman entityHuman) { + return false; + } + + @Override + public void h() { + super.h(); + } + + @Override + public void collide(final Entity entity) { + } + + @Override + @SuppressWarnings("rawtypes") + public void die(final DamageSource damageSource) { + final PlayerNmsResult playerNmsResult = getResult(this.world.getWorld(), this.playerUUID); + if (playerNmsResult != null) { + final Player player = playerNmsResult.player; + final PlayerInventory inventory = player.getInventory(); + final boolean keepInventory = this.world.getGameRules().getBoolean("keepInventory"); + final ArrayList drops = new ArrayList(); + if (!keepInventory) { + for (final ItemStack loggerDeathEvent : inventory.getContents()) { + if (loggerDeathEvent != null && loggerDeathEvent.getType() != Material.AIR) { + drops.add(loggerDeathEvent); + } + } + for (final ItemStack loggerDeathEvent : inventory.getArmorContents()) { + if (loggerDeathEvent != null && loggerDeathEvent.getType() != Material.AIR) { + drops.add(loggerDeathEvent); + } + } + } + String var13 = ChatColor.RED + "(Combat-Logger) " + this.combatTracker.b().c(); + final EntityPlayer var14 = playerNmsResult.entityPlayer; + var14.combatTracker = this.combatTracker; + if (Bukkit.getPlayer(var14.getName()) != null) { + Bukkit.getPlayer(var14.getUniqueID()).getInventory().clear(); + Bukkit.getPlayer(var14.getUniqueID()).kickPlayer("error"); + } + final PlayerDeathEvent var15 = CraftEventFactory.callPlayerDeathEvent(var14, drops, var13, keepInventory); + var13 = var15.getDeathMessage(); + if (var13 != null && !var13.isEmpty()) { + Bukkit.broadcastMessage(var13); + } + super.die(damageSource); + final LoggerDeathEvent var16 = new LoggerDeathEvent(this); + Bukkit.getPluginManager().callEvent(var16); + if (!var15.getKeepInventory()) { + inventory.clear(); + inventory.setArmorContents(new ItemStack[inventory.getArmorContents().length]); + } + var14.setLocation(this.locX, this.locY, this.locZ, this.yaw, this.pitch); + var14.setHealth(0.0f); + player.saveData(); + } + } + + @Override + public CraftLivingEntity getBukkitEntity() { + return (CraftLivingEntity)super.getBukkitEntity(); + } + + static { + DAMAGE_FUNCTION = (f1 -> 0.0); + } + + public static final class PlayerNmsResult + { + public final Player player; + public final EntityPlayer entityPlayer; + + public PlayerNmsResult(final Player player, final EntityPlayer entityPlayer) { + this.player = player; + this.entityPlayer = entityPlayer; + } + } +} \ No newline at end of file diff --git a/src/notifyz/hardcorefactions/combatloggers/LoggerSpawnEvent.java b/src/notifyz/hardcorefactions/combatloggers/LoggerSpawnEvent.java new file mode 100644 index 0000000..ae7d86c --- /dev/null +++ b/src/notifyz/hardcorefactions/combatloggers/LoggerSpawnEvent.java @@ -0,0 +1,31 @@ +package notifyz.hardcorefactions.combatloggers; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class LoggerSpawnEvent + extends Event +{ + private static final HandlerList handlers = new HandlerList(); + private final LoggerEntity loggerEntity; + + public LoggerSpawnEvent(LoggerEntity loggerEntity) + { + this.loggerEntity = loggerEntity; + } + + public static HandlerList getHandlerList() + { + return handlers; + } + + public LoggerEntity getLoggerEntity() + { + return this.loggerEntity; + } + + public HandlerList getHandlers() + { + return handlers; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/BackCommand.java b/src/notifyz/hardcorefactions/commands/essentials/BackCommand.java new file mode 100644 index 0000000..72a6335 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/BackCommand.java @@ -0,0 +1,79 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.Collections; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerTeleportEvent; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; +import notifyz.hardcorefactions.utilities.api.utilties.command.IConstantsAPI; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; +import notifyz.hardcorefactions.utilities.user.IUser; + +public class BackCommand extends ICommandAPI implements Listener +{ + private HardcoreFactionsPlugin plugin; + + public BackCommand(HardcoreFactionsPlugin plugin) { + super("back", "Go to a players last known location."); + this.setUsage("/(command) [playerName]"); + Bukkit.getPluginManager().registerEvents(this, this.plugin = plugin); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable by players."); + return true; + } + Player target; + if (args.length > 0 && sender.hasPermission(command.getPermission() + ".others")) { + target = BukkitUtils.playerWithNameOrUUID(args[0]); + if (target == null) { + sender.sendMessage(String.format(IConstantsAPI.PLAYER_WITH_NAME_OR_UUID_NOT_FOUND, args[0])); + return true; + } + } + else { + target = (Player)sender; + } + IUser targetUser = this.plugin.getUserManagerr().getUser(target.getUniqueId()); + Location previous = targetUser.getBackLocation(); + if (previous == null) { + sender.sendMessage(ChatColor.RED + target.getName() + " doesn't have a back location."); + return true; + } + ((Player)sender).teleport(previous); + sender.sendMessage(ChatColor.YELLOW + "Teleported to back location of " + target.getName() + '.'); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return (args.length == 1) ? null : Collections.emptyList(); + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onPlayerDeath(PlayerDeathEvent event) { + Player player = event.getEntity(); + this.plugin.getUserManagerr().getUser(player.getUniqueId()).setBackLocation(player.getLocation().clone()); + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onPlayerTeleport(PlayerTeleportEvent event) { + if (event.getCause() != PlayerTeleportEvent.TeleportCause.ENDER_PEARL) { + this.plugin.getUserManagerr().getUser(event.getPlayer().getUniqueId()).setBackLocation(event.getFrom().clone()); + } + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/BroadcastCommand.java b/src/notifyz/hardcorefactions/commands/essentials/BroadcastCommand.java new file mode 100644 index 0000000..bb19db1 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/BroadcastCommand.java @@ -0,0 +1,33 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +public class BroadcastCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + if (cmd.getName().equalsIgnoreCase("broadcast")) { + if (!sender.hasPermission("hcf.command.broadcast") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + if (args.length == 0) { + sender.sendMessage("§cUsage: /broadcast "); + return true; + } + StringBuilder str = new StringBuilder(); + for(int i = 0; i < args.length; i++) { + str.append(args[i] + " "); + } + String msg = str.toString(); + Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.alert-message").replace("%message%", msg.toString()))); + } + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/DisableChatCommand.java b/src/notifyz/hardcorefactions/commands/essentials/DisableChatCommand.java new file mode 100644 index 0000000..edf38bb --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/DisableChatCommand.java @@ -0,0 +1,51 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.concurrent.TimeUnit; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; +import notifyz.hardcorefactions.utilities.utils.JavaUtils; + +public class DisableChatCommand extends ICommandAPI { + private static final long DEFAULT_DELAY; + private final HardcoreFactionsPlugin plugin; + + public DisableChatCommand(HardcoreFactionsPlugin plugin) { + super("disablechat", "Disables the chat for non-staff."); + this.setAliases(new String[] { "mutechat", "restrictchat", "mc", "rc" }); + this.setUsage("/(command)"); + this.plugin = plugin; + } + + @Override + public boolean onCommand(final CommandSender sender, final Command command, final String label, + final String[] args) { + final long oldTicks = this.plugin.getServerHandler().getRemainingChatDisabledMillis(); + long newTicks; + if (oldTicks > 0L) { + newTicks = 0L; + } else if (args.length < 1) { + newTicks = DisableChatCommand.DEFAULT_DELAY; + } else { + newTicks = JavaUtils.parse(StringUtils.join(args, ' ', 0, args.length)); + if (newTicks == -1L) { + sender.sendMessage(ChatColor.RED + "Invalid duration, use the correct format: 10m1s"); + return true; + } + } + this.plugin.getServerHandler().setChatDisabledMillis(newTicks); + Bukkit.broadcastMessage(ChatColor.YELLOW + "Global chat is now " + ((newTicks > 0L) ? (ChatColor.RED + "disabled" + ChatColor.YELLOW + " for " + ChatColor.GOLD + DurationFormatUtils.formatDurationWords(newTicks, true, true)) : (ChatColor.GREEN + "enabled"))); + return true; + } + + static { + DEFAULT_DELAY = TimeUnit.MINUTES.toMillis(3L); + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/EnchantCommand.java b/src/notifyz/hardcorefactions/commands/essentials/EnchantCommand.java new file mode 100644 index 0000000..d31ea9a --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/EnchantCommand.java @@ -0,0 +1,147 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class EnchantCommand implements CommandExecutor { + + + public static String convertEnchantmentAliases(String args) { + String s = args; + if (args.equalsIgnoreCase("protection") || args.equalsIgnoreCase("prot")) { + s = "PROTECTION_ENVIRONMENTAL"; + } + if (args.equalsIgnoreCase("fireprotection") || args.equalsIgnoreCase("fireprot")) { + s = "PROTECTION_FIRE"; + } + if (args.equalsIgnoreCase("silktouch") || args.equalsIgnoreCase("silk")) { + s = "SILK_TOUCH"; + } + if (args.equalsIgnoreCase("featherfalling") || args.equalsIgnoreCase("ff") || args.equalsIgnoreCase("fallprotection") || args.equalsIgnoreCase("fallprot")) { + s = "PROTECTION_FALL"; + } + if (args.equalsIgnoreCase("unbreaking") || args.equalsIgnoreCase("dura")) { + s = "DURABILITY"; + } + if (args.equalsIgnoreCase("blastprotection") || args.equalsIgnoreCase("blastprot")) { + s = "PROTECTION_EXPLOSIONS"; + } + if (args.equalsIgnoreCase("fortune") || args.equalsIgnoreCase("fort")) { + s = "LOOT_BONUS_BLOCKS"; + } + if (args.equalsIgnoreCase("efficiency") || args.equalsIgnoreCase("eff")) { + s = "DIG_SPEED"; + } + if (args.equalsIgnoreCase("projectileprotection") || args.equalsIgnoreCase("projectileprot") || args.equalsIgnoreCase("projprot") || args.equalsIgnoreCase("proj")) { + s = "PROTECTION_PROJECTILE"; + } + if (args.equalsIgnoreCase("sharpness") || args.equalsIgnoreCase("sharp")) { + s = "DAMAGE_ALL"; + } + if (args.equalsIgnoreCase("power")) { + s = "ARROW_DAMAGE"; + } + if (args.equalsIgnoreCase("smite")) { + s = "DAMAGE_UNDEAD"; + } + if (args.equalsIgnoreCase("punch")) { + s = "ARROW_KNOCKBACK"; + } + if (args.equalsIgnoreCase("baneofarthropods") || args.equalsIgnoreCase("arthropods") || args.equalsIgnoreCase("bane")) { + s = "DAMAGE_ARTHROPODS"; + } + if (args.equalsIgnoreCase("flame")) { + s = "ARROW_FIRE"; + } + if (args.equalsIgnoreCase("kb")) { + s = "KNOCKBACK"; + } + if (args.equalsIgnoreCase("infinity") || args.equalsIgnoreCase("infinite")) { + s = "ARROW_INFINITE"; + } + if (args.equalsIgnoreCase("fireaspect") || args.equalsIgnoreCase("fire") || args.equalsIgnoreCase("aspect")) { + s = "FIRE_ASPECT"; + } + if (args.equalsIgnoreCase("looting") || args.equalsIgnoreCase("loot")) { + s = "LOOT_BONUS_MOBS"; + } + int n = 0; + Enchantment[] enchants = Enchantment.values(); + for (Enchantment enchant : enchants) { + if (s.equalsIgnoreCase(enchant.getName())) { + n++; + } + } + if (n == 0) { + s = "Invalid"; + } + return s.toUpperCase(); + } + + public boolean isInt(String s) { + try{ + Integer.parseInt(s); + return true; + } catch(NumberFormatException e) { + return false; + } + } + + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + if (cmd.getName().equalsIgnoreCase("enchant")) { + if (!sender.hasPermission("hcf.command.enchant") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + if (args.length == 0 || args.length == 1) { + sender.sendMessage("§c/enchant [enchantment] [level]"); + return true; + } + Player p = (Player) sender; + + ItemStack i = p.getItemInHand(); + String enchantment = convertEnchantmentAliases(args[0]); + if (enchantment.equalsIgnoreCase("Invalid")) { + sender.sendMessage("§cInvalid enchantment ID."); + return true; + } + if (i.getType() == Material.AIR) { + sender.sendMessage("§cYou must have an item in your hand."); + return true; + } + if (!isInt(args[1])) { + sender.sendMessage("§cLevel must be an integer."); + return true; + } + int level = Integer.parseInt(args[1]); + if (level < 0) { + sender.sendMessage("§cLevel cannot be negative of less than 0."); + return true; + } + if (level == 0) { + if (!i.containsEnchantment(Enchantment.getByName(enchantment))) { + sender.sendMessage("§eThis item doesn't contain the enchantment §c" + args[0] + "§e."); + return true; + } + i.removeEnchantment(Enchantment.getByName(enchantment)); + sender.sendMessage("§eYou have removed the enchantment §c" + args[0] + " §efrom the item in your hand."); + }else{ + i.addUnsafeEnchantment(Enchantment.getByName(enchantment), level); + sender.sendMessage("§eYou have binded §c" + args[0] + " §elevel §c" + level + " §eto the item in your hand."); + } + } + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/FeedCommand.java b/src/notifyz/hardcorefactions/commands/essentials/FeedCommand.java new file mode 100644 index 0000000..9df985d --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/FeedCommand.java @@ -0,0 +1,50 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +public class FeedCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + if (cmd.getName().equalsIgnoreCase("feed")) { + if (!sender.hasPermission("hcf.command.feed") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + if (args.length == 0) { + if (!(sender instanceof Player)) { + sender.sendMessage("§cNo Console"); + return true; + } + Player p = (Player) sender; + p.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.feed-message"))); + p.setFoodLevel(20); + p.setSaturation(10); + return true; + } + if (args.length > 1) { + sender.sendMessage("§c/feed "); + return true; + } + Player t = Bukkit.getPlayer(args[0]); + if (t == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline"); + return true; + } + sender.sendMessage("§c" + t.getName() + "'s §eappetite has been repleted."); + t.sendMessage("§eYour appetite has been repleted by §c" + sender.getName() + "§e."); + t.setFoodLevel(20); + t.setSaturation(10); + return true; + } + return true; + } + +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/FlyCommand.java b/src/notifyz/hardcorefactions/commands/essentials/FlyCommand.java new file mode 100644 index 0000000..d93f1dd --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/FlyCommand.java @@ -0,0 +1,65 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +public class FlyCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + if (cmd.getName().equalsIgnoreCase("fly")) { + if (!sender.hasPermission("hcf.command.fly") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + + if (args.length == 0) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + Player p = (Player) sender; + if (!p.getAllowFlight()) { + p.setAllowFlight(true); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.flight-enabled"))); + return true; + } + if (p.getAllowFlight()) { + p.setAllowFlight(false); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.flight-disabled"))); + return true; + } + } + + if (args.length == 1) { + Player t = Bukkit.getPlayer(args[0]); + if (t == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline"); + return true; + } + if (!t.getAllowFlight()) { + t.setAllowFlight(true); + sender.sendMessage("§c" + t.getName() + " §enow has flight set to §cenabled§e."); + t.sendMessage("§eYou now have flight §cenabled§e."); + return true; + } + if (t.getAllowFlight()) { + t.setAllowFlight(false); + sender.sendMessage("§c" + t.getName() + " §enow has flight set to §cdisabled§e."); + t.sendMessage("§eYou now have flight §cdisabled§e."); + return true; + } + return true; + } + + sender.sendMessage("§cUsage: /fly [player]"); + } + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/FreezeAllCommand.java b/src/notifyz/hardcorefactions/commands/essentials/FreezeAllCommand.java new file mode 100644 index 0000000..706673e --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/FreezeAllCommand.java @@ -0,0 +1,36 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +public class FreezeAllCommand implements CommandExecutor { + + private final HardcoreFactionsPlugin plugin; + + public FreezeAllCommand(HardcoreFactionsPlugin plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + + if (args.length > 0) { + sender.sendMessage(ChatColor.RED + "Usage: /freezeall"); + return true; + } + + if (plugin.getFreezeAllListener().isServerFrozen()) { + plugin.getFreezeAllListener().setServerFreeze(false); + sender.sendMessage(ChatColor.GREEN + "Server is no longer frozen."); + return true; + } else { + plugin.getFreezeAllListener().setServerFreeze(true); + sender.sendMessage(ChatColor.RED + "Server is now frozen."); + return true; + } + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/FreezeCommand.java b/src/notifyz/hardcorefactions/commands/essentials/FreezeCommand.java new file mode 100644 index 0000000..5979a8c --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/FreezeCommand.java @@ -0,0 +1,67 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.Collections; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.chat.Color; +import notifyz.hardcorefactions.utilities.utils.Utils; + +public class FreezeCommand implements CommandExecutor, TabCompleter { + + private final HardcoreFactionsPlugin staffMode = HardcoreFactionsPlugin.getPlugin(); + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (args.length == 0 || args.length > 1) { + sender.sendMessage(Color.translate("&cUsage: /" + label + " ")); + } else { + Player target = Bukkit.getServer().getPlayerExact(args[0]); + if (target == null) { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.freeze-player-not-found").replace("%target%", args[0]))); + } else { + if (target.equals(sender)) { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.freeze-no-yourself"))); + } else { + if (sender instanceof Player) { + if (target.hasPermission("hcf.command.freeze") || target.isOp()) { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.freeze-no-staffmember"))); + } else { + if (staffMode.getFreezeListener().isFrozen(target)) { + staffMode.getFreezeListener().setFreeze(sender, target, false); + } else { + Bukkit.dispatchCommand(sender, "msg " + args[0]+ " You have been frozen. Please, join our teamspeak, " + Utils.TEAMSPEAK + ". If you logout it'll result in a permanent ban due to your refusing to screenshare."); + staffMode.getFreezeListener().setFreeze(sender, target, true); + } + } + } else { + if (staffMode.getFreezeListener().isFrozen(target)) { + staffMode.getFreezeListener().setFreeze(sender, target, false); + } else { + Bukkit.dispatchCommand(sender, "msg " + args[0] + " You have been frozen. Please, join our teamspeak, " + Utils.TEAMSPEAK + ". If you logout it'll result in a permanent ban due to your refusing to screenshare."); + staffMode.getFreezeListener().setFreeze(sender, target, true); + } + } + } + } + } + return true; + } + + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + if (args.length > 1) { + return Collections.emptyList(); + } + return null; + } +} \ No newline at end of file diff --git a/src/notifyz/hardcorefactions/commands/essentials/GamemodeCommand.java b/src/notifyz/hardcorefactions/commands/essentials/GamemodeCommand.java new file mode 100644 index 0000000..e4b10ee --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/GamemodeCommand.java @@ -0,0 +1,188 @@ +package notifyz.hardcorefactions.commands.essentials; + + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class GamemodeCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + if (cmd.getName().equalsIgnoreCase("gamemode")) { + if (!sender.hasPermission("hcf.command.gamemode") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + + if (args.length != 0) { + if (args[0].equalsIgnoreCase("survival") || args[0].equalsIgnoreCase("s") || args[0].equalsIgnoreCase("0")) { + if (args.length == 1) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + Player p = (Player) sender; + p.setGameMode(GameMode.SURVIVAL); + sender.sendMessage("§eYou have set your gamemode to §cSurvival§e."); + return true; + } + if (args.length == 2) { + Player t = Bukkit.getPlayer(args[1]); + if (t == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline"); + return true; + } + t.setGameMode(GameMode.SURVIVAL); + sender.sendMessage("§eYou have set the gamemode of §c" + t.getName() + " §eto §cSurvival§e."); + return true; + } + } + + if (args[0].equalsIgnoreCase("creative") || args[0].equalsIgnoreCase("c") || args[0].equalsIgnoreCase("1")) { + if (args.length == 1) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + Player p = (Player) sender; + p.setGameMode(GameMode.CREATIVE); + sender.sendMessage("§eYou have set your gamemode to §cCreative§e."); + return true; + } + if (args.length == 2) { + Player t = Bukkit.getPlayer(args[1]); + if (t == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline"); + return true; + } + t.setGameMode(GameMode.CREATIVE); + sender.sendMessage("§eYou have set the gamemode of §c" + t.getName() + " §eto §cCreative§e."); + return true; + } + } + + if (args[0].equalsIgnoreCase("adventure") || args[0].equalsIgnoreCase("a") || args[0].equalsIgnoreCase("2")) { + if (args.length == 1) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + Player p = (Player) sender; + p.setGameMode(GameMode.ADVENTURE); + sender.sendMessage("§eYou have set your gamemode to §cAdventure§e."); + return true; + } + if (args.length == 2) { + Player t = Bukkit.getPlayer(args[1]); + if (t == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline"); + return true; + } + t.setGameMode(GameMode.ADVENTURE); + sender.sendMessage("§eYou have set the gamemode of §c" + t.getName() + " §eto §cAdventure§e."); + return true; + } + } + } + + sender.sendMessage("§c/gamemode "); + } + + if (cmd.getName().equalsIgnoreCase("gamemodes")) { + if (!sender.hasPermission("hcf.command.gamemode") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + + if (args.length == 0) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + Player p = (Player) sender; + p.setGameMode(GameMode.SURVIVAL); + sender.sendMessage("§eYou have set your gamemode to §cSurvival§e."); + return true; + } + + if (args.length == 1) { + Player t = Bukkit.getPlayer(args[0]); + if (t == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline"); + return true; + } + t.setGameMode(GameMode.SURVIVAL); + sender.sendMessage("§eYou have set the gamemode of §c" + t.getName() + " §eto §cSurvival§e."); + return true; + } + + sender.sendMessage("§c/gms "); + } + + if (cmd.getName().equalsIgnoreCase("gamemodec")) { + if (!sender.hasPermission("hcf.command.gamemode") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + + if (args.length == 0) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + Player p = (Player) sender; + p.setGameMode(GameMode.CREATIVE); + sender.sendMessage("§eYou have set your gamemode to §cCreative§e."); + return true; + } + if (args.length == 1) { + Player t = Bukkit.getPlayer(args[0]); + if (t == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline"); + return true; + } + t.setGameMode(GameMode.CREATIVE); + sender.sendMessage("§eYou have set the gamemode of §c" + t.getName() + " §eto §cCreative§e."); + return true; + } + + sender.sendMessage("§c/gmc "); + } + + if (cmd.getName().equalsIgnoreCase("gamemodea")) { + if (!sender.hasPermission("hcf.command.gamemode") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + + if (args.length == 0) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + Player p = (Player) sender; + p.setGameMode(GameMode.ADVENTURE); + sender.sendMessage("§eYou have set your gamemode to §cAdventure§e."); + return true; + } + if (args.length == 1) { + Player t = Bukkit.getPlayer(args[0]); + if (t == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline"); + return true; + } + t.setGameMode(GameMode.ADVENTURE); + sender.sendMessage("§eYou have set the gamemode of §c" + t.getName() + " §eto §cAdventure§e."); + return true; + } + + sender.sendMessage("§c/gma "); + } + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/GiveCommand.java b/src/notifyz/hardcorefactions/commands/essentials/GiveCommand.java new file mode 100644 index 0000000..20d5733 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/GiveCommand.java @@ -0,0 +1,84 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import notifyz.hardcorefactions.utilities.api.IPluginAPI; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; + +public class GiveCommand extends ICommandAPI { + public GiveCommand() { + super("give", "Spawns an item."); + this.setAliases(new String[] { "i", "get", "item" }); + this.setUsage("/(command) [quantity]"); + } + + @Override + public boolean onCommand(final CommandSender sender, final Command command, final String label, + final String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable for players."); + return true; + } + final Player p = (Player) sender; + if (args.length == 0) { + p.sendMessage(ChatColor.RED + this.getUsage()); + return true; + } + if (IPluginAPI.getPlugin().getItemDb().getItem(args[0]) == null) { + sender.sendMessage(ChatColor.GOLD + "Item named or with ID '" + ChatColor.RESET + args[0] + ChatColor.GOLD + + "' not found."); + return true; + } + if (args.length == 1) { + if (!p.getInventory().addItem(new ItemStack[] { IPluginAPI.getPlugin().getItemDb().getItem(args[0], + IPluginAPI.getPlugin().getItemDb().getItem(args[0]).getMaxStackSize()) }).isEmpty()) { + p.sendMessage(ChatColor.RED + "Your inventory is full."); + return true; + } + for (final Player on : Bukkit.getOnlinePlayers()) { + if (on.hasPermission("base.command.give")) { + if (on != p) { + on.sendMessage(ChatColor.GRAY + "[" + ChatColor.GOLD + p.getName() + ChatColor.YELLOW + + " has given himself " + ChatColor.GRAY + + IPluginAPI.getPlugin().getItemDb().getItem(args[0]).getMaxStackSize() + ", " + + IPluginAPI.getPlugin().getItemDb() + .getName(IPluginAPI.getPlugin().getItemDb().getItem(args[0])) + + "]"); + } else { + on.sendMessage(ChatColor.GOLD + "You gave yourself " + + IPluginAPI.getPlugin().getItemDb().getItem(args[0]).getMaxStackSize() + ", " + + IPluginAPI.getPlugin().getItemDb() + .getName(IPluginAPI.getPlugin().getItemDb().getItem(args[0]))); + } + } + } + } + if (args.length == 2) { + if (!p.getInventory().addItem( + new ItemStack[] { IPluginAPI.getPlugin().getItemDb().getItem(args[0], Integer.parseInt(args[1])) }) + .isEmpty()) { + p.sendMessage(ChatColor.RED + "Your inventory is full."); + return true; + } + for (final Player on : Bukkit.getOnlinePlayers()) { + if (on.hasPermission("base.command.give")) { + if (on != p) { + on.sendMessage(ChatColor.GRAY + "[" + ChatColor.GOLD + p.getName() + ChatColor.YELLOW + + " has given himself" + ChatColor.GRAY + " " + args[1] + ", " + IPluginAPI.getPlugin() + .getItemDb().getName(IPluginAPI.getPlugin().getItemDb().getItem(args[0])) + + " ]"); + } else { + on.sendMessage(ChatColor.GOLD + "You gave yourself " + args[1] + ", " + IPluginAPI.getPlugin() + .getItemDb().getName(IPluginAPI.getPlugin().getItemDb().getItem(args[0]))); + } + } + } + } + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/GiveawayCommand.java b/src/notifyz/hardcorefactions/commands/essentials/GiveawayCommand.java new file mode 100644 index 0000000..bed366c --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/GiveawayCommand.java @@ -0,0 +1,89 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.IllegalFormatException; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; + +import notifyz.hardcorefactions.utilities.utils.RandomUtils; +import notifyz.hardcorefactions.utilities.utils.Utils; + +public class GiveawayCommand implements CommandExecutor, Listener { + public static boolean giveawayActive = false; + public static int giveawayNumber = 0; + + public static void endGiveaway() { + giveawayActive = false; + giveawayNumber = 0; + } + + public static void endGiveaway(Player winner) { + if (winner.getType() + "giveawayNumber" != null) + Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "disablechat"); + Bukkit.broadcastMessage("§8[§4§l" + Utils.SERVER_NAME + "§8] §4» §cThe giveaway has been §cended§c. The winner is §4§l" + winner.getName() + "§c who guessed the correct number, §c" + giveawayNumber + "§c."); + giveawayActive = false; + giveawayNumber = 0; + } + + @EventHandler + public void playerWinGiveaway(AsyncPlayerChatEvent e) { + if (giveawayActive) { + try { + //int no = Integer.parseInt(e.getMessage()); + if (e.getMessage().contains(giveawayNumber + "")) { + endGiveaway(e.getPlayer()); + } + } catch (IllegalFormatException ee) { + } + } + } + + @Override + public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) { + + if (s.isOp()) { + if (args.length == 0) { + s.sendMessage("§cTo start the giveaway use /giveaway start (maxNumber)."); + s.sendMessage("§cTo end the giveaway use /giveaway end."); + } else if (args.length == 1) { + if (args[0].equalsIgnoreCase("end") || args[0].equalsIgnoreCase("stop") + || args[0].equalsIgnoreCase("cancel")) { + if (giveawayActive) { + giveawayActive = false; + Bukkit.broadcastMessage("§8[§4§l" + Utils.SERVER_NAME + "§8] §4» §cThe giveaway has been §ccancelled§c. The correct number was §c" + giveawayNumber + "§c."); + } else { + s.sendMessage("§cThere is no active giveaway."); + } + } else { + s.sendMessage("§cTo start the giveaway use /giveaway start (maxNumber)."); + s.sendMessage("§cTo end the giveaway use /giveaway end."); + } + } else if (args.length == 2) { + if (args[0].equalsIgnoreCase("start")) { + try { + int no = Integer.parseInt(args[1]); + giveawayActive = true; + RandomUtils utils = new RandomUtils(); + giveawayNumber = utils.getRandomNumber(1, no); + s.sendMessage("§aThe winning number is " + giveawayNumber + "!"); + Bukkit.broadcastMessage("§8[§4§l" + Utils.SERVER_NAME + "§8] §4» §cA giveaway has started. Type a number in chat between 1 and " + + no + " to enter!"); + } catch (IllegalFormatException e) { + s.sendMessage("§cYou did not enter a valid integer. (0-" + Integer.MAX_VALUE + ")"); + } + } + } + } else { + s.sendMessage("§cYou do not have permission."); + } + + return true; + } + +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/GodCommand.java b/src/notifyz/hardcorefactions/commands/essentials/GodCommand.java new file mode 100644 index 0000000..0d47669 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/GodCommand.java @@ -0,0 +1,64 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.ArrayList; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class GodCommand implements CommandExecutor { + + public static ArrayList god = new ArrayList(); + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + + if (cmd.getName().equalsIgnoreCase("god")) { + if (!sender.hasPermission("hcf.command.god") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + if (args.length == 0) { + if (!god.contains(sender.getName())) { + god.add(sender.getName()); + sender.sendMessage("§eYou have §cenabled §egod mode."); + }else{ + god.remove(sender.getName()); + sender.sendMessage("§eYou have §cdisabled §egod mode."); + } + return true; + } + + if (args.length == 1) { + if (!sender.hasPermission("hcf.command.god.others") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + Player t = Bukkit.getPlayer(args[0]); + if (t == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline"); + return true; + } + if (!god.contains(t.getName())) { + god.add(t.getName()); + t.sendMessage("§eGod mode §cenabled§e by §c" + sender.getName() + "§e!"); + sender.sendMessage("§eGod mode §cenabled §efor §c" + t.getName() + "§e."); + }else{ + god.remove(t.getName()); + t.sendMessage("§eGod mode §cdisabled§e by §c" + sender.getName() + "§e!"); + sender.sendMessage("§eGod mode §cdisabled §efor §c" + t.getName() + "§e."); + } + return true; + } + sender.sendMessage("§cUsage: /god [player]"); + } + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/GuiFreezeCommand.java b/src/notifyz/hardcorefactions/commands/essentials/GuiFreezeCommand.java new file mode 100644 index 0000000..43b8277 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/GuiFreezeCommand.java @@ -0,0 +1,114 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; +import notifyz.hardcorefactions.utilities.chat.Color; +import notifyz.hardcorefactions.utilities.utils.Utils; + +public class GuiFreezeCommand implements CommandExecutor, Listener { + private HardcoreFactionsPlugin plugin; + + public GuiFreezeCommand(HardcoreFactionsPlugin plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String[] args) { + if (!sender.hasPermission("hcf.command.guifreeze")) { + sender.sendMessage(ChatColor.RED + "You do not have permission to execute this command."); + return true; + } + if (args.length != 1) { + return false; + } + Player target = this.plugin.getServer().getPlayer(args[0]); + if (target == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline."); + return true; + } + if(target == sender) { + sender.sendMessage(ChatColor.RED + "You cannot freeze yourself."); + return true; + } + if (this.plugin.getFrozenManager().isFrozen(target.getUniqueId())) { + this.plugin.getFrozenManager().unfreezeUUID(target.getUniqueId()); + sender.sendMessage(ChatColor.GREEN + "You unfroze " + target.getName()); + target.sendMessage(ChatColor.GREEN + "You have been unfrozen by a staff member."); + target.closeInventory(); + return true; + } + this.plugin.getFrozenManager().freezeUUID(target.getUniqueId()); + sender.sendMessage(ChatColor.GREEN + "You froze " + target.getName()); + target.sendMessage(ChatColor.GRAY + BukkitUtils.STRAIGHT_LINE_DEFAULT); + target.sendMessage(""); + target.sendMessage(Color.translate("&eYou have been&4&l Frozen&e.")); + target.sendMessage(Color.translate(" &eYou have 3 minutes to join teamspeak.")); + target.sendMessage(Color.translate(" &eTeamSpeak: &4&l" + Utils.TEAMSPEAK)); + target.sendMessage(""); + target.sendMessage(Color.translate("&eIf you log out you will be&4&l BANNED&e.")); + target.sendMessage(""); + target.sendMessage(ChatColor.GRAY + BukkitUtils.STRAIGHT_LINE_DEFAULT); + target.openInventory(this.plugin.getInventoryManager().getFrozenInv()); + return true; + } + + @EventHandler + public void onEntityDamageByEntity(EntityDamageByEntityEvent e) { + if (e.getEntity() instanceof Player && e.getDamager() instanceof Player) { + Player playerDamaged = (Player)e.getEntity(); + Player playerDamager = (Player)e.getDamager(); + if (this.plugin.getFrozenManager().isFrozen(playerDamaged.getUniqueId()) || this.plugin.getFrozenManager().isFrozen(playerDamager.getUniqueId())) { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + if (event.getClickedInventory() != null) { + Inventory inv = event.getInventory(); + if ((inv.getName() != null) && (inv.getName().contains(ChatColor.DARK_RED + ChatColor.BOLD.toString() + "Frozen!"))) { + event.setCancelled(true); + if ((event.getCurrentItem() == null) && (event.getCurrentItem().getType() == Material.AIR)) { + event.setCancelled(true); + return; + } + ItemStack item = event.getCurrentItem(); + switch (item.getType()) { + case BOOK_AND_QUILL: + break; + default: + break; + } + } + } + } + + @EventHandler + public void onInvClose(InventoryCloseEvent e) { + Player player = (Player)e.getPlayer(); + if (this.plugin.getFrozenManager().isFrozen(player.getUniqueId())) { + new BukkitRunnable() { + @Override + public void run() { + player.openInventory(HardcoreFactionsPlugin.getPlugin().getInventoryManager().getFrozenInv()); + } + }.runTaskLater(this.plugin, 1L); + } + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/HatCommand.java b/src/notifyz/hardcorefactions/commands/essentials/HatCommand.java new file mode 100644 index 0000000..200dce5 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/HatCommand.java @@ -0,0 +1,54 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; + +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; + +public class HatCommand extends ICommandAPI { + public HatCommand() { + super("hat", "Wear something on your head."); + this.setUsage("/(command)"); + } + + @Override + public boolean onCommand(final CommandSender sender, final Command command, final String label, + final String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable by players."); + return true; + } + final Player player = (Player) sender; + final ItemStack stack = player.getItemInHand(); + if (stack == null || stack.getType() == Material.AIR) { + sender.sendMessage(ChatColor.RED + "You are not holding anything."); + return true; + } + if (stack.getType().getMaxDurability() != 0) { + sender.sendMessage(ChatColor.RED + "The item you are holding is not suitable to wear for a hat."); + return true; + } + final PlayerInventory inventory = player.getInventory(); + ItemStack helmet = inventory.getHelmet(); + if (helmet != null && helmet.getType() != Material.AIR) { + sender.sendMessage(ChatColor.RED + "You are already wearing something as your hat."); + return true; + } + int amount = stack.getAmount(); + if (amount > 1) { + --amount; + stack.setAmount(amount); + } else { + player.setItemInHand(new ItemStack(Material.AIR, 1)); + } + helmet = stack.clone(); + helmet.setAmount(1); + inventory.setHelmet(helmet); + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/HealCommand.java b/src/notifyz/hardcorefactions/commands/essentials/HealCommand.java new file mode 100644 index 0000000..bee201c --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/HealCommand.java @@ -0,0 +1,53 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class HealCommand implements CommandExecutor { + + @Override + @SuppressWarnings("deprecation") + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + if (cmd.getName().equalsIgnoreCase("heal")) { + if (!sender.hasPermission("hcf.command.heal") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + if (args.length == 0) { + if (!(sender instanceof Player)) { + sender.sendMessage("§cNo Console"); + return true; + } + Player p = (Player) sender; + p.sendMessage("§eYou have been §ccured §eof any diseases."); + p.setHealth(20); + p.setFireTicks(0); + p.setFoodLevel(20); + p.setSaturation(10); + return true; + } + if (args.length > 1) { + sender.sendMessage("§c/heal "); + return true; + } + Player t = Bukkit.getPlayer(args[0]); + if (t == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline"); + return true; + } + sender.sendMessage("§c" + t.getName() + " §ehas been cured of any diseases."); + t.sendMessage("§eYou have been §ccured §eof any diseases thanks to §c" + sender.getName() + "§e."); + t.setHealth(20); + t.setFireTicks(0); + t.setFoodLevel(20); + t.setSaturation(10); + return true; + } + return true; + } + +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/HideStaffCommand.java b/src/notifyz/hardcorefactions/commands/essentials/HideStaffCommand.java new file mode 100644 index 0000000..ba7024b --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/HideStaffCommand.java @@ -0,0 +1,41 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.listeners.essentials.HideStaffListener; + +public class HideStaffCommand implements CommandExecutor +{ + + @Override + public boolean onCommand(CommandSender player, Command cmd, String label, String[] args) { + Player sender = (Player)player; + HideStaffListener.getStaff(); + if (!(player instanceof Player)) { + player.sendMessage(ChatColor.RED + "You must be a player to use this commad."); + } + else if (!player.hasPermission("hcf.command.hidestaff")) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.no-permission"))); + } + else if (HideStaffListener.showStaffEnabled(sender)) { + HideStaffListener.showStaff.put(sender, false); + for (int i = 0; i < HideStaffListener.staff.size(); ++i) { + sender.hidePlayer(HideStaffListener.staff.get(i)); + } + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.hidestaff-hide"))); + } + else { + HideStaffListener.showStaff.put(sender, true); + for (int i = 0; i < HideStaffListener.staff.size(); ++i) { + sender.showPlayer(HideStaffListener.staff.get(i)); + } + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.hidestaff-show"))); + } + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/IgnoreCommand.java b/src/notifyz/hardcorefactions/commands/essentials/IgnoreCommand.java new file mode 100644 index 0000000..3fef14f --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/IgnoreCommand.java @@ -0,0 +1,220 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandArgument; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandWrapper; +import notifyz.hardcorefactions.utilities.api.utilties.command.IConstantsAPI; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; +import notifyz.hardcorefactions.utilities.user.IUser; +import notifyz.hardcorefactions.utilities.utils.StaffPriority; + +public class IgnoreCommand extends ICommandAPI { + private final ICommandWrapper handler; + + public IgnoreCommand(HardcoreFactionsPlugin plugin) { + super("ignore", "Ignores a player from messages."); + this.setUsage("/(command) [playerName]"); + ArrayList arguments = new ArrayList<>(4); + arguments.add(new IgnoreClearArgument(plugin)); + arguments.add(new IgnoreListArgument(plugin)); + arguments.add(new IgnoreAddArgument(plugin)); + arguments.add(new IgnoreDeleteArgument(plugin)); + Collections.sort(arguments, new ICommandWrapper.ArgumentComparator()); + this.handler = new ICommandWrapper(arguments); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + return this.handler.onCommand(sender, command, label, args); + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return this.handler.onTabComplete(sender, command, label, args); + } + + private static class IgnoreDeleteArgument extends ICommandArgument { + private final HardcoreFactionsPlugin plugin; + + public IgnoreDeleteArgument(HardcoreFactionsPlugin plugin) { + super("delete", "Un-ignores a player."); + this.plugin = plugin; + this.aliases = new String[] { "del", "remove", "unset" }; + } + + @Override + public String getUsage(String label) { + return "" + '/' + label + ' ' + this.getName() + " "; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable by players."); + return true; + } + if (args.length < 2) { + sender.sendMessage(ChatColor.RED + "Usage: " + this.getUsage(label)); + return true; + } + sender.sendMessage(ChatColor.YELLOW + "You are " + + (this.plugin.getUserManagerr().getUser(((Player) sender).getUniqueId()).getIgnoring().remove( + args[1]) ? new StringBuilder().append(ChatColor.RED).append("not").toString() + : new StringBuilder().append(ChatColor.GREEN).append("no longer") + .toString()) + + ChatColor.YELLOW + " ignoring " + args[1] + '.'); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return null; + } + } + + private static class IgnoreListArgument extends ICommandArgument { + private final HardcoreFactionsPlugin plugin; + + public IgnoreListArgument(HardcoreFactionsPlugin plugin) { + super("list", "Lists all ignored players."); + this.plugin = plugin; + } + + @Override + public String getUsage(String label) { + return "" + '/' + label + ' ' + this.getName(); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable by players."); + return true; + } + Set ignoring = this.plugin.getUserManagerr().getUser(((Player) sender).getUniqueId()).getIgnoring(); + if (ignoring.isEmpty()) { + sender.sendMessage(ChatColor.YELLOW + "You are not ignoring anyone."); + return true; + } + sender.sendMessage(ChatColor.YELLOW + "You are ignoring (" + ignoring.size() + ") members: " + '[' + + ChatColor.WHITE + StringUtils.join(ignoring, ", ") + ChatColor.YELLOW + + ']'); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return Collections.emptyList(); + } + } + + private static class IgnoreClearArgument extends ICommandArgument { + private final HardcoreFactionsPlugin plugin; + + public IgnoreClearArgument(HardcoreFactionsPlugin plugin) { + super("clear", "Clears all ignored players."); + this.plugin = plugin; + } + + @Override + public String getUsage(String label) { + return "" + '/' + label + ' ' + this.getName(); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable by players."); + return true; + } + Set ignoring = this.plugin.getUserManagerr().getUser(((Player) sender).getUniqueId()).getIgnoring(); + if (ignoring.isEmpty()) { + sender.sendMessage(ChatColor.RED + "Your ignore list is already empty."); + return true; + } + ignoring.clear(); + sender.sendMessage(ChatColor.YELLOW + "Your ignore list has been cleared."); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return Collections.emptyList(); + } + } + + private static class IgnoreAddArgument extends ICommandArgument { + private final HardcoreFactionsPlugin plugin; + + public IgnoreAddArgument(HardcoreFactionsPlugin plugin) { + super("add", "Starts ignoring a player."); + this.plugin = plugin; + } + + @Override + public String getUsage(String label) { + return "" + '/' + label + ' ' + this.getName() + " "; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable by players."); + return true; + } + if (args.length < 2) { + sender.sendMessage(this.getUsage(label)); + return true; + } + Player player = (Player) sender; + UUID uuid = player.getUniqueId(); + IUser baseUser = this.plugin.getUserManagerr().getUser(uuid); + Set ignoring = baseUser.getIgnoring(); + Player target = BukkitUtils.playerWithNameOrUUID(args[1]); + if (target == null || !ICommandAPI.canSee(sender, target)) { + sender.sendMessage(String.format(IConstantsAPI.PLAYER_WITH_NAME_OR_UUID_NOT_FOUND, args[1])); + return true; + } + if (sender.equals(target)) { + sender.sendMessage(ChatColor.RED + "You may not ignore yourself."); + return true; + } + StaffPriority selfPriority = StaffPriority.of(player); + if (StaffPriority.of(target).isMoreThan(selfPriority)) { + sender.sendMessage(ChatColor.RED + "You cannot ignore this player."); + return true; + } + if (target.hasPermission("hcf.command.ignore.exempt")) { + sender.sendMessage(ChatColor.RED + "You do not have permission to ignore this player."); + return true; + } + String targetName = target.getName(); + if (ignoring.add(target.getName())) { + sender.sendMessage(ChatColor.GOLD + "You are now ignoring " + targetName + '.'); + } else { + sender.sendMessage( + ChatColor.RED + "You are already ignoring someone named " + targetName + '.'); + } + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return args.length == 2 ? null : Collections.emptyList(); + } + } + +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/InvseeCommand.java b/src/notifyz/hardcorefactions/commands/essentials/InvseeCommand.java new file mode 100644 index 0000000..3fb46f5 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/InvseeCommand.java @@ -0,0 +1,44 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +public class InvseeCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + Player p = (Player) sender; + if (cmd.getName().equalsIgnoreCase("invsee")) { + if (!p.hasPermission("hcf.command.invsee") && !p.hasPermission("hcf.command.*") && !p.hasPermission("*")) { + p.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + if (args.length == 0 || args.length > 1) { + p.sendMessage("§cUsage: /invsee [player]"); + return true; + } + Player t = Bukkit.getPlayer(args[0]); + if (t == null) { + p.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.invsee-player-not-found"))); + return true; + } + if (t.hasPermission("hcf.command.invsee")) { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.invsee-error"))); + return true; + } + p.openInventory(t.getInventory()); + } + return true; + } + +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/InvseeOfflineCommand.java b/src/notifyz/hardcorefactions/commands/essentials/InvseeOfflineCommand.java new file mode 100644 index 0000000..563b6f4 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/InvseeOfflineCommand.java @@ -0,0 +1,68 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_7_R4.CraftServer; +import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; + +import net.minecraft.server.v1_7_R4.EntityPlayer; +import net.minecraft.server.v1_7_R4.MinecraftServer; +import net.minecraft.server.v1_7_R4.PlayerInteractManager; +import net.minecraft.util.com.mojang.authlib.GameProfile; + +public class InvseeOfflineCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (!(sender instanceof Player)) { + return true; + } + Player player = (Player) sender; + if (sender.hasPermission("hcf.command.oinvsee")) { + if (args.length > 0) { + OfflinePlayer offline = Bukkit.getOfflinePlayer(args[0]); + if (offline == null || !offline.hasPlayedBefore()) { + sender.sendMessage(ChatColor.RED + "Player not found."); + return true; + } + + player.openInventory(getPlayerInventory(offline, player.getLocation())); + } else { + sender.sendMessage(ChatColor.RED + "Usage: /oinvsee "); + } + } + return true; + } + + private Inventory getPlayerInventory(OfflinePlayer offline, Location location) { + Player player = getOfflinePlayer(offline.getName(), offline.getUniqueId(), location); + Inventory inventory = Bukkit.createInventory(null, 36, player.getName() + "'s Inventory (Offline)"); + inventory.setContents(player.getInventory().getContents()); + return inventory; + } + + private Player getOfflinePlayer(String name, UUID uuid, Location location) { + Player target = null; + GameProfile profile = new GameProfile(uuid, name); + + MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer(); + EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), profile, new PlayerInteractManager(server.getWorldServer(0))); + entity.setPositionRotation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); + entity.world = ((CraftWorld) location.getWorld()).getHandle(); + target = entity == null ? null : (Player) entity.getBukkitEntity(); + if (target != null) { + target.loadData(); + return target; + } + return target; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/KillCommand.java b/src/notifyz/hardcorefactions/commands/essentials/KillCommand.java new file mode 100644 index 0000000..5256fd1 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/KillCommand.java @@ -0,0 +1,44 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class KillCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + if (cmd.getName().equalsIgnoreCase("kill")) { + if (!sender.hasPermission("hcf.command.kill") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + if (args.length == 0) { + if (!(sender instanceof Player)) { + sender.sendMessage("§cNo Console"); + return true; + } + Player p = (Player) sender; + p.sendMessage("§cUsage: /kill ."); + return true; + } + if (args.length > 1) { + sender.sendMessage("§c/kill "); + return true; + } + Player t = Bukkit.getPlayer(args[0]); + if (t == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline"); + return true; + } + sender.sendMessage("§c" + t.getName() + "'s §ehas been killed."); + t.setHealth(0); + return true; + } + return true; + } + +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/LagCommand.java b/src/notifyz/hardcorefactions/commands/essentials/LagCommand.java new file mode 100644 index 0000000..94d1022 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/LagCommand.java @@ -0,0 +1,133 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.lang.management.ManagementFactory; +import java.text.DecimalFormat; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Chunk; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +import net.minecraft.util.org.apache.commons.lang3.text.WordUtils; +import net.minecraft.util.org.apache.commons.lang3.time.DurationFormatUtils; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; +import notifyz.hardcorefactions.utilities.chat.ClickAction; +import notifyz.hardcorefactions.utilities.chat.Text; + +public class LagCommand extends ICommandAPI { + private static long MEGABYTE = 1048576L; + private static long GIGABYTE = 1073741824L; + private static double MAXIMUM_TPS = 20.0; + private long lastServerTick; + + public LagCommand() { + super("lag", "Checks the lag of the server."); + this.setLastServerTick(0L); + this.setUsage("/(command)"); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + double tps = Bukkit.spigot().getTPS()[0]; + + if (args.length == 0) { + sendTPSFormat(sender, tps); + + if (sender.hasPermission("hcf.command.lag.statistics")) { + Text text = new Text(); + text.append(ChatColor.YELLOW + ChatColor.ITALIC.toString() + "Click to show more...").setClick(ClickAction.RUN_COMMAND, "/lag statistics").setHoverText(ChatColor.GOLD + "Click to show more about lag statistics.").send(sender); + } + return true; + } + if (args.length > 0 && args[0].equalsIgnoreCase("statistics") && sender.hasPermission("hcf.command.lag.statistics")) { + sender.sendMessage(ChatColor.GRAY + ChatColor.STRIKETHROUGH.toString() + BukkitUtils.STRAIGHT_LINE_DEFAULT); + sendExtraStatistics(sender); + sender.sendMessage(ChatColor.GRAY + ChatColor.STRIKETHROUGH.toString() + BukkitUtils.STRAIGHT_LINE_DEFAULT); + return true; + } + return true; + } + + public static double getMaximumTps() { + return MAXIMUM_TPS; + } + + public static long getGigabyte() { + return GIGABYTE; + } + + public static long getMegabyte() { + return MEGABYTE; + } + + public long getLastServerTick() { + return lastServerTick; + } + + public void setLastServerTick(long lastServerTick) { + this.lastServerTick = lastServerTick; + } + + private void sendExtraStatistics(CommandSender sender) { + double tps = Bukkit.spigot().getTPS()[0]; + double lag = Math.round((1.0 - tps / 20.0) * 100.0); + sender.sendMessage(ChatColor.GOLD + "Server performance lag: " + ChatColor.WHITE + String.format("%.1f", lag).replace("-", "") + "%"); + if (Bukkit.spigot().getTPS().length == 4) { + sender.sendMessage(ChatColor.GOLD + "Full Server Tick: " + ChatColor.WHITE + String.format("%.1f", Bukkit.spigot().getTPS()[3]).replace("-", "") + "ms"); + } + if (sender.hasPermission("hcf.command.lag.statistics")) { + Runtime runtime = Runtime.getRuntime(); + long maxMemory = runtime.maxMemory(); + long totalMemory = runtime.totalMemory(); + long freeMemory = runtime.freeMemory(); + long currentMemory = totalMemory - freeMemory; + long startTime = ManagementFactory.getRuntimeMXBean().getStartTime(); + double percentage = currentMemory / totalMemory * 100.0; + String upTime = DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - startTime, true, true); + sender.sendMessage(ChatColor.GOLD + "Available Processors: " + ChatColor.WHITE + runtime.availableProcessors()); + sender.sendMessage(ChatColor.GOLD + "Up-time: " + ChatColor.WHITE + upTime + ChatColor.GRAY + " (" + UptimeCommand.TIME_FORMATTER.format(startTime) + ')'); + sender.sendMessage(ChatColor.GOLD + "Maximum Memory: " + ChatColor.WHITE + String.format("%.1f", maxMemory / 1.073741824E9) + "GB"); + sender.sendMessage(ChatColor.GOLD + "Memory Usage: " + ChatColor.WHITE + String.format("%.1f", currentMemory / 1.073741824E9) + "GB / " + String.format("%.1f", totalMemory / 1.073741824E9) + "GB"); + sender.sendMessage(ChatColor.GOLD + "Percentage Usage: " + ChatColor.WHITE + String.format("%.1f", percentage) + "%"); + List worlds = Bukkit.getWorlds(); + for (World world : worlds) { + World.Environment environment = world.getEnvironment(); + String environmentName = WordUtils.capitalizeFully(environment.name().replace('_', ' ')); + int tileEntities = 0; + Chunk[] loadedChunks3; + Chunk[] loadedChunks2; + Chunk[] allChunks = loadedChunks2 = (loadedChunks3 = world.getLoadedChunks()); + for (int chunks = loadedChunks2.length, chunksMax = 0; chunksMax < chunks; ++chunksMax) { + Chunk chunk = allChunks[chunksMax]; + tileEntities += chunk.getTileEntities().length; + } + sender.sendMessage(ChatColor.GOLD + world.getName() + '(' + environmentName + "): " + ChatColor.WHITE + loadedChunks3.length + " chunks, " + world.getEntities().size() + " entities, " + tileEntities + " tile entities."); + } + } + } + + private void sendTPSFormat(CommandSender sender, double tps) { + StringBuilder stringBuilder = new StringBuilder("||||||||||||||||||||"); + + ChatColor color; + + if(tps >= 18) { + color = ChatColor.GREEN; + } else if(tps >= 10) { + color = ChatColor.YELLOW; + } else { + color = ChatColor.RED; + } + + DecimalFormat decimalFormat = new DecimalFormat("0.0"); + + stringBuilder.insert(0, color); + stringBuilder.insert(color.toString().length() + (tps > 20 ? 20 : (int) Math.ceil(tps)), ChatColor.DARK_GRAY); + + sender.sendMessage(ChatColor.GOLD + "Server performance: " + color + (tps > 20.0D ? "*20" : "" + decimalFormat.format(tps)) + ChatColor.GOLD + '/' + 20.0D + " [" + stringBuilder.toString() + ChatColor.GOLD + ']'); + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/ListCommand.java b/src/notifyz/hardcorefactions/commands/essentials/ListCommand.java new file mode 100644 index 0000000..a518de5 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/ListCommand.java @@ -0,0 +1,24 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; + +public class ListCommand extends ICommandAPI { + public ListCommand() { + super("list", "Lists players online"); + this.setAliases(new String[] { "who" }); + this.setUsage("/(command)"); + } + + @Override + public boolean onCommand(final CommandSender sender, final Command command, final String label, + final String[] args) { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.list-message").replace("%maxplayers%", Integer.toString(Bukkit.getMaxPlayers())).replace("%onlineplayers%", Integer.toString(Bukkit.getOnlinePlayers().size())))); + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/MessageCommand.java b/src/notifyz/hardcorefactions/commands/essentials/MessageCommand.java new file mode 100644 index 0000000..ce72d48 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/MessageCommand.java @@ -0,0 +1,57 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; +import notifyz.hardcorefactions.utilities.api.utilties.command.IConstantsAPI; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; +import notifyz.hardcorefactions.utilities.chat.MessageEvent; + +public class MessageCommand extends ICommandAPI { + public MessageCommand(HardcoreFactionsPlugin plugin) { + super("message", "Sends a message to a recipient(s)."); + this.setAliases(new String[] { "msg", "m", "whisper", "w", "tell" }); + this.setUsage("/(command) [text...]"); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable for players."); + return true; + } + if (args.length < 2) { + sender.sendMessage(ChatColor.RED + "Usage: " + this.getUsage(label)); + return true; + } + Player player = (Player) sender; + Player target = BukkitUtils.playerWithNameOrUUID(args[0]); + if (target == null || !ICommandAPI.canSee(sender, target)) { + sender.sendMessage(String.format(IConstantsAPI.PLAYER_WITH_NAME_OR_UUID_NOT_FOUND, args[0])); + return true; + } + String message = StringUtils.join(args, ' ', 1, args.length); + Set recipients = Collections.singleton(target); + MessageEvent playerMessageEvent = new MessageEvent(player, recipients, message, false); + Bukkit.getPluginManager().callEvent(playerMessageEvent); + if (!playerMessageEvent.isCancelled()) { + playerMessageEvent.send(); + } + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return null; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand.java b/src/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand.java new file mode 100644 index 0000000..f012a71 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/MessageSpyCommand.java @@ -0,0 +1,225 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +import com.google.common.collect.Iterables; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandArgument; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandWrapper; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; +import notifyz.hardcorefactions.utilities.utils.JavaUtils; +import notifyz.hardcorefactions.utilities.utils.ServerParticipator; + +public class MessageSpyCommand +extends ICommandAPI { + private final ICommandWrapper handler; + + public MessageSpyCommand(HardcoreFactionsPlugin plugin) { + super("socialspy", "Spies on the PM's of a player."); + this.setUsage("/(command) [playerName]"); + ArrayList arguments = new ArrayList(4); + arguments.add(new MessageSpyListArgument(plugin)); + arguments.add(new IgnoreClearArgument(plugin)); + arguments.add(new MessageSpyAddArgument(plugin)); + arguments.add(new MessageSpyDeleteArgument(plugin)); + Collections.sort(arguments, new ICommandWrapper.ArgumentComparator()); + this.handler = new ICommandWrapper(arguments); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + return this.handler.onCommand(sender, command, label, args); + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return this.handler.onTabComplete(sender, command, label, args); + } + + private static class MessageSpyListArgument + extends ICommandArgument { + private final HardcoreFactionsPlugin plugin; + + public MessageSpyListArgument(HardcoreFactionsPlugin plugin) { + super("list", "Lists all players you're spying on."); + this.plugin = plugin; + } + + @Override + public String getUsage(String label) { + return "" + '/' + label + ' ' + this.getName(); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + ServerParticipator participator = this.plugin.getUserManagerr().getParticipator(sender); + if (participator == null) { + sender.sendMessage(ChatColor.RED + "You are not able to message spy."); + return true; + } + LinkedHashSet spyingNames = new LinkedHashSet(); + Set messageSpying = participator.getMessageSpying(); + if (messageSpying.size() == 1 && Iterables.getOnlyElement(messageSpying).equals("all")) { + sender.sendMessage(ChatColor.GRAY + "You are currently spying on the messages of all players."); + return true; + } + for (String spyingId : messageSpying) { + String name = Bukkit.getOfflinePlayer(UUID.fromString(spyingId)).getName(); + if (name == null) continue; + spyingNames.add(name); + } + if (spyingNames.isEmpty()) { + sender.sendMessage(ChatColor.RED + "You are not spying on the messages of any players."); + return true; + } + sender.sendMessage(ChatColor.GRAY + "You are currently spying on the messages of (" + spyingNames.size() + " players): " + ChatColor.RED + StringUtils.join(spyingNames, new StringBuilder().append(ChatColor.GRAY.toString()).append(", ").append(ChatColor.RED).toString()) + ChatColor.GRAY + '.'); + return true; + } + } + + private static class IgnoreClearArgument + extends ICommandArgument { + private final HardcoreFactionsPlugin plugin; + + public IgnoreClearArgument(HardcoreFactionsPlugin plugin) { + super("clear", "Clears your current spy list."); + this.plugin = plugin; + } + + @Override + public String getUsage(String label) { + return "" + '/' + label + ' ' + this.getName(); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + ServerParticipator participator = this.plugin.getUserManagerr().getParticipator(sender); + if (participator == null) { + sender.sendMessage(ChatColor.RED + "You are not able to message spy."); + return true; + } + participator.getMessageSpying().clear(); + sender.sendMessage(ChatColor.YELLOW + "You are no longer spying the messages of anyone."); + return true; + } + } + + private static class MessageSpyAddArgument + extends ICommandArgument { + private final HardcoreFactionsPlugin plugin; + + public MessageSpyAddArgument(HardcoreFactionsPlugin plugin) { + super("add", "Adds a player to your message spy list."); + this.plugin = plugin; + } + + @Override + public String getUsage(String label) { + return "" + '/' + label + ' ' + this.getName() + " "; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + ServerParticipator participator = this.plugin.getUserManagerr().getParticipator(sender); + if (participator == null) { + sender.sendMessage(ChatColor.RED + "You are not able to message spy."); + return true; + } + if (args.length < 2) { + sender.sendMessage(ChatColor.RED + "Usage: " + this.getUsage(label)); + return true; + } + Set messageSpying = participator.getMessageSpying(); + boolean all = messageSpying.contains("all"); + if (all || JavaUtils.containsIgnoreCase(messageSpying, args[1])) { + sender.sendMessage(ChatColor.RED + "You are already spying on the messages of " + (all ? "all players" : args[1]) + '.'); + return true; + } + if (args[1].equalsIgnoreCase("all")) { + messageSpying.clear(); + messageSpying.add("all"); + sender.sendMessage(ChatColor.GREEN + "You are now spying on the messages of all players."); + return true; + } + OfflinePlayer offlineTarget = Bukkit.getOfflinePlayer(args[1]); + if (!offlineTarget.hasPlayedBefore() && offlineTarget.getPlayer() == null) { + sender.sendMessage(ChatColor.GOLD + "Player '" + ChatColor.WHITE + args[1] + ChatColor.GOLD + "' not found."); + return true; + } + if (offlineTarget.equals(sender)) { + sender.sendMessage(ChatColor.RED + "You cannot spy on the messages of yourself."); + return true; + } + sender.sendMessage(ChatColor.YELLOW + "You are " + (messageSpying.add(offlineTarget.getUniqueId().toString()) ? new StringBuilder().append(ChatColor.GREEN).append("now").toString() : new StringBuilder().append(ChatColor.RED).append("already").toString()) + ChatColor.YELLOW + " spying on the messages of " + offlineTarget.getName() + '.'); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return args.length == 2 ? null : Collections.emptyList(); + } + } + + private static class MessageSpyDeleteArgument + extends ICommandArgument { + private final HardcoreFactionsPlugin plugin; + + public MessageSpyDeleteArgument(HardcoreFactionsPlugin plugin) { + super("delete", "Deletes a player from your message spy list."); + this.plugin = plugin; + this.aliases = new String[]{"del", "remove"}; + } + + @Override + public String getUsage(String label) { + return "" + '/' + label + ' ' + this.getName() + " "; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + ServerParticipator participator = this.plugin.getUserManagerr().getParticipator(sender); + if (participator == null) { + sender.sendMessage(ChatColor.RED + "You are not able to message spy."); + return true; + } + if (args.length < 2) { + sender.sendMessage(ChatColor.RED + "Usage: " + this.getUsage(label)); + return true; + } + Set messageSpying = participator.getMessageSpying(); + if (args[1].equalsIgnoreCase("all")) { + messageSpying.remove("all"); + sender.sendMessage(ChatColor.RED + "You are no longer spying on the messages of all players."); + return true; + } + OfflinePlayer offlineTarget = BukkitUtils.offlinePlayerWithNameOrUUID(args[1]); + if (!offlineTarget.hasPlayedBefore() && !offlineTarget.isOnline()) { + sender.sendMessage(ChatColor.GOLD + "Player named or with UUID '" + ChatColor.WHITE + args[1] + ChatColor.GOLD + "' not found."); + return true; + } + sender.sendMessage("You are " + (messageSpying.remove(offlineTarget.getUniqueId().toString()) ? new StringBuilder().append(ChatColor.GREEN).append("no longer").toString() : new StringBuilder().append(ChatColor.RED).append("still not").toString()) + ChatColor.YELLOW + " spying on the messages of " + offlineTarget.getName() + '.'); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return args.length == 2 ? null : Collections.emptyList(); + } + } + +} + diff --git a/src/notifyz/hardcorefactions/commands/essentials/MoreItemsCommand.java b/src/notifyz/hardcorefactions/commands/essentials/MoreItemsCommand.java new file mode 100644 index 0000000..13acb36 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/MoreItemsCommand.java @@ -0,0 +1,60 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import net.minecraft.util.com.google.common.primitives.Ints; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; + +public class MoreItemsCommand extends ICommandAPI +{ + public MoreItemsCommand() { + super("more", "Sets your item to its maximum amount."); + this.setUsage("/(command)"); + } + + @Override + public boolean isPlayerOnlyCommand() { + return true; + } + + @Override + public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable for players."); + return true; + } + final Player player = (Player)sender; + final ItemStack stack = player.getItemInHand(); + if (stack == null || stack.getType() == Material.AIR) { + sender.sendMessage(ChatColor.RED + "You are not holding any item."); + return true; + } + Integer amount; + if (args.length > 0) { + amount = Ints.tryParse(args[0]); + if (amount == null) { + sender.sendMessage(ChatColor.RED + "'" + args[0] + "' is not a number."); + return true; + } + if (amount <= 0) { + sender.sendMessage(ChatColor.RED + "Item amounts must be positive."); + return true; + } + } + else { + final int curAmount = stack.getAmount(); + amount = stack.getMaxStackSize(); + if (curAmount >= amount) { + sender.sendMessage(ChatColor.RED + "You already have the maximum amount: " + amount + '.'); + return true; + } + } + stack.setAmount(amount); + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/NewVideoCommand.java b/src/notifyz/hardcorefactions/commands/essentials/NewVideoCommand.java new file mode 100644 index 0000000..a5807e4 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/NewVideoCommand.java @@ -0,0 +1,63 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; +import notifyz.hardcorefactions.utilities.chat.Color; +import notifyz.hardcorefactions.utilities.utils.Utils; + +@SuppressWarnings("deprecation") +public class NewVideoCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage("Only players !"); + return true; + } + Player player = (Player) sender; + if (!player.hasPermission("hcf.command.rec")) { + player.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + if (args.length == 0) { + player.sendMessage(ChatColor.RED + ("Usage: /newvideo ")); + return true; + } + if (args.length == 1) { + String url = args[0]; + if (!url.toLowerCase().startsWith("https://") || !url.toLowerCase().contains("youtube.com")) { + player.sendMessage(Color.translate("&cInvalid url!")); + player.sendMessage(Color.translate("&cExample: /newvideo &ehttps://www.youtube.com/" + Utils.SERVER_NAME)); + return true; + } + Bukkit.broadcastMessage(ChatColor.BOLD + BukkitUtils.STRAIGHT_LINE_DEFAULT); + Bukkit.broadcastMessage(""); + Bukkit.broadcastMessage(Color.translate("&f&lYou&4&lTube &8» " + player.getDisplayName() + " &7has published a new video.")); + Bukkit.spigot().broadcast(newVideo(player, url)); + Bukkit.broadcastMessage(Color.translate(" ")); + Bukkit.broadcastMessage(ChatColor.BOLD + BukkitUtils.STRAIGHT_LINE_DEFAULT); + player.sendMessage("§4§lALERT: §cSpamming with this command, may result a PUNISHMENT."); + } + return false; + } + + private BaseComponent newVideo(Player player, String url) { + String msg = String.valueOf(Color.translate(" &f&l* &a&lLINK")); + TextComponent text = new TextComponent(msg); + text.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, url)); + text.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, + new ComponentBuilder(Color.translate("&7Click to copy!")).create())); + return text; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/RecCommand.java b/src/notifyz/hardcorefactions/commands/essentials/RecCommand.java new file mode 100644 index 0000000..fe82b70 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/RecCommand.java @@ -0,0 +1,50 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; + +public class RecCommand implements CommandExecutor { + + public static Set recToggle = new HashSet(); + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage("Only players !"); + return true; + } + Player player = (Player) sender; + if (!player.hasPermission("hcf.command.rec")) { + player.sendMessage("§cYou do not have acces to this command."); + return true; + } + if (recToggle.contains(player.getUniqueId())) { + recToggle.remove(player.getUniqueId()); + Bukkit.broadcastMessage(ChatColor.BOLD + BukkitUtils.STRAIGHT_LINE_DEFAULT); + Bukkit.broadcastMessage(""); + Bukkit.broadcastMessage("§f§lYou§4§lTube §8» " + player.getDisplayName() + " §7has stopped recording."); + Bukkit.broadcastMessage(""); + Bukkit.broadcastMessage(ChatColor.BOLD + BukkitUtils.STRAIGHT_LINE_DEFAULT); + player.sendMessage("§4§lALERT: §cSpamming with this command, may result a PUNISHMENT."); + return true; + } + recToggle.add(player.getUniqueId()); + Bukkit.broadcastMessage(ChatColor.BOLD + BukkitUtils.STRAIGHT_LINE_DEFAULT); + Bukkit.broadcastMessage(""); + Bukkit.broadcastMessage("§f§lYou§4§lTube §8» " + player.getDisplayName() + " §7has started recording."); + Bukkit.broadcastMessage(""); + Bukkit.broadcastMessage(ChatColor.BOLD + BukkitUtils.STRAIGHT_LINE_DEFAULT); + player.sendMessage("§4§lALERT: §cSpamming with this command, may result a PUNISHMENT."); + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/RemovePermCommand.java b/src/notifyz/hardcorefactions/commands/essentials/RemovePermCommand.java new file mode 100644 index 0000000..258dfaf --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/RemovePermCommand.java @@ -0,0 +1,49 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.Collections; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +/** + * Created by Notifyz. + */ +public class RemovePermCommand implements CommandExecutor, TabCompleter { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (args.length == 0) { + sender.sendMessage(ChatColor.RED + "Usage: /" + label + " "); + return true; + + } + + Player target = Bukkit.getServer().getPlayer(args[0]); + + if (target == null) { + sender.sendMessage(ChatColor.RED + "That player is not online."); + return true; + } + Player player = target; + Bukkit.dispatchCommand(sender, "deop " + player.getName()); + Bukkit.dispatchCommand(sender, "manudelp " + player.getName() + " *"); + Bukkit.dispatchCommand(sender, "setrank " + player.getName() + " member"); + Bukkit.dispatchCommand(sender, "pex user " + player.getName() + " remove *"); + Bukkit.dispatchCommand(sender, "pex user " + player.getName() + " group set default"); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.removeperm-message").replace("%target%", target.getName()))); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return Collections.emptyList(); + + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/RenameCommand.java b/src/notifyz/hardcorefactions/commands/essentials/RenameCommand.java new file mode 100644 index 0000000..ecb8d4f --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/RenameCommand.java @@ -0,0 +1,69 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.chat.Cooldowns; + +public class RenameCommand implements CommandExecutor { + + public static String format(final int i) { + final int ms = i / 60; + final int ss = i % 60; + final String m = ((ms < 10) ? "0" : "") + ms; + final String s = ((ss < 10) ? "0" : "") + ss; + final String f = m + ":" + s; + return f; + } + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + Player p = (Player) sender; + if (cmd.getName().equalsIgnoreCase("rename")) { + if (!sender.hasPermission("hcf.command.rename") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + if (args.length == 0) { + sender.sendMessage("§cUsage: /rename "); + return true; + } + if (p.getItemInHand().getType() == Material.AIR) { + sender.sendMessage("§cInvalid Item."); + return true; + } + if (Cooldowns.isOnCooldown("rename_cooldown", p) && !p.isOp()) { + sender.sendMessage(ChatColor.RED + "You still have rename cooldown for another " + format(Cooldowns.getCooldownForPlayerInt("rename_cooldown", p))); + return true; + } + if (args[0].contains(ChatColor.stripColor(HardcoreFactionsPlugin.getInstance().getConfig().getString("throwable-cobwebs.cobweb-name"))) && !p.isOp()) { + sender.sendMessage(ChatColor.RED + "You cannot rename to that item!"); + return true; + } + StringBuilder str = new StringBuilder(); + for(int i = 0; i < args.length; i++) { + str.append(args[i] + " "); + } + String name = str.toString(); + ItemStack i = p.getItemInHand(); + ItemMeta im = i.getItemMeta(); + im.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); + i.setItemMeta(im); + p.setItemInHand(i); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.rename-message").replace("%name%", name))); + Cooldowns.addCooldown("rename_cooldown", p, 3600); + } + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/ReplyCommand.java b/src/notifyz/hardcorefactions/commands/essentials/ReplyCommand.java new file mode 100644 index 0000000..997d508 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/ReplyCommand.java @@ -0,0 +1,75 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.HashSet; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.google.common.collect.Sets; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; +import notifyz.hardcorefactions.utilities.chat.MessageEvent; +import notifyz.hardcorefactions.utilities.user.IUser; + +public class ReplyCommand extends ICommandAPI { + private static final long VANISH_REPLY_TIMEOUT = TimeUnit.SECONDS.toMillis(45); + private final HardcoreFactionsPlugin plugin; + + public ReplyCommand(HardcoreFactionsPlugin plugin) { + super("reply", "Replies to the last conversing player."); + this.setAliases(new String[] { "r" }); + this.setUsage("/(command) "); + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + Player target; + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable for players."); + return true; + } + Player player = (Player) sender; + UUID uuid = player.getUniqueId(); + IUser baseUser = this.plugin.getUserManagerr().getUser(uuid); + UUID lastReplied = baseUser.getLastRepliedTo(); + @SuppressWarnings("unused") + Player player2 = target = lastReplied == null ? null : Bukkit.getPlayer(lastReplied); + if (args.length < 1) { + sender.sendMessage(ChatColor.RED + "Usage: " + this.getUsage(label)); + if (lastReplied != null && ICommandAPI.canSee(sender, target)) { + sender.sendMessage(ChatColor.RED + "You are in a conversation with " + target.getName() + '.'); + } + return true; + } + long millis = System.currentTimeMillis(); + if (target == null || !ICommandAPI.canSee(sender, target) + && millis - baseUser.getLastReceivedMessageMillis() > VANISH_REPLY_TIMEOUT) { + sender.sendMessage(ChatColor.GOLD + "There is no player to reply to."); + return true; + } + String message = StringUtils.join(args, ' '); + @SuppressWarnings("rawtypes") + HashSet recipients = Sets.newHashSet((Object[]) new Player[] { target }); + @SuppressWarnings("unchecked") + MessageEvent playerMessageEvent = new MessageEvent(player, recipients, message, false); + Bukkit.getPluginManager().callEvent(playerMessageEvent); + if (!playerMessageEvent.isCancelled()) { + playerMessageEvent.send(); + } + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return null; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/ServerTimeCommand.java b/src/notifyz/hardcorefactions/commands/essentials/ServerTimeCommand.java new file mode 100644 index 0000000..f277d6f --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/ServerTimeCommand.java @@ -0,0 +1,40 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.Collections; +import java.util.List; +import java.util.Locale; + +import org.apache.commons.lang.time.FastDateFormat; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +/** + * Command used to check the current time for the server. + */ +public class ServerTimeCommand implements CommandExecutor, TabCompleter { + + private final FastDateFormat format; + + public ServerTimeCommand(HardcoreFactionsPlugin plugin) { + format = FastDateFormat.getInstance("E MMM dd h:mm:ssa z yyyy", + plugin.getConfiguration().getServerTimeZone(), Locale.ENGLISH); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + sender.sendMessage(ChatColor.GREEN + "The server time is " + ChatColor.LIGHT_PURPLE + + format.format(System.currentTimeMillis()) + ChatColor.GREEN + '.'); + + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return Collections.emptyList(); + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/SetBorderCommand.java b/src/notifyz/hardcorefactions/commands/essentials/SetBorderCommand.java new file mode 100644 index 0000000..e1e44a5 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/SetBorderCommand.java @@ -0,0 +1,98 @@ + package notifyz.hardcorefactions.commands.essentials; + + + import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; + +import net.minecraft.util.com.google.common.base.Enums; +import net.minecraft.util.com.google.common.base.Optional; +import net.minecraft.util.com.google.common.primitives.Ints; +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; +import notifyz.hardcorefactions.utilities.utils.Utils; + + + + @SuppressWarnings("deprecation") +public class SetBorderCommand + implements CommandExecutor, TabCompleter + { + private static final int MIN_SET_SIZE = 1000; + private static final int MAX_SET_SIZE = 25000; + + @Override +public boolean onCommand(CommandSender sender, Command command, String label, String[] args) + { +/* 29 */ if (args.length < 2) + { +/* 31 */ sender.sendMessage(ChatColor.RED + "Usage: /" + label + " "); +/* 32 */ return true; + } +/* 34 */ Optional optional = Enums.getIfPresent(World.Environment.class, args[0]); +/* 35 */ if (!optional.isPresent()) + { +/* 37 */ sender.sendMessage(ChatColor.RED + "Environment '" + args[0] + "' not found."); +/* 38 */ return true; + } +/* 40 */ Integer amount = Ints.tryParse(args[1]); +/* 41 */ if (amount == null) + { +/* 43 */ sender.sendMessage(ChatColor.RED + "'" + args[1] + "' is not a valid number."); +/* 44 */ return true; + } +/* 46 */ if (amount.intValue() < MIN_SET_SIZE) + { +/* 48 */ sender.sendMessage(ChatColor.RED + "Minimum border size is " + MIN_SET_SIZE + '.'); +/* 49 */ return true; + } +/* 51 */ if (amount.intValue() > MAX_SET_SIZE) + { +/* 53 */ sender.sendMessage(ChatColor.RED + "Maximum border size is " + MAX_SET_SIZE + '.'); +/* 54 */ return true; + } +/* 56 */ World.Environment environment = optional.get(); +/* 57 */ Utils.BORDER_SIZES.put(environment, amount); +/* 58 */ Command.broadcastCommandMessage(sender, ChatColor.YELLOW + "Set border size of environment " + environment.name() + " to " + amount + '.'); + if (args[0].equals("NORMAL")) { + HardcoreFactionsPlugin.getInstance().getConfig().set("world-border.worldBorder", amount); + HardcoreFactionsPlugin.getInstance().saveConfig(); + System.out.println("XXXX"); + return true; + } + if (args[0].equals("NETHER")) { + HardcoreFactionsPlugin.getInstance().getConfig().set("world-border.netherBorder", amount); + HardcoreFactionsPlugin.getInstance().saveConfig(); + return true; + } + if (args[0].equals("THE_END")) { + HardcoreFactionsPlugin.getInstance().getConfig().set("world-border.endBorder", amount); + HardcoreFactionsPlugin.getInstance().saveConfig(); + return true; + } + HardcoreFactionsPlugin.getInstance().saveConfig(); + return true; + } + + @Override +@SuppressWarnings({ "unchecked", "rawtypes" }) +public List onTabComplete(CommandSender sender, Command command, String label, String[] args) + { +/* 64 */ if (args.length != 1) { +/* 65 */ return Collections.emptyList(); + } +/* 67 */ World.Environment[] values = World.Environment.values(); +/* 68 */ List results = new ArrayList(values.length); +/* 69 */ for (World.Environment environment : values) { +/* 70 */ results.add(environment.name()); + } +/* 72 */ return BukkitUtils.getCompletions(args, results); + } + } diff --git a/src/notifyz/hardcorefactions/commands/essentials/SettingsCommand.java b/src/notifyz/hardcorefactions/commands/essentials/SettingsCommand.java new file mode 100644 index 0000000..9693c28 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/SettingsCommand.java @@ -0,0 +1,246 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.commands.hcf.CobbleCommand; +import notifyz.hardcorefactions.commands.hcf.MobDropsCommand; +import notifyz.hardcorefactions.scoreboard.utilities.PlayerBoard; +import notifyz.hardcorefactions.team.utilities.TeamUser; +import notifyz.hardcorefactions.utilities.chat.Color; +import notifyz.hardcorefactions.utilities.user.IUser; + +public class SettingsCommand implements CommandExecutor, Listener { + + + //private JavaPlugin deathPlugin; + + + public SettingsCommand(HardcoreFactionsPlugin hcf) { + /*try { + Class deathPluginClass = Class.forName("com.sainttx.deathmessages.DeathPlugin"); + if (deathPluginClass != null && deathPluginClass.isAssignableFrom(JavaPlugin.class)) { + deathPlugin = JavaPlugin.getPlugin((Class) deathPluginClass); + } + } catch(ClassNotFoundException exception) {}*/ + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String stringList, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "No Console."); + return true; + } + Player player = (Player) sender; + if (command.getName().equalsIgnoreCase("settings")) { + if (!player.hasPermission("hcf.command.settings")) { + return true; + } + openGui(player); + return true; + } + return false; + + } + + + public void openGui(Player player) { + Inventory inventory = Bukkit.createInventory(null, 27, ChatColor.LIGHT_PURPLE + "Options"); + TeamUser teamUser = HardcoreFactionsPlugin.getInstance().getUserManager().getUser(player.getUniqueId()); + IUser iUser = HardcoreFactionsPlugin.getInstance().getUserManagerr().getUser(player.getUniqueId()); + PlayerBoard playerBoard = HardcoreFactionsPlugin.getInstance().getScoreboardHandler().getPlayerBoard(player.getUniqueId()); + + ItemStack diamondAlerts = new ItemStack(Material.DIAMOND); + ItemStack scoreboard = new ItemStack(Material.BOOK); + ItemStack cobblestonepick = new ItemStack(Material.COBBLESTONE); + ItemStack lighting = new ItemStack(Material.ARROW); + ItemStack mobdrops = new ItemStack(Material.ROTTEN_FLESH); + ItemStack capzone = new ItemStack(Material.PAPER); + ItemStack tab = new ItemStack(Material.ENCHANTED_BOOK); + ItemStack sign = new ItemStack(Material.SIGN); + ItemStack painting = new ItemStack(Material.PAINTING); + ItemStack juke = new ItemStack(Material.JUKEBOX); + + ItemMeta diamondMeta = diamondAlerts.getItemMeta(); + ItemMeta scoreboardMeta = scoreboard.getItemMeta(); + ItemMeta cobblestoneMeta = cobblestonepick.getItemMeta(); + ItemMeta lightingMeta = lighting.getItemMeta(); + ItemMeta mobdropsMeta = mobdrops.getItemMeta(); + ItemMeta capzoneMeta = capzone.getItemMeta(); + ItemMeta tabMeta = tab.getItemMeta(); + ItemMeta signMeta = sign.getItemMeta(); + ItemMeta paintingMeta = painting.getItemMeta(); + ItemMeta jukeMeta = juke.getItemMeta(); + + diamondMeta.setDisplayName(ChatColor.LIGHT_PURPLE + "Found Diamonds"); + if (teamUser.isFdalerts()) { + diamondMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to see", ChatColor.BLUE + "found-diamonds messages?", "", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Show messages", ChatColor.BLUE + " " + ChatColor.GRAY + "Hide messages")); + } else { + diamondMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to see", ChatColor.BLUE + "found-diamonds messages?", "", ChatColor.BLUE + " " + ChatColor.GRAY + "Show messages", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Hide messages")); + } + + scoreboardMeta.setDisplayName(Color.translate("&dScoreboard")); + if (playerBoard.isSidebarVisible()) { + scoreboardMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to see", ChatColor.BLUE + "scoreboard?", "", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Show scoreboard", ChatColor.BLUE + " " + ChatColor.GRAY + "Hide scoreboard")); + } else { + scoreboardMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to see", ChatColor.BLUE + "scoreboard?", "", ChatColor.BLUE + " " + ChatColor.GRAY + "Show scoreboard", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Hide scoreboard")); + } + + cobblestoneMeta.setDisplayName(Color.translate("&dCobblestone Pickups")); + if (!CobbleCommand.disabled.contains(player)) { + cobblestoneMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to pickup", ChatColor.BLUE + "cobblestone?", "", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Pickup cobblestone", ChatColor.BLUE + " " + ChatColor.GRAY + "Don't pickup cobblestone")); + } else { + cobblestoneMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to pickup", ChatColor.BLUE + "cobblestone?", "", ChatColor.BLUE + " " + ChatColor.GRAY + "Pickup cobblestone", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Don't pickup cobblestone")); + } + + mobdropsMeta.setDisplayName(Color.translate("&dMob Drops")); + if (!MobDropsCommand.disabled.contains(player)) { + mobdropsMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to pickup", ChatColor.BLUE + "mob drops?", "", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Pickup mob drops", ChatColor.BLUE + " " + ChatColor.GRAY + "Don't pickup mob drops")); + } else { + mobdropsMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to pickup", ChatColor.BLUE + "mob drops?", "", ChatColor.BLUE + " " + ChatColor.GRAY + "Pickup mob drops", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Don't pickup mob drops")); + } + + lightingMeta.setDisplayName(Color.translate("&dLighting Strikes")); + if (teamUser.isShowLightning()) { + lightingMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to see", ChatColor.BLUE + "lighting on death?", "", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Show lighting", ChatColor.BLUE + " " + ChatColor.GRAY + "Hide lighting")); + } else { + lightingMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to see", ChatColor.BLUE + "lighting on death?", "", ChatColor.BLUE + " " + ChatColor.GRAY + "Show lighting", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Hide lighting")); + } + + capzoneMeta.setDisplayName(Color.translate("&dCapzone Entries")); + if (teamUser.isCapzoneEntryAlerts()) { + capzoneMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to see", ChatColor.BLUE + "capzone entry messages?", "", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Show messages", ChatColor.BLUE + " " + ChatColor.GRAY + "Hide messages")); + } else { + capzoneMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to see", ChatColor.BLUE + "capzone entry messages?", "", ChatColor.BLUE + " " + ChatColor.GRAY + "Show messages", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Hide messages")); + } + + signMeta.setDisplayName(ChatColor.LIGHT_PURPLE + "Public Chat"); + if (iUser.isGlobalChatVisible()) { + signMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to see", ChatColor.BLUE + "public chat messages?", "", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Show public chat", ChatColor.BLUE + " " + ChatColor.GRAY + "Hide public chat")); + } else { + signMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to see", ChatColor.BLUE + "public chat messages?", "", ChatColor.BLUE + " " + ChatColor.GRAY + "Show public chat", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Hide public chat")); + } + + paintingMeta.setDisplayName(ChatColor.LIGHT_PURPLE + "Private Messages"); + if (iUser.isMessagesVisible()) { + paintingMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to see", ChatColor.BLUE + "private messages?", "", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Show private messages", ChatColor.BLUE + " " + ChatColor.GRAY + "Hide private messages")); + } else { + paintingMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to see", ChatColor.BLUE + "private messages?", "", ChatColor.BLUE + " " + ChatColor.GRAY + "Show private messages", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Hide private messages")); + } + + jukeMeta.setDisplayName(ChatColor.LIGHT_PURPLE + "Sound Messages"); + if (iUser.isMessagingSounds()) { + jukeMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to hear", ChatColor.BLUE + "sound messages?", "", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Hear sound messages", ChatColor.BLUE + " " + ChatColor.GRAY + "Don't hear sound messages")); + } else { + jukeMeta.setLore(Arrays.asList("", ChatColor.BLUE + "Do you want to hear", ChatColor.BLUE + "sound messages?", "", ChatColor.BLUE + " " + ChatColor.GRAY + "Hear sound messages", ChatColor.BLUE + " â–º " + ChatColor.GREEN + "Don't hear sound messages")); + } + + painting.setItemMeta(paintingMeta); + diamondAlerts.setItemMeta(diamondMeta); + scoreboard.setItemMeta(scoreboardMeta); + cobblestonepick.setItemMeta(cobblestoneMeta); + lighting.setItemMeta(lightingMeta); + mobdrops.setItemMeta(mobdropsMeta); + capzone.setItemMeta(capzoneMeta); + tab.setItemMeta(tabMeta); + sign.setItemMeta(signMeta); + juke.setItemMeta(jukeMeta); + + inventory.setItem(9, scoreboard); + inventory.setItem(23, cobblestonepick); + inventory.setItem(17, lighting); + inventory.setItem(21, mobdrops); + inventory.setItem(11, capzone); + inventory.setItem(5, sign); + inventory.setItem(1, diamondAlerts); + inventory.setItem(13, painting); + inventory.setItem(15, juke); + + //for (int i = 0; i < 36; i ++) { + // if (inventory.getContents()[i] == null) inventory.setItem(i, new SettingsBuilder(Material.STAINED_GLASS_PANE, ChatColor.GRAY + "", 1, (byte)14, new String[0]).getItem()); + //} + + player.openInventory(inventory); + } + + @EventHandler + public void onClick(InventoryClickEvent e) { + + if (e.getWhoClicked() instanceof Player) { + Player player = (Player) e.getWhoClicked(); + if (player.getOpenInventory().getTitle().equalsIgnoreCase(ChatColor.LIGHT_PURPLE + "Options")) { + e.setCancelled(true); + if (e.getCurrentItem() == null || e.getCurrentItem().getType() == Material.AIR) { + e.setCancelled(true); + return; + } + + ItemStack item = e.getCurrentItem(); + switch (item.getType()) { + + case ARROW: + player.chat("/togglelightning"); + player.closeInventory(); + break; + case DIAMOND: + player.chat("/togglefd"); + player.closeInventory(); + break; + case COBBLESTONE: + player.chat("/cobble"); + player.closeInventory(); + break; + case ROTTEN_FLESH: + player.chat("/mobdrops"); + player.closeInventory(); + break; + case PAPER: + player.chat("/togglecapzoneentry"); + player.closeInventory(); + break; + case BOOK: + player.chat("/togglesidebar"); + player.closeInventory(); + break; + case ENCHANTED_BOOK: + player.chat("/tabsettings"); + player.closeInventory(); + break; + case SIGN: + player.chat("/togglechat"); + player.closeInventory(); + break; + case PAINTING: + player.chat("/togglepm"); + player.closeInventory(); + break; + case JUKEBOX: + player.chat("/togglesounds"); + player.closeInventory(); + break; + case SKULL_ITEM: + player.chat("/deathmessages toggle"); + player.closeInventory(); + break; + default: + break; + } + } + } + } + +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/SlowchatCommand.java b/src/notifyz/hardcorefactions/commands/essentials/SlowchatCommand.java new file mode 100644 index 0000000..eae66d5 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/SlowchatCommand.java @@ -0,0 +1,50 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.concurrent.TimeUnit; + +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; +import notifyz.hardcorefactions.utilities.utils.JavaUtils; + +public class SlowchatCommand extends ICommandAPI { + private static final long DEFAULT_DELAY; + private final HardcoreFactionsPlugin plugin; + + public SlowchatCommand(final HardcoreFactionsPlugin plugin) { + super("slowchat", "Slows the chat down for non-staff."); + this.setAliases(new String[] { "slow" }); + this.setUsage("/(command)"); + this.plugin = plugin; + } + + @Override + public boolean onCommand(final CommandSender sender, final Command command, final String label, + final String[] args) { + final long oldTicks = this.plugin.getServerHandler().getRemainingChatSlowedMillis(); + Long newTicks; + if (oldTicks > 0L) { + newTicks = 0L; + } else if (args.length < 1) { + newTicks = SlowchatCommand.DEFAULT_DELAY; + } else { + newTicks = JavaUtils.parse(args[0]); + if (newTicks == -1L) { + sender.sendMessage(ChatColor.RED + "Invalid duration, use the correct format: 10m1s"); + return true; + } + } + this.plugin.getServerHandler().setChatSlowedMillis(newTicks); + Bukkit.broadcastMessage(ChatColor.YELLOW + "Global chat " + ((newTicks > 0L) ? ("has now been slowed for " + ChatColor.GOLD + DurationFormatUtils.formatDurationWords(newTicks, true, true)) : ("is no longer " + ChatColor.GOLD + "slowed"))); + return true; + } + + static { + DEFAULT_DELAY = TimeUnit.SECONDS.toMillis(10L); + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/SpawnCommand.java b/src/notifyz/hardcorefactions/commands/essentials/SpawnCommand.java new file mode 100644 index 0000000..4e35039 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/SpawnCommand.java @@ -0,0 +1,51 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + + +public class SpawnCommand implements CommandExecutor { + + @Override + @SuppressWarnings("unused") + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (cmd.getName().equalsIgnoreCase("spawn")) { + if (!(sender instanceof Player)) { + return true; + } + if (!sender.hasPermission("hcf.command.spawn")) { + sender.sendMessage(ChatColor.RED + "You must travel to" + ChatColor.GREEN + " Spawn " + ChatColor.RED + "Coordinates: " + ChatColor.GRAY + "(0 | 0)"); + return true; + } + + if (args.length == 0) { + Player player = (Player) sender; + World world = player.getWorld(); + Location spon = world.getSpawnLocation().clone().add(0.5, 0.5, 0.5); + player.teleport(spon); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.spawn-teleport-message"))); + } + if(args.length == 1) { + Player target = Bukkit.getPlayer(args[0]); + World world = target.getWorld(); + Location spon = world.getSpawnLocation().clone().add(0.5, 0.5, 0.5); + if(target == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline."); + return true; + } + target.teleport(spon); + sender.sendMessage(ChatColor.RED + target.getName() + " has been teleported to spawn."); + } + } + return false; + } + +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/SpawnerCommand.java b/src/notifyz/hardcorefactions/commands/essentials/SpawnerCommand.java new file mode 100644 index 0000000..32bdbc7 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/SpawnerCommand.java @@ -0,0 +1,54 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import net.minecraft.util.com.google.common.base.Enums; +import net.minecraft.util.com.google.common.base.Optional; +import net.minecraft.util.org.apache.commons.lang3.text.WordUtils; +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.inventory.ItemBuilder; +public class SpawnerCommand implements CommandExecutor { + + public String C(String msg) { + return ChatColor.translateAlternateColorCodes('&', msg); + } + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (cmd.getName().equalsIgnoreCase("spawner")) { + if (!(sender instanceof Player)) { + return true; + } + if (!sender.hasPermission("hcf.command.spawner")) { + sender.sendMessage(C("&cNo Permissions!")); + return true; + } + if (args.length == 0) { + sender.sendMessage(ChatColor.RED + "/spawner "); + return true; + } + String spawner = args[0]; + Player p = (Player) sender; + Inventory inv = p.getInventory(); + Optional entityTypeOptional = Enums.getIfPresent(EntityType.class, spawner.toUpperCase()); + if (entityTypeOptional.isPresent()) { + inv.addItem(new ItemStack[] { new ItemBuilder(Material.MOB_SPAWNER).displayName(ChatColor.GREEN + spawner.toUpperCase() + " Spawner").loreLine(ChatColor.WHITE + WordUtils.capitalizeFully(spawner)).build() }); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.spawner-received").replace("%spawner%", spawner))); + return true; + } else { + p.sendMessage(C("&cInvalid &c&l" + spawner + "&c spawner.")); + return true; + } + } + return false; + } + +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/SpeedCommand.java b/src/notifyz/hardcorefactions/commands/essentials/SpeedCommand.java new file mode 100644 index 0000000..c44d8f7 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/SpeedCommand.java @@ -0,0 +1,120 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.Collections; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.minecraft.util.com.google.common.collect.ImmutableList; +import net.minecraft.util.com.google.common.primitives.Floats; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; + +public class SpeedCommand extends ICommandAPI +{ + private static final ImmutableList COMPLETIONS_FIRST; + private static final ImmutableList COMPLETIONS_SECOND; + + public SpeedCommand() { + super("speed", "Sets the fly/walk speed of a player."); + this.setUsage("/(command) [playerName]"); + } + + @Override + public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) { + if (args.length < 2) { + sender.sendMessage(ChatColor.RED + "Usage: " + this.getUsage(label)); + return true; + } + Player target; + if (args.length > 2 && sender.hasPermission(command.getPermission() + ".others")) { + target = BukkitUtils.playerWithNameOrUUID(args[2]); + } + else { + if (!(sender instanceof Player)) { + sender.sendMessage(this.getUsage(label)); + return true; + } + target = (Player)sender; + } + Boolean flight; + if (args[0].equalsIgnoreCase("fly")) { + flight = true; + } + else { + if (!args[0].equalsIgnoreCase("walk")) { + sender.sendMessage(this.getUsage(label)); + return true; + } + flight = false; + } + Float multiplier; + if (args[1].equalsIgnoreCase("reset")) { + multiplier = (flight ? 2.0f : 1.0f); + } + else { + multiplier = Floats.tryParse(args[1]); + if (multiplier == null) { + sender.sendMessage(ChatColor.RED + "Invalid speed multiplier: '" + args[1] + "'."); + return true; + } + } + if (flight) { + final float flySpeed = 0.1f * multiplier; + try { + target.setFlySpeed(flySpeed); + Command.broadcastCommandMessage(sender, ChatColor.YELLOW + "Flight speed of " + target.getName() + " has been set to " + multiplier + '.'); + } + catch (IllegalArgumentException ex) { + if (flySpeed < 0.1f) { + sender.sendMessage(ChatColor.RED + "Speed multiplier too low: " + multiplier); + } + else if (flySpeed > 0.1f) { + sender.sendMessage(ChatColor.RED + "Speed multiplier too high: " + multiplier); + } + } + } + else { + final float walkSpeed = 0.2f * multiplier; + try { + target.setWalkSpeed(walkSpeed); + Command.broadcastCommandMessage(sender, ChatColor.YELLOW + "Walking speed of " + target.getName() + " has been set to " + multiplier + '.'); + } + catch (IllegalArgumentException ex) { + if (walkSpeed < 0.2f) { + sender.sendMessage(ChatColor.RED + "Speed multiplier too low: " + multiplier); + } + else if (walkSpeed > 0.2f) { + sender.sendMessage(ChatColor.RED + "Speed multiplier too high: " + multiplier); + } + } + } + return true; + } + + @Override + public List onTabComplete(final CommandSender sender, final Command command, final String label, final String[] args) { + switch (args.length) { + case 1: { + return BukkitUtils.getCompletions(args, SpeedCommand.COMPLETIONS_FIRST); + } + case 2: { + return BukkitUtils.getCompletions(args, SpeedCommand.COMPLETIONS_SECOND); + } + case 3: { + return null; + } + default: { + return Collections.emptyList(); + } + } + } + + static { + COMPLETIONS_FIRST = ImmutableList.of("fly", "walk"); + COMPLETIONS_SECOND = ImmutableList.of("reset"); + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/StaffChatCommand.java b/src/notifyz/hardcorefactions/commands/essentials/StaffChatCommand.java new file mode 100644 index 0000000..b0fc7fb --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/StaffChatCommand.java @@ -0,0 +1,49 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.chat.Color; + + +public class StaffChatCommand implements CommandExecutor { + + private final HardcoreFactionsPlugin staffChat = HardcoreFactionsPlugin.getPlugin(); + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] arguments) { + if (sender.hasPermission("hcf.command.staffmode")) { + if (arguments.length == 0) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (staffChat.getStaffModeListener().isStaffChatActive(player)) { + staffChat.getStaffModeListener().setStaffChat(player, false); + sender.sendMessage(Color.translate("&eYou are now in &cpublic &echat mode.")); + } else { + staffChat.getStaffModeListener().setStaffChat(player, true); + sender.sendMessage(Color.translate("&eYou are now in &bstaff &echat mode.")); + } + } else { + sender.sendMessage(Color.translate("&cYou can not execute this command on console.")); + } + } else { + for (Player staff : Bukkit.getServer().getOnlinePlayers()) { + if (staff.hasPermission("hcf.command.staffmode")) { + staff.sendMessage(Color.translate( + "&b(Staff Chat)&7 " + sender.getName() + "&7: &f" + StringUtils.join(arguments, ' '))); + } + } + } + Bukkit.getServer().getConsoleSender().sendMessage(Color.translate("&b(Staff Chat) " + ChatColor.GRAY + sender.getName() + "&7: &f" + StringUtils.join(arguments, ' '))); + } else { + sender.sendMessage(Color.translate("&cYou do not have permissions to execute this command.")); + } + return true; + } +} \ No newline at end of file diff --git a/src/notifyz/hardcorefactions/commands/essentials/StatsCommand.java b/src/notifyz/hardcorefactions/commands/essentials/StatsCommand.java new file mode 100644 index 0000000..6fdad94 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/StatsCommand.java @@ -0,0 +1,112 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.Statistic; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class StatsCommand implements CommandExecutor, Listener { + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + Player player = (Player) sender; + if ((cmd.getName().equalsIgnoreCase("stats")) && ((sender instanceof Player)) && (args.length > 1)) { + sender.sendMessage("§cUsage: /stats "); + return true; + } + if (args.length == 0) { + sender.sendMessage("§cUsage: /stats "); + return true; + } + Player target = Bukkit.getServer().getPlayer(args[0]); + if ((args.length == 1) && (target == null)) { + player.sendMessage("§cThat player is currently offline."); + return true; + } + onStatsGUI(player, target); + + return false; + } + + public void onStatsGUI(Player player, Player target) { + Inventory inv = Bukkit.createInventory(null, 36, ChatColor.GOLD + "Player: " + target.getName()); + + ItemStack Diamond_ore = new ItemStack(Material.DIAMOND_ORE, target.getStatistic(Statistic.MINE_BLOCK, Material.DIAMOND_ORE)); + ItemStack Quartz_ore = new ItemStack(Material.QUARTZ_ORE, target.getStatistic(Statistic.MINE_BLOCK, Material.QUARTZ_ORE)); + ItemStack Emerald_ore = new ItemStack(Material.EMERALD_ORE, target.getStatistic(Statistic.MINE_BLOCK, Material.EMERALD_ORE)); + ItemStack Gold_ore = new ItemStack(Material.GOLD_ORE, target.getStatistic(Statistic.MINE_BLOCK, Material.GOLD_ORE)); + ItemStack Iron_ore = new ItemStack(Material.IRON_ORE, target.getStatistic(Statistic.MINE_BLOCK, Material.IRON_ORE)); + ItemStack Coal_ore = new ItemStack(Material.COAL_ORE, target.getStatistic(Statistic.MINE_BLOCK, Material.COAL_ORE)); + ItemStack Lapis_ore = new ItemStack(Material.LAPIS_ORE, target.getStatistic(Statistic.MINE_BLOCK, Material.LAPIS_ORE)); + ItemStack RedStone_ore = new ItemStack(Material.REDSTONE_ORE, target.getStatistic(Statistic.MINE_BLOCK, Material.REDSTONE_ORE)); + ItemStack Bone = new ItemStack(Material.BONE, target.getStatistic(Statistic.DEATHS)); + ItemStack DiamondSword = new ItemStack(Material.DIAMOND_SWORD, target.getStatistic(Statistic.PLAYER_KILLS)); + + ItemMeta DiamondMeta = Diamond_ore.getItemMeta(); + ItemMeta QuartzMeta = Quartz_ore.getItemMeta(); + ItemMeta EmeraldMeta = Emerald_ore.getItemMeta(); + ItemMeta GoldMeta = Gold_ore.getItemMeta(); + ItemMeta IronMeta = Iron_ore.getItemMeta(); + ItemMeta CoalMeta = Coal_ore.getItemMeta(); + ItemMeta LapisMeta = Lapis_ore.getItemMeta(); + ItemMeta RedStoneMeta = RedStone_ore.getItemMeta(); + ItemMeta BoneMeta = Bone.getItemMeta(); + ItemMeta DiamondSwordMeta = DiamondSword.getItemMeta(); + + DiamondMeta.setDisplayName("§bDiamond(s): §f" + target.getStatistic(Statistic.MINE_BLOCK, Material.DIAMOND_ORE)); + QuartzMeta.setDisplayName("§fQuartz(s): §f" + target.getStatistic(Statistic.MINE_BLOCK, Material.QUARTZ_ORE)); + EmeraldMeta.setDisplayName("§aEmerald(s): §f" + target.getStatistic(Statistic.MINE_BLOCK, Material.EMERALD_ORE)); + IronMeta.setDisplayName("§7Iron(s): §f" + target.getStatistic(Statistic.MINE_BLOCK, Material.IRON_ORE)); + GoldMeta.setDisplayName("§6Gold(s): §f" + target.getStatistic(Statistic.MINE_BLOCK, Material.GOLD_ORE)); + RedStoneMeta.setDisplayName("§cRedstone(s): §f" + target.getStatistic(Statistic.MINE_BLOCK, Material.REDSTONE_ORE)); + CoalMeta.setDisplayName("§8Coal(s): §f" + target.getStatistic(Statistic.MINE_BLOCK, Material.COAL_ORE)); + LapisMeta.setDisplayName("§9Lapis(s): §f" + target.getStatistic(Statistic.MINE_BLOCK, Material.LAPIS_ORE)); + BoneMeta.setDisplayName("§4Death(s): §f" + target.getStatistic(Statistic.DEATHS)); + DiamondSwordMeta.setDisplayName("§4Kill(s): §f" + target.getStatistic(Statistic.PLAYER_KILLS)); + + Diamond_ore.setItemMeta(DiamondMeta); + Quartz_ore.setItemMeta(QuartzMeta); + Emerald_ore.setItemMeta(EmeraldMeta); + Iron_ore.setItemMeta(IronMeta); + Gold_ore.setItemMeta(GoldMeta); + RedStone_ore.setItemMeta(RedStoneMeta); + Coal_ore.setItemMeta(CoalMeta); + Lapis_ore.setItemMeta(LapisMeta); + Bone.setItemMeta(BoneMeta); + DiamondSword.setItemMeta(DiamondSwordMeta); + + inv.setItem(23, Diamond_ore); + inv.setItem(21, Quartz_ore); + inv.setItem(15, Emerald_ore); + inv.setItem(22, Iron_ore); + + inv.setItem(14, Gold_ore); + inv.setItem(13, RedStone_ore); + inv.setItem(12, Coal_ore); + inv.setItem(11, Lapis_ore); + + inv.setItem(3, DiamondSword); + inv.setItem(5, Bone); + + player.openInventory(inv); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + @SuppressWarnings("unused") + Player player = (Player) event.getWhoClicked(); + if (event.getInventory().getTitle().startsWith(ChatColor.GOLD + "Player: ")) { + event.setCancelled(true); + } + } + +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/TeleportCommand.java b/src/notifyz/hardcorefactions/commands/essentials/TeleportCommand.java new file mode 100644 index 0000000..da77cc3 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/TeleportCommand.java @@ -0,0 +1,198 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class TeleportCommand implements CommandExecutor { + + public boolean isDouble(String s) { + try{ + Double.parseDouble(s); + return true; + } catch(NumberFormatException e) { + return false; + } + } + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + if (cmd.getName().equalsIgnoreCase("teleport")) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + if (!sender.hasPermission("hcf.command.teleport") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + + if (args.length == 1) { + Player p = (Player) sender; + Player t = Bukkit.getPlayer(args[0]); + if (t == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline"); + return true; + } + p.teleport(t); + sender.sendMessage("§eYou have been teleported to §c" + t.getName() + "§e."); + return true; + } + + if (args.length == 2) { + if (!sender.hasPermission("hcf.command.teleport.others") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + Player p = Bukkit.getPlayer(args[0]); + Player t = Bukkit.getPlayer(args[1]); + if (p == null) { + sender.sendMessage("§cPlayer " + args[0] + " offline."); + return true; + } + if (t == null) { + sender.sendMessage("§cPlayer " + args[1] + " offline."); + return true; + } + p.teleport(t); + sender.sendMessage("§eYou have teleported §c" + p.getName() + " §eto §c" + t.getName() + "§e."); + return true; + } + + sender.sendMessage("§c/teleport "); + return true; + } + + + + + + + + + + + + + + + + + + + + + if (cmd.getName().equalsIgnoreCase("teleportall")) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + Player p = (Player) sender; + if (!sender.hasPermission("hcf.command.teleportall") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + + if (args.length > 0) { + sender.sendMessage("§c/teleportall"); + return true; + } + for (Player online : Bukkit.getOnlinePlayers()) { + if (online != p) { + online.teleport(p); + online.sendMessage("§eYou have been teleported to §c" + p.getName() + "§e."); + } + } + p.sendMessage("§eYou have teleported §call players online §eto §cyou§e."); + return true; + } + + + + + + + + + + + + + + + + + + if (cmd.getName().equalsIgnoreCase("tphere")) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + if (!sender.hasPermission("hcf.command.teleport") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + + if (args.length == 1) { + Player p = (Player) sender; + Player t = Bukkit.getPlayer(args[0]); + if (t == null) { + sender.sendMessage(ChatColor.RED + "That player is currently offline"); + return true; + } + t.teleport(p); + p.sendMessage("§eYou have teleported §c" + t.getName() + " §eto your location."); + t.sendMessage("§eYou have been teleported to §c" + p.getName() + "§e."); + return true; + } + sender.sendMessage("§c/tphere "); + return true; + } + + + + + + + + + + + + + + if (cmd.getName().equalsIgnoreCase("tppos")) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + if (!sender.hasPermission("hcf.command.teleport") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + + Player p = (Player) sender; + + if (args.length < 3 || args.length > 3) { + sender.sendMessage("§c/tppos [x] [y] [z]"); + return true; + } + if (!isDouble(args[0]) || !isDouble(args[1]) || !isDouble(args[2])) { + sender.sendMessage("§c/tppos [x] [y] [z]"); + return true; + } + double x = Double.parseDouble(args[0])+0.5; + double y = Double.parseDouble(args[1])+0.5; + double z = Double.parseDouble(args[2])+0.5; + Location loc = new Location(p.getWorld(), x, y, z, p.getLocation().getYaw(), p.getLocation().getPitch()); + p.teleport(loc); + p.sendMessage("§eYou have been teleported to the coordinates §c" + x + "§e, §c" + y + "§e, §c" + z + "§e."); + return true; + } + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/ToggleChatCommand.java b/src/notifyz/hardcorefactions/commands/essentials/ToggleChatCommand.java new file mode 100644 index 0000000..b61dd85 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/ToggleChatCommand.java @@ -0,0 +1,38 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; +import notifyz.hardcorefactions.utilities.user.IUser; + +public class ToggleChatCommand extends ICommandAPI { + private final HardcoreFactionsPlugin plugin; + + public ToggleChatCommand(HardcoreFactionsPlugin plugin) { + super("togglechat", "Toggles global chat visibility."); + this.setAliases(new String[] { "tgc", "toggleglobalchat" }); + this.setUsage("/(command)"); + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable for players."); + return true; + } + Player player = (Player) sender; + IUser baseUser = this.plugin.getUserManagerr().getUser(player.getUniqueId()); + boolean newChatToggled = !baseUser.isGlobalChatVisible(); + baseUser.setGlobalChatVisible(newChatToggled); + sender.sendMessage(ChatColor.YELLOW + "You have toggled global chat visibility " + + (newChatToggled ? new StringBuilder().append(ChatColor.GREEN).append("on").toString() + : new StringBuilder().append(ChatColor.RED).append("off").toString()) + + ChatColor.YELLOW + '.'); + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/ToggleMessagesCommand.java b/src/notifyz/hardcorefactions/commands/essentials/ToggleMessagesCommand.java new file mode 100644 index 0000000..860616d --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/ToggleMessagesCommand.java @@ -0,0 +1,38 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; +import notifyz.hardcorefactions.utilities.user.IUser; + +public class ToggleMessagesCommand extends ICommandAPI { + private final HardcoreFactionsPlugin plugin; + + public ToggleMessagesCommand(HardcoreFactionsPlugin plugin) { + super("togglemessages", "Toggles private messages."); + this.setAliases(new String[] { "togglepm", "toggleprivatemessages" }); + this.setUsage("/(command)"); + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable for players."); + return true; + } + Player player = (Player) sender; + IUser baseUser = this.plugin.getUserManagerr().getUser(player.getUniqueId()); + boolean newToggled = !baseUser.isMessagesVisible(); + baseUser.setMessagesVisible(newToggled); + sender.sendMessage(ChatColor.YELLOW + "You have turned private messages " + + (newToggled ? new StringBuilder().append(ChatColor.GREEN).append("on").toString() + : new StringBuilder().append(ChatColor.RED).append("off").toString()) + + ChatColor.YELLOW + '.'); + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/ToggleSoundsCommand.java b/src/notifyz/hardcorefactions/commands/essentials/ToggleSoundsCommand.java new file mode 100644 index 0000000..c0cf168 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/ToggleSoundsCommand.java @@ -0,0 +1,53 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.ChatColor; +import org.bukkit.Sound; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; +import notifyz.hardcorefactions.utilities.chat.MessageEvent; +import notifyz.hardcorefactions.utilities.user.IUser; + +public class ToggleSoundsCommand extends ICommandAPI implements Listener { + private final HardcoreFactionsPlugin plugin; + + public ToggleSoundsCommand(HardcoreFactionsPlugin plugin) { + super("sounds", "Toggles messaging sounds."); + this.setAliases(new String[] { "pmsounds", "togglepmsounds", "messagingsounds" }); + this.setUsage("/(command) [playerName]"); + this.plugin = plugin; + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable by players."); + return true; + } + Player player = (Player) sender; + IUser baseUser = this.plugin.getUserManagerr().getUser(player.getUniqueId()); + boolean newMessagingSounds = !baseUser.isMessagingSounds() || args.length >= 2 && Boolean.parseBoolean(args[1]); + baseUser.setMessagingSounds(newMessagingSounds); + sender.sendMessage(ChatColor.YELLOW + "Messaging sounds are now " + + (newMessagingSounds ? new StringBuilder().append(ChatColor.GREEN).append("on").toString() + : new StringBuilder().append(ChatColor.RED).append("off").toString()) + + ChatColor.YELLOW + '.'); + return true; + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onPlayerMessage(MessageEvent event) { + Player recipient = event.getRecipient(); + IUser recipientUser = this.plugin.getUserManagerr().getUser(recipient.getUniqueId()); + if (recipientUser.isMessagingSounds()) { + recipient.playSound(recipient.getLocation(), Sound.LEVEL_UP, 1.0f, 1.0f); + } + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/TopCommand.java b/src/notifyz/hardcorefactions/commands/essentials/TopCommand.java new file mode 100644 index 0000000..88667ee --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/TopCommand.java @@ -0,0 +1,35 @@ +package notifyz.hardcorefactions.commands.essentials; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +public class TopCommand implements CommandExecutor { + + public static Location toHighestBlock(final Location l) { + return new Location(l.getWorld(), l.getX(), l.getWorld().getHighestBlockYAt(l.getBlockX(), l.getBlockZ()), l.getZ(), l.getYaw(), l.getPitch()); + } + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + Player p = (Player) sender; + if (cmd.getName().equalsIgnoreCase("top")) { + if (!sender.hasPermission("hcf.command.top") && !sender.hasPermission("hcf.command.*") && !sender.hasPermission("*")) { + sender.sendMessage(ChatColor.RED + "You do not have access to this command."); + return true; + } + p.teleport(toHighestBlock(p.getLocation())); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.teleport-top-message"))); + } + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/UptimeCommand.java b/src/notifyz/hardcorefactions/commands/essentials/UptimeCommand.java new file mode 100644 index 0000000..0953bf2 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/UptimeCommand.java @@ -0,0 +1,34 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.lang.management.ManagementFactory; +import java.util.Locale; +import java.util.TimeZone; + +import org.apache.commons.lang.time.DurationFormatUtils; +import org.apache.commons.lang.time.FastDateFormat; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; + +public class UptimeCommand extends ICommandAPI { + public static FastDateFormat TIME_FORMATTER; + + public UptimeCommand() { + super("uptime", "Check the uptime of the server."); + this.setUsage("/(command)"); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + long startTime = ManagementFactory.getRuntimeMXBean().getStartTime(); + String upTime = DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - startTime, true, true); + sender.sendMessage(ChatColor.BLUE + "Server up-time: " + ChatColor.GOLD + upTime + ChatColor.BLUE + ", started at " + UptimeCommand.TIME_FORMATTER.format(startTime) + "."); + return true; + } + + static { + TIME_FORMATTER = FastDateFormat.getInstance("dd/MM HH:mm:ss", TimeZone.getTimeZone("GMT+1"), Locale.ENGLISH); + } +} diff --git a/src/notifyz/hardcorefactions/commands/essentials/VanishCommand.java b/src/notifyz/hardcorefactions/commands/essentials/VanishCommand.java new file mode 100644 index 0000000..3884958 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/VanishCommand.java @@ -0,0 +1,52 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.Collections; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.chat.Color; + + +public class VanishCommand implements CommandExecutor, TabCompleter { + private final HardcoreFactionsPlugin vanish = HardcoreFactionsPlugin.getPlugin(); + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (player.hasPermission("hcf.command.vanish")) { + if (args.length > 0) { + player.sendMessage(Color.translate("&cUsage: /" + label)); + } else { + if (vanish.getStaffModeListener().isVanished(player)) { + vanish.getStaffModeListener().setVanished(player, false); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.vanish-disabled"))); + } else { + vanish.getStaffModeListener().setVanished(player, true); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.vanish-enabled"))); + } + } + } else { + player.sendMessage(Color.translate("&cYou do not have permissions to execute this command.")); + } + } else { + sender.sendMessage(Color.translate("&cYou can not execute this command on console.")); + } + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + if (args.length > 1) { + return Collections.emptyList(); + } + return null; + } +} \ No newline at end of file diff --git a/src/notifyz/hardcorefactions/commands/essentials/WorldCommand.java b/src/notifyz/hardcorefactions/commands/essentials/WorldCommand.java new file mode 100644 index 0000000..794555d --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/essentials/WorldCommand.java @@ -0,0 +1,70 @@ +package notifyz.hardcorefactions.commands.essentials; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import net.minecraft.util.org.apache.commons.lang3.text.WordUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent; + +import notifyz.hardcorefactions.utilities.api.utilties.command.ICommandAPI; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; + +public class WorldCommand extends ICommandAPI { + public WorldCommand() { + super("world", "Change current world."); + this.setAliases(new String[] { "changeworld", "switchworld" }); + this.setUsage("/(command) "); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, + String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable for players."); + return true; + } + if (args.length < 1) { + sender.sendMessage(ChatColor.RED + this.getUsage()); + return true; + } + World world = Bukkit.getWorld(args[0]); + if (world == null) { + sender.sendMessage(ChatColor.RED + "World '" + args[0] + "' not found."); + return true; + } + Player player = (Player) sender; + if (player.getWorld().equals(world)) { + sender.sendMessage(ChatColor.RED + "You are already in that world."); + return true; + } + Location origin = player.getLocation(); + Location location = new Location(world, origin.getX(), origin.getY(), origin.getZ(), origin.getYaw(), + origin.getPitch()); + player.teleport(location, PlayerTeleportEvent.TeleportCause.COMMAND); + sender.sendMessage(ChatColor.GRAY + "Switched world to '" + world.getName() + ChatColor.YELLOW + " [" + WordUtils.capitalizeFully(world.getEnvironment().name().replace('_', ' ')) + ']' + ChatColor.GRAY + "'."); + return true; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public List onTabComplete(CommandSender sender, Command command, String label, + String[] args) { + if (args.length != 1) { + return Collections.emptyList(); + } + List worlds = Bukkit.getWorlds(); + ArrayList results = new ArrayList(worlds.size()); + for (World world : Bukkit.getWorlds()) { + results.add(world.getName()); + } + return BukkitUtils.getCompletions(args, results); + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/BardEnergyCommand.java b/src/notifyz/hardcorefactions/commands/hcf/BardEnergyCommand.java new file mode 100644 index 0000000..c126af1 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/BardEnergyCommand.java @@ -0,0 +1,117 @@ +package notifyz.hardcorefactions.commands.hcf; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.classes.type.bard.BardClass; + + +public class BardEnergyCommand implements CommandExecutor{ + + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){ + + if(!(sender instanceof Player))return true; + + Player p = (Player) sender; + + if(args.length == 0){ + sender.sendMessage(ChatColor.RED + "Usage: /bardenergy [player]"); + }else if(args.length == 1){ + if(args[0].equalsIgnoreCase("checkenergy")){ + if(HardcoreFactionsPlugin.getInstance().getPvPClassManager().getEquippedClass(p) != null){ + if(!(HardcoreFactionsPlugin.getInstance().getPvPClassManager().getEquippedClass(p) instanceof BardClass)){ + p.sendMessage(ChatColor.RED + "You are not a bard."); + return true; + } + BardClass bard = (BardClass)HardcoreFactionsPlugin.getInstance().getPvPClassManager().getEquippedClass(p); + p.sendMessage(ChatColor.AQUA + "Energy: " + ChatColor.YELLOW + bard.getEnergy(p)); + }else{ + p.sendMessage(ChatColor.RED + "You are not a bard."); + } + }else{ + sender.sendMessage(ChatColor.RED + "Usage: /bardenergy [player]"); + } + }else if(args.length == 2){ + if(args[0].equalsIgnoreCase("checkenergy")){ + Player t = Bukkit.getServer().getPlayer(args[1]); + if(t != null){ + if(HardcoreFactionsPlugin.getInstance().getPvPClassManager().getEquippedClass(t) != null){ + if(!(HardcoreFactionsPlugin.getInstance().getPvPClassManager().getEquippedClass(t) instanceof BardClass)){ + p.sendMessage(ChatColor.RED + t.getName() + " is not a bard."); + return true; + } + BardClass bard = (BardClass)HardcoreFactionsPlugin.getInstance().getPvPClassManager().getEquippedClass(t); + p.sendMessage(ChatColor.AQUA + t.getName() + "'s Energy: " + ChatColor.YELLOW + bard.getEnergy(t)); + }else{ + p.sendMessage(ChatColor.RED + t.getName() + " is not a bard."); + } + }else{ + p.sendMessage(ChatColor.RED + args[1] + " is not online."); + } + }else if(args[0].equalsIgnoreCase("setenergy")){ + Double energy; + + try{ + energy = Double.parseDouble(args[1]); + }catch(Exception e){ + p.sendMessage(ChatColor.RED + "Please enter a valid number eg 1.5!"); + return true; + } + + if(HardcoreFactionsPlugin.getInstance().getPvPClassManager().getEquippedClass(p) != null){ + if(!(HardcoreFactionsPlugin.getInstance().getPvPClassManager().getEquippedClass(p) instanceof BardClass)){ + p.sendMessage(ChatColor.RED + "You are not a bard."); + return true; + } + BardClass bard = (BardClass)HardcoreFactionsPlugin.getInstance().getPvPClassManager().getEquippedClass(p); + bard.setEnergy(p, energy); + p.sendMessage(ChatColor.GREEN + "Set your own energy to " + energy + "!"); + }else{ + p.sendMessage(ChatColor.RED + "You are not a bard."); + } + }else{ + sender.sendMessage(ChatColor.RED + "Usage: /bardenergy [player] [energy]"); + } + }else if(args.length == 3){ + if(args[0].equalsIgnoreCase("setenergy")){ + Double energy; + + try{ + energy = Double.parseDouble(args[2]); + }catch(Exception e){ + p.sendMessage(ChatColor.RED + "Please enter a valid number eg 1.5!"); + return true; + } + + Player t = Bukkit.getServer().getPlayer(args[1]); + if(t != null){ + if(HardcoreFactionsPlugin.getInstance().getPvPClassManager().getEquippedClass(t) != null){ + if(!(HardcoreFactionsPlugin.getInstance().getPvPClassManager().getEquippedClass(t) instanceof BardClass)){ + p.sendMessage(ChatColor.RED + t.getName() + " is not a bard."); + return true; + } + BardClass bard = (BardClass)HardcoreFactionsPlugin.getInstance().getPvPClassManager().getEquippedClass(t); + bard.setEnergy(t, energy); + p.sendMessage(ChatColor.GREEN + "Set " + t.getName() + "'s energy to " + energy + "!"); + }else{ + p.sendMessage(ChatColor.RED + t.getName() + " is not a bard."); + } + }else{ + p.sendMessage(ChatColor.RED + args[1] + " is not online."); + } + + }else{ + sender.sendMessage(ChatColor.RED + "Usage: /bardenergy [player] [energy]"); + } + } + + return true; + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/BottleCommand.java b/src/notifyz/hardcorefactions/commands/hcf/BottleCommand.java new file mode 100644 index 0000000..8fa8bca --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/BottleCommand.java @@ -0,0 +1,117 @@ +package notifyz.hardcorefactions.commands.hcf; + +import org.bukkit.plugin.*; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.listeners.hcf.ExpMultiplierListener; + +import org.bukkit.command.*; +import org.bukkit.entity.*; +import org.bukkit.inventory.*; +import org.bukkit.event.player.*; +import org.bukkit.event.block.*; +import org.bukkit.*; +import org.bukkit.inventory.meta.*; +import org.bukkit.event.entity.*; +import org.bukkit.event.*; +import java.text.*; +import java.util.*; + +public class BottleCommand implements CommandExecutor, Listener +{ + private final Map thrownExpBottleIntegerMap; + private final String name; + + public BottleCommand(final HardcoreFactionsPlugin hcf) { + this.name = ChatColor.GOLD + "XP Bottle"; + hcf.getServer().getPluginManager().registerEvents((Listener)this, (Plugin)hcf); + this.thrownExpBottleIntegerMap = new HashMap(); + } + + public boolean onCommand(final CommandSender sender, final Command cmd, final String cmdLabel, final String[] args) { + if (sender instanceof Player) { + final Player player = (Player)sender; + final int exp = player.getTotalExperience(); + if (exp == 0) { + player.sendMessage(ChatColor.RED + "You have no XP"); + } + else { + final ItemStack bottle = this.createBottle(player); + player.setTotalExperience(0); + player.setLevel(0); + player.setExp(0.0f); + if (player.getInventory().addItem(new ItemStack[] { bottle }).isEmpty()) { + player.sendMessage(ChatColor.RED + "Created an experience bottle"); + } + else { + player.sendMessage(ChatColor.RED + "You have no space in your inventory"); + } + } + } + else { + sender.sendMessage(ChatColor.RED + "You must be a player to execute this command"); + } + return true; + } + + @EventHandler + public void onPlayerClick(final PlayerInteractEvent e) { + final Player player = e.getPlayer(); + final ItemStack item = e.getItem(); + if (e.getAction() == Action.RIGHT_CLICK_AIR || (e.getAction() == Action.RIGHT_CLICK_BLOCK && item != null && item.getType() == Material.EXP_BOTTLE)) { + final ItemMeta meta = item.getItemMeta(); + final String name = meta.getDisplayName(); + if (meta.hasDisplayName() && meta.hasLore() && name.equals(this.name) && meta.getLore().size() == 3) { + final String loreline = meta.getLore().get(2); + e.setCancelled(true); + Integer xp; + try { + xp = Integer.parseInt(loreline.substring((ChatColor.YELLOW + "Experience: " + ChatColor.GRAY).length(), loreline.length())); + } + catch (Exception ex) { + player.sendMessage(ChatColor.RED + "Invalid XP bottle"); + return; + } + final ThrownExpBottle thrownExpBottle = (ThrownExpBottle)player.launchProjectile(ThrownExpBottle.class); + this.thrownExpBottleIntegerMap.put(thrownExpBottle, xp); + final ItemStack hand = item.clone(); + hand.setAmount(hand.getAmount() - 1); + player.getInventory().setItemInHand(hand); + player.updateInventory(); + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onXPEvent(final ExpBottleEvent e) { + final Integer xp = this.thrownExpBottleIntegerMap.remove(e.getEntity()); + if (xp != null) { + e.setExperience((int)Math.round(xp / ExpMultiplierListener.DEFAULT_MULTIPLER)); + } + } + + public int getExpToLevel(final int expLevel) { + return (expLevel >= 30) ? (62 + (expLevel - 30) * 7) : ((expLevel >= 15) ? (17 + (expLevel - 15) * 3) : 17); + } + + public int fromXP(final int levels, final float exp) { + int xp = 0; + for (int i = levels; i >= 0; --i) { + xp += this.getExpToLevel(i); + } + xp -= levels; + return xp; + } + + public ItemStack createBottle(final Player player) { + final int exp = this.fromXP(player.getLevel(), player.getExp()); + final int levels = player.getLevel(); + final float remainder = player.getExp(); + final ItemStack itemStack = new ItemStack(Material.EXP_BOTTLE, 1); + final ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.setDisplayName(this.name); + itemMeta.setLore(Arrays.asList(ChatColor.YELLOW + "Owner: " + ChatColor.GRAY + player.getName(), ChatColor.YELLOW + "Worth: " + ChatColor.GRAY + new DecimalFormat("#.#").format(levels + remainder) + " Levels", ChatColor.YELLOW + "Experience: " + ChatColor.GRAY + exp)); + itemStack.setItemMeta(itemMeta); + return itemStack; + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/CobbleCommand.java b/src/notifyz/hardcorefactions/commands/hcf/CobbleCommand.java new file mode 100644 index 0000000..94c7b4a --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/CobbleCommand.java @@ -0,0 +1,59 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.Set; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import com.google.common.collect.Sets; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +public class CobbleCommand implements Listener, CommandExecutor { + + public static Set disabled = Sets.newHashSet(); + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "Only players can execute this command."); + return true; + } + + Player player = (Player) sender; + + if (disabled.contains(player)) { + disabled.remove(player); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.cobble-enabled"))); + } else { + disabled.add(player); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.cobble-disabled"))); + } + + return true; + } + + @EventHandler + public void onPlayerPickup(PlayerQuitEvent event) { + disabled.remove(event.getPlayer()); + } + + @EventHandler + public void onPlayerPickup(PlayerPickupItemEvent event) { + Material type = event.getItem().getItemStack().getType(); + if (type == Material.STONE || type == Material.COBBLESTONE) { + if (disabled.contains(event.getPlayer())) { + event.setCancelled(true); + } + } + } + +} \ No newline at end of file diff --git a/src/notifyz/hardcorefactions/commands/hcf/CrowbarCommand.java b/src/notifyz/hardcorefactions/commands/hcf/CrowbarCommand.java new file mode 100644 index 0000000..000db1e --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/CrowbarCommand.java @@ -0,0 +1,49 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.Collections; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.utilities.crowbar.Crowbar; + +public class CrowbarCommand implements CommandExecutor, TabCompleter { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (args.length >= 2) { + if (args[0].equalsIgnoreCase("give")) { + Player target = Bukkit.getPlayer(args[1]); + + if (target == null) { + sender.sendMessage(ChatColor.RED + "Player '" + args[1] + "' not found."); + return true; + } + + if (target.getInventory().firstEmpty() == -1) { + sender.sendMessage(ChatColor.RED + target.getName() + " has no empty slot."); + return true; + } + + target.getInventory().addItem(new Crowbar().toItemStack().get()); + target.sendMessage(ChatColor.RED + sender.getName() + " has given you a crowbar."); + sender.sendMessage(ChatColor.RED + "You have given " + target.getName() + " a crowbar."); + return true; + } + } + + sender.sendMessage(ChatColor.RED + "Usage: /" + label + " give "); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return args.length == 2 ? null : Collections.emptyList(); + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/EOTWCommand.java b/src/notifyz/hardcorefactions/commands/hcf/EOTWCommand.java new file mode 100644 index 0000000..d714947 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/EOTWCommand.java @@ -0,0 +1,87 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.Collections; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.conversations.Conversable; +import org.bukkit.conversations.ConversationContext; +import org.bukkit.conversations.ConversationFactory; +import org.bukkit.conversations.Prompt; +import org.bukkit.conversations.StringPrompt; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.games.eotw.EOTWHandler; + +/** + * Command used to set the server in EOTW mode. + */ +public class EOTWCommand implements CommandExecutor, TabCompleter { + + private final ConversationFactory factory; + + public EOTWCommand(HardcoreFactionsPlugin plugin) { + factory = new ConversationFactory(plugin). + withFirstPrompt(new EotwPrompt()). + withEscapeSequence("/no"). + withTimeout(10). + withModality(false). + withLocalEcho(true); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof ConsoleCommandSender)) { + sender.sendMessage(ChatColor.RED + "This command can be only executed from console."); + return true; + } + + Conversable conversable = (Conversable) sender; + conversable.beginConversation(factory.buildConversation(conversable)); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return Collections.emptyList(); + } + + private static final class EotwPrompt extends StringPrompt { + + @Override + public String getPromptText(ConversationContext context) { + return ChatColor.YELLOW + "Are you sure you want to do this? The server will be in EOTW mode," + + " If EOTW mode is active, all claims whilst making Spawn a KOTH. " + + "You will still have " + EOTWHandler.EOTW_WARMUP_WAIT_SECONDS + " seconds to cancel this using " + + "the same command though. Type " + ChatColor.GREEN + "yes" + ChatColor.YELLOW + " to confirm or " + + ChatColor.RED + "no" + ChatColor.YELLOW + " to deny."; + } + + @Override + public Prompt acceptInput(final ConversationContext context, final String string) { + if (string.equalsIgnoreCase("yes")) { + boolean newStatus = !HardcoreFactionsPlugin.getPlugin().getEotwHandler().isEndOfTheWorld(); + Conversable conversable = context.getForWhom(); + if (conversable instanceof CommandSender) { + Command.broadcastCommandMessage((CommandSender) conversable, ChatColor.GOLD + "Set EOTW mode to " + + newStatus + '.'); + } else + conversable.sendRawMessage(ChatColor.GOLD + "Set EOTW mode to " + newStatus + '.'); + + HardcoreFactionsPlugin.getPlugin().getEotwHandler().setEndOfTheWorld(newStatus); + } else if (string.equalsIgnoreCase("no")) { + context.getForWhom().sendRawMessage(ChatColor.BLUE + "Cancelled the process of setting EOTW mode."); + } else { + context.getForWhom().sendRawMessage(ChatColor.RED + "Unrecognized response. Process of toggling " + + "EOTW mode has been cancelled."); + } + + return Prompt.END_OF_CONVERSATION; + } + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/EOTWReviveCommand.java b/src/notifyz/hardcorefactions/commands/hcf/EOTWReviveCommand.java new file mode 100644 index 0000000..6ae191b --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/EOTWReviveCommand.java @@ -0,0 +1,74 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.deathban.Deathban; +import notifyz.hardcorefactions.listeners.hcf.EOTWListener; +import notifyz.hardcorefactions.team.utilities.TeamUser; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; + +public class EOTWReviveCommand implements CommandExecutor, TabCompleter { + + public EOTWReviveCommand(HardcoreFactionsPlugin plugin) { + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (args.length == 0) { + sender.sendMessage(ChatColor.RED + "Usage: /" + label + " "); + return true; + } + + OfflinePlayer target = Bukkit.getOfflinePlayer(args[0]); //TODO: breaking + + if (!target.hasPlayedBefore() && !target.isOnline()) { + sender.sendMessage(ChatColor.GOLD + "Player '" + ChatColor.WHITE + args[0] + + ChatColor.GOLD + "' not found."); + return true; + } + + UUID targetUUID = target.getUniqueId(); + TeamUser factionTarget = HardcoreFactionsPlugin.getPlugin().getUserManager().getUser(targetUUID); + + if ((!HardcoreFactionsPlugin.getInstance().getEotwHandler().isEndOfTheWorld()) && (!EOTWListener.dead.contains(factionTarget))) { + sender.sendMessage(ChatColor.RED + "EOTW is not enabled"); + return true; + } + + EOTWListener.dead.remove(target.getUniqueId()); + sender.sendMessage(ChatColor.RED.toString() + target.getName() + " has been EOTW revived."); + + return false; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + if (args.length != 1) { + return Collections.emptyList(); + } + List results = new ArrayList(); + for (TeamUser factionUser : HardcoreFactionsPlugin.getPlugin().getUserManager().getUsers().values()) { + Deathban deathban = factionUser.getDeathban(); + if ((deathban != null) && (deathban.isActive())) { + OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(factionUser.getUserUUID()); + String name = offlinePlayer.getName(); + if (name != null) { + results.add(name); + } + } + } + return BukkitUtils.getCompletions(args, results); + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/EconomyCommand.java b/src/notifyz/hardcorefactions/commands/hcf/EconomyCommand.java new file mode 100644 index 0000000..900be0c --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/EconomyCommand.java @@ -0,0 +1,183 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.economy.Economy; +import notifyz.hardcorefactions.utilities.api.utilties.command.IConstantsAPI; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; +import notifyz.hardcorefactions.utilities.utils.JavaUtils; + +/** + * Command used to check a players' balance. + */ +public class EconomyCommand implements CommandExecutor, TabCompleter { + + // The max amount of players shown in '/bal top'. + @SuppressWarnings("unused") + private static final int MAX_ENTRIES = 10; + + private final HardcoreFactionsPlugin plugin; + + public EconomyCommand(HardcoreFactionsPlugin plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) { + OfflinePlayer target; + if (args.length > 0 && sender.hasPermission(command.getPermission() + ".staff")) { + target = BukkitUtils.offlinePlayerWithNameOrUUID(args[0]); + } else if (sender instanceof Player) { + target = (Player) sender; + } else { + sender.sendMessage(ChatColor.RED + "Usage: /" + label + " "); + return true; + } + + if (!target.hasPlayedBefore() && !target.isOnline()) { + sender.sendMessage(String.format(IConstantsAPI.PLAYER_WITH_NAME_OR_UUID_NOT_FOUND, args[0])); + return true; + } + + UUID uuid = target.getUniqueId(); + int balance = plugin.getEconomyManager().getBalance(uuid); + + if (args.length < 2) { + sender.sendMessage(ChatColor.YELLOW + (sender.equals(target) ? "Your balance" : "Balance of " + + target.getName()) + " is " + ChatColor.AQUA + Economy.ECONOMY_SYMBOL + + balance + ChatColor.YELLOW + '.'); + + return true; + } + + if (args[1].equalsIgnoreCase("give") || args[1].equalsIgnoreCase("add")) { + if (args.length < 3) { + sender.sendMessage(ChatColor.RED + "Usage: /" + label + ' ' + target.getName() + ' ' + + args[1] + " "); + return true; + } + + if (!sender.hasPermission(command.getPermission() + ".staff")) { + return true; + } + + Integer amount = JavaUtils.tryParseInt(args[2]); + + if (amount == null) { + sender.sendMessage(ChatColor.RED + "'" + args[2] + "' is not a valid number."); + return true; + } + + int newBalance = plugin.getEconomyManager().addBalance(uuid, amount); + sender.sendMessage(new String[]{"" + + ChatColor.YELLOW + + "Added " + ChatColor.AQUA + Economy.ECONOMY_SYMBOL + JavaUtils.format(amount) + ChatColor.YELLOW + " to balance of " + + target.getName() + '.', ChatColor.YELLOW + "Balance of " + ChatColor.AQUA + target.getName() + " is now " + ChatColor.AQUA + + Economy.ECONOMY_SYMBOL + newBalance + ChatColor.YELLOW + '.' + }); + + return true; + } + + if (args[1].equalsIgnoreCase("take") || args[1].equalsIgnoreCase("negate") + || args[1].equalsIgnoreCase("minus") || args[1].equalsIgnoreCase("subtract")) { + + if (args.length < 3) { + sender.sendMessage(ChatColor.RED + "Usage: /" + label + ' ' + target.getName() + ' ' + + args[1] + " "); + return true; + } + + if (!sender.hasPermission(command.getPermission() + ".staff")) { + return true; + } + + Integer amount = JavaUtils.tryParseInt(args[2]); + + if (amount == null) { + sender.sendMessage(ChatColor.RED + "'" + args[2] + "' is not a valid number."); + return true; + } + + int newBalance = plugin.getEconomyManager().subtractBalance(uuid, amount); + + sender.sendMessage(new String[]{"" + + ChatColor.YELLOW + "Taken " + ChatColor.AQUA + Economy.ECONOMY_SYMBOL + JavaUtils.format(amount) + ChatColor.YELLOW + + " from balance of " + ChatColor.AQUA + target.getName() + ChatColor.YELLOW + '.', ChatColor.YELLOW + "Balance of " + ChatColor.AQUA + target.getName() + + " is now " + ChatColor.AQUA + Economy.ECONOMY_SYMBOL + newBalance + ChatColor.YELLOW + '.' + }); + + return true; + } + + if (args[1].equalsIgnoreCase("set")) { + if (args.length < 3) { + sender.sendMessage(ChatColor.RED + "Usage: /" + label + ' ' + target.getName() + + ' ' + args[1] + " "); + return true; + } + + if (!sender.hasPermission(command.getPermission() + ".staff")) { + return true; + } + + Integer amount = JavaUtils.tryParseInt(args[2]); + + if (amount == null) { + sender.sendMessage(ChatColor.RED + "'" + args[2] + "' is not a valid number."); + return true; + } + + int newBalance = plugin.getEconomyManager().setBalance(uuid, amount); + sender.sendMessage(ChatColor.YELLOW + "Set balance of " + target.getName() + " to " + + Economy.ECONOMY_SYMBOL + JavaUtils.format(newBalance) + '.'); + return true; + } + + sender.sendMessage(ChatColor.YELLOW + (sender.equals(target) ? "Your balance" : "Balance of " + ChatColor.AQUA + target.getName()) + + ChatColor.YELLOW + " is " + ChatColor.AQUA + Economy.ECONOMY_SYMBOL + balance + ChatColor.YELLOW + '.'); + + return true; + } + + private static final ImmutableList COMPLETIONS_SECOND = ImmutableList.of("add", "set", "take"); + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + switch (args.length) { + case 1: + List results = Lists.newArrayList("top"); + if (sender.hasPermission(command.getPermission() + ".staff")) { + Player senderPlayer = sender instanceof Player ? (Player) sender : null; + for (Player player : Bukkit.getOnlinePlayers()) { + if (senderPlayer == null || senderPlayer.canSee(player)) { + results.add(player.getName()); + } + } + } + + return BukkitUtils.getCompletions(args, results); + case 2: + if (!args[0].equals("top") && sender.hasPermission(command.getPermission() + ".staff")) { + return BukkitUtils.getCompletions(args, COMPLETIONS_SECOND); + } + default: + return Collections.emptyList(); + } + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/EndPortalCommand.java b/src/notifyz/hardcorefactions/commands/hcf/EndPortalCommand.java new file mode 100644 index 0000000..8aaebd5 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/EndPortalCommand.java @@ -0,0 +1,176 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.scheduler.BukkitRunnable; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +public class EndPortalCommand implements CommandExecutor, Listener { + private final String ITEM_DISPLAYNAME; + private HardcoreFactionsPlugin plugin; + private Map playerSelections; + + public EndPortalCommand(final HardcoreFactionsPlugin plugin) { + this.plugin = plugin; + this.ITEM_DISPLAYNAME = ChatColor.GREEN + "Endportal Maker"; + this.playerSelections = new HashMap(); + this.plugin.getServer().getPluginManager().registerEvents(this, this.plugin); + } + + @EventHandler + public void onInteract(final PlayerInteractEvent e) { + final Player p = e.getPlayer(); + if (e.hasItem() && e.getClickedBlock() != null) { + final ItemStack itemStack = e.getItem(); + final Block b = e.getClickedBlock(); + if (itemStack.getItemMeta().hasDisplayName() + && itemStack.getItemMeta().getDisplayName().equals(this.ITEM_DISPLAYNAME)) { + final LocationPair locationPair = this.playerSelections.computeIfAbsent(e.getPlayer().getUniqueId(), + func -> this.playerSelections.put(p.getUniqueId(), new LocationPair(null, null))); + if (e.getAction() == Action.LEFT_CLICK_BLOCK) { + if (b.getType() != Material.ENDER_PORTAL_FRAME) { + e.getPlayer().sendMessage(ChatColor.RED + "You must select an end portal frame."); + return; + } + locationPair.setFirstLoc(b.getLocation()); + e.getPlayer().sendMessage(ChatColor.GREEN + "Successfully set the first location."); + } else if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (b.getType() != Material.ENDER_PORTAL_FRAME) { + e.getPlayer().sendMessage(ChatColor.RED + "You must select an end portal frame."); + return; + } + if (locationPair.getFirstLoc() == null) { + e.getPlayer().sendMessage(ChatColor.RED + + "Please set the first location (by left clicking the end portal frame)."); + return; + } + locationPair.setSecondLoc(b.getLocation()); + e.getPlayer().sendMessage(ChatColor.GREEN + "Successfully set the second location."); + final Location firstLoc = locationPair.getFirstLoc(); + final Location secondLoc = locationPair.getSecondLoc(); + if (firstLoc.distance(secondLoc) > 6.0) { + e.getPlayer().sendMessage(ChatColor.RED + "You cannot create an end portal that big."); + return; + } + if (firstLoc.getBlockY() != secondLoc.getBlockY()) { + e.getPlayer() + .sendMessage(ChatColor.RED + "Make sure that the portals have the same elevation."); + return; + } + final int minX = Math.min(firstLoc.getBlockX(), secondLoc.getBlockX()); + final int minY = Math.min(firstLoc.getBlockY(), secondLoc.getBlockY()); + final int minZ = Math.min(firstLoc.getBlockZ(), secondLoc.getBlockZ()); + final int maxX = Math.max(firstLoc.getBlockX(), secondLoc.getBlockX()); + final int maxY = Math.max(firstLoc.getBlockY(), secondLoc.getBlockY()); + final int maxZ = Math.max(firstLoc.getBlockZ(), secondLoc.getBlockZ()); + for (int x = minX; x <= maxX; ++x) { + for (int y = minY; y <= maxY; ++y) { + for (int z = minZ; z <= maxZ; ++z) { + final Block block = b.getWorld().getBlockAt(x, y, z); + if (block.isEmpty()) { + block.setType(Material.ENDER_PORTAL); + } + } + } + } + e.setCancelled(true); + new BukkitRunnable() { + @Override + public void run() { + e.getPlayer().setItemInHand((ItemStack) null); + e.getPlayer().updateInventory(); + } + }.runTask(this.plugin); + e.getPlayer().sendMessage(ChatColor.GREEN + "Created an end portal"); + this.playerSelections.remove(p.getUniqueId()); + } + } + } + } + + @EventHandler + public void onDrop(final PlayerDropItemEvent e) { + final ItemStack itemStack = e.getItemDrop().getItemStack(); + if (itemStack.getItemMeta().hasDisplayName() + && itemStack.getItemMeta().getDisplayName().equals(this.ITEM_DISPLAYNAME)) { + e.getItemDrop().remove(); + } + } + + @EventHandler + public void onQuit(final PlayerQuitEvent e) { + this.playerSelections.remove(e.getPlayer().getUniqueId()); + } + + @EventHandler + public void onKick(final PlayerKickEvent e) { + this.playerSelections.remove(e.getPlayer().getUniqueId()); + } + + @Override + public boolean onCommand(final CommandSender s, final Command c, final String alias, final String[] args) { + if (!(s instanceof Player)) { + return true; + } + Player p = (Player) s; + if (p.getInventory().firstEmpty() == -1) { + return true; + } + if(!p.hasPermission("hcf.command.endportal")) { + s.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + final ItemStack portalMaker = new ItemStack(Material.GOLD_SWORD); + final ItemMeta itemMeta = portalMaker.getItemMeta(); + itemMeta.setDisplayName(this.ITEM_DISPLAYNAME); + portalMaker.setItemMeta(itemMeta); + p.getInventory().addItem(new ItemStack[] { portalMaker }); + return true; + } + + private class LocationPair { + private Location firstLoc; + private Location secondLoc; + + public LocationPair(final Location firstLoc, final Location secondLoc) { + this.firstLoc = firstLoc; + this.secondLoc = secondLoc; + } + + public Location getFirstLoc() { + return this.firstLoc; + } + + public void setFirstLoc(final Location firstLoc) { + this.firstLoc = firstLoc; + } + + public Location getSecondLoc() { + return this.secondLoc; + } + + public void setSecondLoc(final Location secondLoc) { + this.secondLoc = secondLoc; + } + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/FFACommand.java b/src/notifyz/hardcorefactions/commands/hcf/FFACommand.java new file mode 100644 index 0000000..b54ac97 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/FFACommand.java @@ -0,0 +1,36 @@ +package notifyz.hardcorefactions.commands.hcf; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.team.type.PlayerTeam; +import notifyz.hardcorefactions.team.utilities.ITeam; + +public class FFACommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (args.length == 0 || args.length > 1 || args.length < 1) { + sender.sendMessage(ChatColor.RED + "Usage: /ffa "); + return true; + } + + Bukkit.broadcastMessage(ChatColor.DARK_RED + ChatColor.BOLD.toString() + "The FFA has been started!"); + + for (ITeam faction : HardcoreFactionsPlugin.getPlugin().getFactionManager().getFactions()) { + if (faction instanceof PlayerTeam) { + HardcoreFactionsPlugin.getPlugin().getFactionManager().removeFaction(faction, sender); + } + } + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "freezeall"); + + sender.sendMessage(ChatColor.GREEN + "All player factions have been removed."); + return true; + } + +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/FocusCommand.java b/src/notifyz/hardcorefactions/commands/hcf/FocusCommand.java new file mode 100644 index 0000000..77d0cf9 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/FocusCommand.java @@ -0,0 +1,184 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.Set; +import java.util.UUID; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.team.type.PlayerTeam; +import notifyz.hardcorefactions.team.utilities.ITeam; + +public class FocusCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String[] args) { + if (!(sender instanceof Player)) { + return true; + } + + Player player = (Player) sender; + PlayerTeam playerFaction = HardcoreFactionsPlugin.getPlugin().getFactionManager().getPlayerFaction(player); + + if (playerFaction == null) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.focus-no-faction"))); + return true; + } + + if (args.length == 0) { + player.sendMessage(ChatColor.RED + "Usage: /focus "); + return true; + } + + String key = StringUtils.join(args).replace(" ", ""); + PlayerTeam playerFaction2 = HardcoreFactionsPlugin.getPlugin().getFactionManager().getPlayerFaction(player); + + if (playerFaction2 == null) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.focus-player-not-online"))); + return true; + } + + if (playerFaction2.getFocused() == null) { + Player playerMatch = Bukkit.getPlayer(key); + PlayerTeam toFocus; + + if (playerMatch == null) { + ITeam faction = HardcoreFactionsPlugin.getPlugin().getFactionManager().getFaction(key); + + if (faction == null || !(faction instanceof PlayerTeam)) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.focus-target-no-faction"))); + return true; + } + + toFocus = (PlayerTeam) faction; + } else { + toFocus = HardcoreFactionsPlugin.getPlugin().getFactionManager().getPlayerFaction(playerMatch); + + if (toFocus == null) { + ITeam faction = HardcoreFactionsPlugin.getPlugin().getFactionManager().getFaction(key); + + if (faction == null || !(faction instanceof PlayerTeam)) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.focus-target-no-faction"))); + return true; + } + + toFocus = (PlayerTeam) faction; + } + } + + if (playerFaction2.equals(toFocus)) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.focus-no-yourself"))); + return true; + } + playerFaction2.broadcast(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.focused-target").replace("%target%", key).replace("%player%", player.getName()))); + PlayerTeam ToFocus = toFocus; + + new BukkitRunnable() { + @Override + public void run() { + focus(playerFaction2, ToFocus, false); + } + }.runTaskAsynchronously(HardcoreFactionsPlugin.getPlugin()); + + new BukkitRunnable() { + @Override + public void run() { + new BukkitRunnable() { + @Override + public void run() { + focus(playerFaction, null, true); + } + }.runTaskAsynchronously(HardcoreFactionsPlugin.getPlugin()); + playerFaction.setFocused(null); + } + }.runTaskLater(HardcoreFactionsPlugin.getPlugin(), 20 * 60 * 10); + } else { + if (playerFaction.getFocused() != null) { + playerFaction.broadcast(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.unfocused-target").replace("%player%", player.getName()).replace("%target%", key))); + } + + new BukkitRunnable() { + @Override + public void run() { + focus(playerFaction, null, true); + } + }.runTaskAsynchronously(HardcoreFactionsPlugin.getPlugin()); + playerFaction.setFocused(null); + } + + return false; + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + PlayerTeam playerFaction = HardcoreFactionsPlugin.getPlugin().getFactionManager().getPlayerFaction(player.getUniqueId()); + UUID focused = playerFaction.getFocused(); + + if (focused != null) { + focus(playerFaction, (PlayerTeam) HardcoreFactionsPlugin.getPlugin().getFactionManager().getFaction(playerFaction.getFocused()), false); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent event) { + Player player = event.getEntity(); + PlayerTeam playerFaction = HardcoreFactionsPlugin.getPlugin().getFactionManager().getPlayerFaction(player.getUniqueId()); + + if (playerFaction == null) return; + for (ITeam faction : HardcoreFactionsPlugin.getPlugin().getFactionManager().getFactions()) { + if (faction instanceof PlayerTeam) { + if (((PlayerTeam) faction).getFocused() == null) continue; + if (((PlayerTeam) faction).getFocused().equals(player.getUniqueId())) { + focus((PlayerTeam) faction, playerFaction, true); + } + } + } + } + + private void focus(PlayerTeam playerFaction, PlayerTeam toFocus, boolean unfocus) { + if (!unfocus) { + playerFaction.setFocused(toFocus.getUniqueID()); + } + for (Player player : playerFaction.getOnlinePlayers()) { + Scoreboard scoreboard = player.getScoreboard(); + if (scoreboard != Bukkit.getScoreboardManager().getMainScoreboard()) { + Team team = scoreboard.getTeam("focus"); + if (team != null) { + Set offlinePlayers = team.getPlayers(); + for (OfflinePlayer offlinePlayer : offlinePlayers) { + Player other = offlinePlayer.getPlayer(); + if (other != null) { + HardcoreFactionsPlugin.getPlugin().getScoreboardHandler().getPlayerBoard(player.getUniqueId()).addUpdate(other); + } + } + team.unregister(); + } else { + team = scoreboard.registerNewTeam("focus"); + team.setPrefix(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("scoreboard.focus-nametag-color"))); + } + if (unfocus) { + break; + } + for (Player playerToFocus : toFocus.getOnlinePlayers()) { + team.addEntry(playerToFocus.getName()); + } + } + } + } + +} \ No newline at end of file diff --git a/src/notifyz/hardcorefactions/commands/hcf/InfoCommand.java b/src/notifyz/hardcorefactions/commands/hcf/InfoCommand.java new file mode 100644 index 0000000..6096708 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/InfoCommand.java @@ -0,0 +1,73 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.Collections; +import java.util.List; + +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; +import org.bukkit.entity.Player; + +import com.google.common.collect.ImmutableMap; + +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; + + +/** + * Created by Donovan on 5/30/2016. + */ +public class InfoCommand implements CommandExecutor, TabCompleter { + + protected static final ImmutableMap ENVIRONMENT_MAPPINGS = /*TODO:Maps.immutableEnumMap*/(ImmutableMap.of( + World.Environment.NETHER, "Nether", + World.Environment.NORMAL, "Overworld", + World.Environment.THE_END, "The End" + )); + + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (args.length == 0) { + sender.sendMessage(ChatColor.RED + "Usage: /" + "info "); + return true; + + } + + Player target = Bukkit.getPlayer(args[0]); + + if (target == null) { + sender.sendMessage(ChatColor.RED + "That player is not online."); + return true; + } + final int version = ((CraftPlayer) target).getHandle().playerConnection.networkManager.getVersion(); + Player player = target; + sender.sendMessage(ChatColor.GOLD.toString() + ChatColor.STRIKETHROUGH + "---------------------------------"); + sender.sendMessage(ChatColor.GOLD + "Information for player " + target.getName()); + sender.sendMessage(ChatColor.YELLOW + "Version:" + " " + ChatColor.AQUA + version); + sender.sendMessage(ChatColor.YELLOW + "Gamemode:" + " " + ChatColor.AQUA + player.getGameMode()); + Location location = player.getLocation(); + sender.sendMessage(ChatColor.YELLOW + "Idle Time: " + ChatColor.AQUA + DurationFormatUtils.formatDurationWords(BukkitUtils.getIdleTime(target), true, true)); + sender.sendMessage(ChatColor.YELLOW + "Location:" + " " + ChatColor.AQUA + "x: " + player.getLocation().getBlockX() + " " + "z: " + player.getLocation().getBlockZ() + " (" + ENVIRONMENT_MAPPINGS.get(location.getWorld().getEnvironment()) + ")"); + sender.sendMessage(ChatColor.YELLOW + "Ping: " + ChatColor.AQUA + ((CraftPlayer) player).getHandle().ping + "ms"); + sender.sendMessage(ChatColor.GOLD.toString() + ChatColor.STRIKETHROUGH + "---------------------------------"); + sender.sendMessage(ChatColor.YELLOW + "Version IDs:"); + sender.sendMessage(ChatColor.AQUA + "1.8" + " = " + "47"); + sender.sendMessage(ChatColor.AQUA + "1.7.6 - 1.7.10" + " = " + "5"); + sender.sendMessage(ChatColor.AQUA + "1.7.1 - 1.7.5" + " = " + "4"); + sender.sendMessage(ChatColor.GOLD.toString() + ChatColor.STRIKETHROUGH + "---------------------------------"); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return Collections.emptyList(); + + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/KitMapGUICommand.java b/src/notifyz/hardcorefactions/commands/hcf/KitMapGUICommand.java new file mode 100644 index 0000000..c15ad86 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/KitMapGUICommand.java @@ -0,0 +1,112 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.List; +import java.util.Random; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +public class KitMapGUICommand + implements CommandExecutor +{ + private List glassList = HardcoreFactionsPlugin.getInstance().getConfig().getShortList("kitmap-gui.id-animation"); + + @Override +public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage("Only players !"); + return true; + } + Player player = (Player)sender; + if (HardcoreFactionsPlugin.getInstance().getConfig().getBoolean("kitmap-gui.enabled")) + { + openGUI(player); + new KitMapTask(player); + } + else + { + player.sendMessage(ChatColor.RED + "You cannot execute that command right now."); + } + return true; + } + + public void openGUI(Player player) + { + Inventory inv = Bukkit.createInventory(null, 54, ChatColor.translateAlternateColorCodes('&' , HardcoreFactionsPlugin.getInstance().getConfig().getString("kitmap-gui.title"))); + ItemStack helmet = new ItemStack(Material.DIAMOND_HELMET); + ItemStack chestplate = new ItemStack(Material.DIAMOND_CHESTPLATE); + ItemStack leggigs = new ItemStack(Material.DIAMOND_LEGGINGS); + ItemStack boots = new ItemStack(Material.DIAMOND_BOOTS); + ItemStack sword = new ItemStack(Material.DIAMOND_SWORD); + ItemStack bow = new ItemStack(Material.BOW); + + helmet.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, HardcoreFactionsPlugin.getPlugin().getConfiguration().getEnchantmentLimit(Enchantment.PROTECTION_ENVIRONMENTAL)); + chestplate.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, HardcoreFactionsPlugin.getPlugin().getConfiguration().getEnchantmentLimit(Enchantment.PROTECTION_ENVIRONMENTAL)); + leggigs.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, HardcoreFactionsPlugin.getPlugin().getConfiguration().getEnchantmentLimit(Enchantment.PROTECTION_ENVIRONMENTAL)); + boots.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, HardcoreFactionsPlugin.getPlugin().getConfiguration().getEnchantmentLimit(Enchantment.PROTECTION_ENVIRONMENTAL)); + sword.addEnchantment(Enchantment.DAMAGE_ALL, HardcoreFactionsPlugin.getPlugin().getConfiguration().getEnchantmentLimit(Enchantment.DAMAGE_ALL)); + bow.addEnchantment(Enchantment.ARROW_DAMAGE, HardcoreFactionsPlugin.getPlugin().getConfiguration().getEnchantmentLimit(Enchantment.ARROW_DAMAGE)); + if (HardcoreFactionsPlugin.getPlugin().getConfiguration().getEnchantmentLimit(Enchantment.ARROW_FIRE) != 0) { + bow.addEnchantment(Enchantment.ARROW_FIRE, HardcoreFactionsPlugin.getPlugin().getConfiguration().getEnchantmentLimit(Enchantment.ARROW_FIRE)); + } + for (int i = 0; i < 54; i++) { + inv.setItem(i, new ItemStack(Material.STAINED_GLASS_PANE)); + } + inv.setItem(13, helmet); + inv.setItem(21, sword); + inv.setItem(22, chestplate); + inv.setItem(23, bow); + inv.setItem(31, leggigs); + inv.setItem(40, boots); + player.openInventory(inv); + } + + private class KitMapTask + extends BukkitRunnable + { + Player player; + + public KitMapTask(Player p) + { + this.player = p; + runTaskTimer(HardcoreFactionsPlugin.getInstance(), 10L, 5L); + } + + @Override + public void run() + { + if ((!this.player.isOnline()) || (!this.player.getOpenInventory().getTopInventory().getTitle().equalsIgnoreCase(ChatColor.translateAlternateColorCodes('&' , HardcoreFactionsPlugin.getInstance().getConfig().getString("kitmap-gui.title"))))) + { + cancel(); + } + else + { + Inventory inv = this.player.getOpenInventory().getTopInventory(); + ItemStack[] arrayOfItemStack; + int j = (arrayOfItemStack = inv.getContents()).length; + for (int i = 0; i < j; i++) + { + ItemStack item = arrayOfItemStack[i]; + if ((item != null) && (item.getType() == Material.STAINED_GLASS_PANE)) + { + Random r = new Random(); + item.setDurability(KitMapGUICommand.this.glassList.get(r.nextInt(KitMapGUICommand.this.glassList.size())).shortValue()); + } + } + } + } + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/LFFCommand.java b/src/notifyz/hardcorefactions/commands/hcf/LFFCommand.java new file mode 100644 index 0000000..2afcf32 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/LFFCommand.java @@ -0,0 +1,60 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.minecraft.util.gnu.trove.map.TObjectLongMap; +import net.minecraft.util.gnu.trove.map.hash.TObjectLongHashMap; +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.team.utilities.ITeam; +import notifyz.hardcorefactions.utilities.chat.Color; + +public class LFFCommand implements CommandExecutor { + + private static final long LFF_COOLDOWN_DELAY = TimeUnit.HOURS.toMillis(1L); + public final static TObjectLongMap LFF_COOLDOWN = new TObjectLongHashMap<>(); + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage("No Console"); + return true; + } + Player player = (Player) sender; + if (command.getName().equalsIgnoreCase("lff")) { + if (!player.hasPermission("hcf.command.lff")) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + if (args.length == 0) { + ITeam faction = HardcoreFactionsPlugin.getPlugin().getFactionManager().getPlayerFaction(player); + if (faction == null) { + UUID uuid = player.getUniqueId(); + long timestamp = LFF_COOLDOWN.get(uuid); + long millis = System.currentTimeMillis(); + long remaining = timestamp == LFF_COOLDOWN.getNoEntryValue() ? -1L : timestamp - millis; + if (remaining > 0L) { + player.sendMessage(ChatColor.RED + "You cannot use this command for another " + ChatColor.BOLD + DurationFormatUtils.formatDurationWords(remaining, true, true) + "."); + return true; + } + for (String lff : HardcoreFactionsPlugin.getPlugin().getConfig().getStringList("cmd-messages.lff-message")) { + Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', lff).replace("%player%", player.getName()).replace("%playerdisplayname%", player.getDisplayName())); + } + player.sendMessage(Color.translate("&eYou have announced that you are looking for a faction, you must wait 1 hour before doing this again.")); + LFF_COOLDOWN.put(player.getUniqueId(), System.currentTimeMillis() + LFF_COOLDOWN_DELAY); + } else { + player.sendMessage(ChatColor.RED + "You are already in a faction."); + } + } + } + return true; + } +} \ No newline at end of file diff --git a/src/notifyz/hardcorefactions/commands/hcf/LocationCommand.java b/src/notifyz/hardcorefactions/commands/hcf/LocationCommand.java new file mode 100644 index 0000000..c2c604c --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/LocationCommand.java @@ -0,0 +1,64 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.Collections; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.team.utilities.ITeam; + +/** + * Command used to check current the current {@link ITeam} at + * the position of a given {@link Player}s {@link Location}. + */ +public class LocationCommand implements CommandExecutor, TabCompleter { + + private final HardcoreFactionsPlugin plugin; + + public LocationCommand(HardcoreFactionsPlugin plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + Player target; + if (args.length > 0 && sender.hasPermission(command.getPermission() + ".others")) { + target = Bukkit.getPlayer(args[0]); + } else if (sender instanceof Player) { + target = (Player) sender; + } else { + sender.sendMessage(ChatColor.RED + "Usage: /" + label + " [playerName]"); + return true; + } + + if (target == null || (sender instanceof Player && !((Player) sender).canSee(target))) { + sender.sendMessage(ChatColor.GOLD + "Player '" + ChatColor.WHITE + args[0] + + ChatColor.GOLD + "' not found."); + + return true; + } + + ITeam factionAt = plugin.getFactionManager().getFactionAt(target.getLocation()); + + sender.sendMessage(ChatColor.YELLOW + target.getName() + " is in the territory of " + + factionAt.getDisplayName(sender) + ChatColor.YELLOW + + '(' + (factionAt.isSafezone() ? ChatColor.GREEN + "Non-Deathban" : ChatColor.RED + "Deathban") + + ChatColor.YELLOW + ')'); + + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return args.length == 1 && sender.hasPermission(command.getPermission() + ".others") + ? null : Collections.emptyList(); + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/LogoutCommand.java b/src/notifyz/hardcorefactions/commands/hcf/LogoutCommand.java new file mode 100644 index 0000000..18af18d --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/LogoutCommand.java @@ -0,0 +1,76 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.Collections; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.scoreboard.timer.utilities.type.LogoutTimer; + +public class LogoutCommand implements CommandExecutor, TabCompleter { + + private final HardcoreFactionsPlugin plugin; + + public LogoutCommand(HardcoreFactionsPlugin plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable by players."); + return true; + } + + + Player player = (Player) sender; + LogoutTimer logoutTimer = plugin.getTimerManager().getLogoutTimer(); + long remaining = logoutTimer.getRemainingCooldown(player) / 1000; + if (remaining > 0L) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.logout-already-active"))); + } else { + logoutTimer.setCooldown(player, player.getUniqueId()); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.logout-started"))); + /*new BukkitRunnable() { + private int i = 30; + + @Override + public void run() { + + if (this.i <= 0) { + this.cancel(); + return; + } + + if (this.i != 1 && logoutTimer.hasCooldown(player)) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactions.getInstance().getConfig().getString("cmd-messages.logout-started").replace("%time%", "" + this.i))); + } else if (logoutTimer.hasCooldown(player) && this.i == 1){ + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactions.getInstance().getConfig().getString("cmd-messages.logout-started").replace("seconds", "second").replace("%time%", "" + this.i))); + } + + --this.i; + } + }.runTaskTimer(HardcoreFactions.getInstance(), 0L, 20L);*/ + //player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactions.getInstance().getConfig().getString("cmd-messages.logout-started"))); + } + return true; + /*if (!logoutTimer.setCooldown(player, player.getUniqueId())) { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactions.getInstance().getConfig().getString("cmd-messages.logout-already-active"))); + return true; + } + + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactions.getInstance().getConfig().getString("cmd-messages.logout-started"))); + return true;*/ + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return Collections.emptyList(); + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/MapKitCommand.java b/src/notifyz/hardcorefactions/commands/hcf/MapKitCommand.java new file mode 100644 index 0000000..5715d7b --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/MapKitCommand.java @@ -0,0 +1,39 @@ +package notifyz.hardcorefactions.commands.hcf; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; +import notifyz.hardcorefactions.utilities.chat.Color; + +public class MapKitCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage("No Console"); + return true; + } + Player player = (Player) sender; + if (command.getName().equalsIgnoreCase("mapkit")) { + if (!player.hasPermission("hcf.command.mapkit")) { + sender.sendMessage(ChatColor.RED + "You do not have acces to this command."); + return true; + } + if (args.length == 0) { + player.sendMessage(ChatColor.GRAY + BukkitUtils.STRAIGHT_LINE_DEFAULT); + player.sendMessage(""); + player.sendMessage(Color.translate(HardcoreFactionsPlugin.getPlugin().getConfiguration().getScoreboardSidebarTitle() + " &6&lMap Kit")); + player.sendMessage(Color.translate(" &6»&e Protection: " + HardcoreFactionsPlugin.getPlugin().getConfiguration().getEnchantmentLimit(Enchantment.PROTECTION_ENVIRONMENTAL) + ", Sharpness: " + HardcoreFactionsPlugin.getPlugin().getConfiguration().getEnchantmentLimit(Enchantment.DAMAGE_ALL) + ", Power: " + HardcoreFactionsPlugin.getPlugin().getConfiguration().getEnchantmentLimit(Enchantment.ARROW_DAMAGE))); + player.sendMessage(""); + player.sendMessage(ChatColor.GRAY + BukkitUtils.STRAIGHT_LINE_DEFAULT); + } + } + return true; + } +} \ No newline at end of file diff --git a/src/notifyz/hardcorefactions/commands/hcf/MobDropsCommand.java b/src/notifyz/hardcorefactions/commands/hcf/MobDropsCommand.java new file mode 100644 index 0000000..4137fa3 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/MobDropsCommand.java @@ -0,0 +1,59 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.Set; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import com.google.common.collect.Sets; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +public class MobDropsCommand implements Listener, CommandExecutor { + + public static Set disabled = Sets.newHashSet(); + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "Only players can execute this command."); + return true; + } + + Player player = (Player) sender; + + if (disabled.contains(player)) { + disabled.remove(player); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.mobdrops-enabled"))); + } else { + disabled.add(player); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.mobdrops-disabled"))); + } + + return true; + } + + @EventHandler + public void onPlayerPickup(PlayerQuitEvent event) { + disabled.remove(event.getPlayer()); + } + + @EventHandler + public void onPlayerPickup(PlayerPickupItemEvent event) { + Material type = event.getItem().getItemStack().getType(); + if (type == Material.ROTTEN_FLESH || type == Material.BONE || type == Material.GOLD_NUGGET || type == Material.ARROW || type == Material.SPIDER_EYE || type == Material.STRING) { + if (disabled.contains(event.getPlayer())) { + event.setCancelled(true); + } + } + } + +} \ No newline at end of file diff --git a/src/notifyz/hardcorefactions/commands/hcf/PanicCommand.java b/src/notifyz/hardcorefactions/commands/hcf/PanicCommand.java new file mode 100644 index 0000000..ab78814 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/PanicCommand.java @@ -0,0 +1,28 @@ +package notifyz.hardcorefactions.commands.hcf; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.md_5.bungee.api.ChatColor; +import notifyz.hardcorefactions.HardcoreFactionsPlugin; + +public class PanicCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + Player player = (Player) sender; + if (cmd.getName().equalsIgnoreCase("panic") && sender.hasPermission("hcf.command.panic")) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "freeze " + player.getName()); + for (String string : HardcoreFactionsPlugin.getInstance().getConfig() + .getStringList("cmd-messages.panic-message")) { + Bukkit.getServer().broadcast( + ChatColor.translateAlternateColorCodes('&', string).replace("%player%", sender.getName()), + "hcf.panic.notify"); + } + return true; + } + return false; + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/PayCommand.java b/src/notifyz/hardcorefactions/commands/hcf/PayCommand.java new file mode 100644 index 0000000..f40e676 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/PayCommand.java @@ -0,0 +1,100 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.Collections; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.economy.Economy; +import notifyz.hardcorefactions.utilities.utils.JavaUtils; + +/** + * Command used to pay other {@link Player}s some money. + */ +public class PayCommand implements CommandExecutor, TabCompleter { + + private final HardcoreFactionsPlugin plugin; + + public PayCommand(HardcoreFactionsPlugin plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (args.length < 2) { + sender.sendMessage(ChatColor.RED + "Usage: /" + label + " "); + return true; + } + + Integer amount = JavaUtils.tryParseInt(args[1]); + + if (amount == null) { + sender.sendMessage(ChatColor.RED + "'" + args[1] + "' is not a valid number."); + return true; + } + + if (amount <= 0) { + sender.sendMessage(ChatColor.RED + "You must send money in positive quantities."); + return true; + } + + // Calculate the senders balance here. + Player senderPlayer = sender instanceof Player ? (Player) sender : null; + int senderBalance = senderPlayer != null ? plugin.getEconomyManager().getBalance(senderPlayer.getUniqueId()) + : 1024; + + if (senderBalance < amount) { + sender.sendMessage(ChatColor.RED + "You tried to pay " + Economy.ECONOMY_SYMBOL + amount + + ", but you only have " + Economy.ECONOMY_SYMBOL + senderBalance + + " in your bank account."); + + return true; + } + + OfflinePlayer target = Bukkit.getOfflinePlayer(args[0]); //TODO: breaking + + if (sender.equals(target)) { + sender.sendMessage(ChatColor.RED + "You cannot send money to yourself."); + return true; + } + + Player targetPlayer = target.getPlayer(); + + if (!target.hasPlayedBefore() && targetPlayer == null) { + sender.sendMessage(ChatColor.GOLD + "Player '" + ChatColor.WHITE + args[0] + ChatColor.GOLD + + "' not found."); + return true; + } + + if (targetPlayer == null) { + return false; // won't happen, IntelliJ compiler won't ignore + } + + // Make the money transactions. + plugin.getEconomyManager().addBalance(targetPlayer.getUniqueId(), amount); + if (senderPlayer != null) { + plugin.getEconomyManager().subtractBalance(senderPlayer.getUniqueId(), amount); + } + + targetPlayer.sendMessage(ChatColor.YELLOW + sender.getName() + " has sent you " + ChatColor.GOLD + + Economy.ECONOMY_SYMBOL + amount + ChatColor.YELLOW + '.'); + + sender.sendMessage(ChatColor.YELLOW + "You have sent " + ChatColor.GOLD + Economy.ECONOMY_SYMBOL + + amount + ChatColor.YELLOW + " to " + target.getName() + '.'); + + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return args.length == 1 ? null : Collections.emptyList(); + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/PlayTimeCommand.java b/src/notifyz/hardcorefactions/commands/hcf/PlayTimeCommand.java new file mode 100644 index 0000000..565e35c --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/PlayTimeCommand.java @@ -0,0 +1,49 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.Collections; +import java.util.List; + +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.api.utilties.command.IConstantsAPI; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; + +public class PlayTimeCommand implements CommandExecutor { + + @Override + @SuppressWarnings("deprecation") + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + OfflinePlayer target; + + if (args.length >= 1) { + target = BukkitUtils.offlinePlayerWithNameOrUUID(args[0]); + } else { + if (!(sender instanceof Player)) { + sender.sendMessage("You can only use this if you are a player!"); + return true; + } + + target = (OfflinePlayer) sender; + } + + if ((!target.hasPlayedBefore()) && (!target.isOnline())) { + sender.sendMessage(String.format(IConstantsAPI.PLAYER_WITH_NAME_OR_UUID_NOT_FOUND, new Object[]{args[0]})); + return true; + } + //(ChatColor.YELLOW + target.getName() + " has been playing for " + ChatColor.LIGHT_PURPLE + DurationFormatUtils.formatDurationWords(HardcoreFactions.getPlugin().getPlayTimeManager().getTotalPlayTime(target.getUniqueId()), true, true) + ChatColor.YELLOW + " this map."); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', HardcoreFactionsPlugin.getInstance().getConfig().getString("cmd-messages.playtime").replace("%time%", DurationFormatUtils.formatDurationWords(HardcoreFactionsPlugin.getPlugin().getPlayTimeManager().getTotalPlayTime(target.getUniqueId()), true, true)).replace("%target%", target.getName()))); + return true; + } + + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return args.length == 1 ? null : Collections.emptyList(); + } + +} \ No newline at end of file diff --git a/src/notifyz/hardcorefactions/commands/hcf/PvPTimerCommand.java b/src/notifyz/hardcorefactions/commands/hcf/PvPTimerCommand.java new file mode 100644 index 0000000..3eb9e31 --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/PvPTimerCommand.java @@ -0,0 +1,109 @@ +package notifyz.hardcorefactions.commands.hcf; + +import java.util.Collections; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; + +import com.google.common.collect.ImmutableList; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.scoreboard.timer.utilities.type.PvPProtectionTimer; +import notifyz.hardcorefactions.utilities.chat.BukkitUtils; +import notifyz.hardcorefactions.utilities.utils.DurationFormatter; + +/** + * Command used to manage the {@link PvPProtectionTimer} of {@link Player}s. + */ +public class PvPTimerCommand implements CommandExecutor, TabCompleter { + + private final HardcoreFactionsPlugin plugin; + + public PvPTimerCommand(HardcoreFactionsPlugin plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only executable by players."); + return true; + } + + Player player = (Player) sender; + PvPProtectionTimer pvpTimer = plugin.getTimerManager().getInvincibilityTimer(); + + if (args.length == 0) { + printUsage(sender, label, pvpTimer); + return true; + } + + if (args[0].equalsIgnoreCase("enable") || args[0].equalsIgnoreCase("remove") + || args[0].equalsIgnoreCase("off")) { + + if (pvpTimer.getRemainingCooldown(player) <= 0L) { + sender.sendMessage(ChatColor.YELLOW + "Your " + ChatColor.GREEN + pvpTimer.getName() + ChatColor.YELLOW + + " timer is currently not active."); + + return true; + } + + sender.sendMessage(ChatColor.YELLOW + "Your " + ChatColor.GREEN + pvpTimer.getName() + + ChatColor.YELLOW + " is now off."); + + pvpTimer.clearCooldown(player); + return true; + } + + if (args[0].equalsIgnoreCase("remaining") || args[0].equalsIgnoreCase("time") + || args[0].equalsIgnoreCase("left") || args[0].equalsIgnoreCase("check")) { + + long remaining = pvpTimer.getRemainingCooldown(player); + + if (remaining <= 0L) { + sender.sendMessage(ChatColor.YELLOW + "Your " + ChatColor.GREEN + pvpTimer.getName() + ChatColor.YELLOW + + " is currently not active."); + + return true; + } + + sender.sendMessage(ChatColor.YELLOW + "Your " + pvpTimer.getName() + ChatColor.YELLOW + + " is active for another " + ChatColor.BOLD + + DurationFormatter.getRemaining(remaining, true, false) + ChatColor.YELLOW + + (pvpTimer.isPaused(player) ? " and is currently paused" : "") + '.'); + + return true; + } + + printUsage(sender, label, pvpTimer); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return args.length == 1 ? BukkitUtils.getCompletions(args, COMPLETIONS) : Collections.emptyList(); + } + + private static final ImmutableList COMPLETIONS = ImmutableList.of("enable", "time"); + + /** + * Prints the usage of this command to a sender. + * + * @param sender the sender to print for + * @param label the label used for command + */ + private void printUsage(CommandSender sender, String label, PvPProtectionTimer pvpTimer) { + sender.sendMessage(ChatColor.YELLOW + "" + pvpTimer.getName() + ChatColor.YELLOW + " Help"); + sender.sendMessage(" "); + sender.sendMessage(ChatColor.GREEN + "/" + label + ChatColor.YELLOW + " enable - Removes your " + pvpTimer.getName() + + ChatColor.YELLOW + " timer."); + sender.sendMessage(ChatColor.GREEN + "/" + label + ChatColor.YELLOW +" time - Check remaining " + pvpTimer.getName() + + ChatColor.YELLOW + " time."); + sender.sendMessage(ChatColor.GREEN + "/lives" + ChatColor.YELLOW + " - Life and deathban related commands."); + } +} diff --git a/src/notifyz/hardcorefactions/commands/hcf/RebootCommand.java b/src/notifyz/hardcorefactions/commands/hcf/RebootCommand.java new file mode 100644 index 0000000..3d56a4a --- /dev/null +++ b/src/notifyz/hardcorefactions/commands/hcf/RebootCommand.java @@ -0,0 +1,44 @@ +package notifyz.hardcorefactions.commands.hcf; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +import notifyz.hardcorefactions.HardcoreFactionsPlugin; +import notifyz.hardcorefactions.utilities.utils.JavaUtils; + +public class RebootCommand implements CommandExecutor { + + private final HardcoreFactionsPlugin plugin; + + public RebootCommand(HardcoreFactionsPlugin plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (args.length == 0 || args.length < 1) { + sender.sendMessage(ChatColor.RED + "Usage: /reboot start|stop